From 24fb7db17bcae1b4586a9242819684847a126b20 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Mon, 5 Nov 2018 14:49:58 +0100 Subject: [PATCH 001/115] Remove RAC from StructCPID and MiningCPID. --- src/global_objects_noui.hpp | 13 ------ src/main.cpp | 81 +++++++++---------------------------- src/rpcblockchain.cpp | 38 +---------------- 3 files changed, 21 insertions(+), 111 deletions(-) diff --git a/src/global_objects_noui.hpp b/src/global_objects_noui.hpp index a2bb88472d..c86e3d876f 100755 --- a/src/global_objects_noui.hpp +++ b/src/global_objects_noui.hpp @@ -18,26 +18,18 @@ struct StructCPID bool initialized; bool Iscpidvalid; - double rac; double utc; double rectime; double age; - double verifiedrac; double verifiedutc; - double verifiedrectime; double verifiedage; uint32_t entries; - double AverageRAC; double NetworkProjects; - double NetworkRAC; - double TotalRAC; - double TotalNetworkRAC; double Magnitude; double PaymentMagnitude; double owed; double payments; double interestPayments; - double verifiedTotalRAC; double verifiedMagnitude; double TotalMagnitude; uint32_t LowLockTime; @@ -70,12 +62,7 @@ struct StructCPID struct MiningCPID { - double rac; - double pobdifficulty; - unsigned int diffbytes; bool initialized; - double nonce; - double NetworkRAC; double Magnitude; double RSAWeight; double LastPaymentTime; diff --git a/src/main.cpp b/src/main.cpp index 42ee39d04a..889a4597c6 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -229,7 +229,6 @@ extern double LederstrumpfMagnitude2(double Magnitude, int64_t locktime); extern void GetGlobalStatus(); extern bool ProjectIsValid(std::string project); -double GetNetworkAvgByProject(std::string projectname); extern bool IsCPIDValid_Retired(std::string cpid, std::string ENCboincpubkey); extern bool IsCPIDValidv2(MiningCPID& mc, int height); extern std::string getfilecontents(std::string filename); @@ -809,15 +808,12 @@ MiningCPID GetInitializedGlobalCPUMiningCPID(std::string cpid) mc.cpidhash = ""; mc.email = cpid; mc.boincruntimepublickey = cpid; - mc.rac=0; mc.encboincpublickey = ""; mc.enccpid = ""; - mc.NetworkRAC = 0; mc.Magnitude = 0; mc.clientversion = ""; mc.RSAWeight = GetRSAWeightByCPID(cpid); mc.LastPaymentTime = nLastBlockSolved; - mc.diffbytes = 0; mc.lastblockhash = "0"; // Reuse for debugging mc.Organization = GetArg("-org", ""); @@ -827,9 +823,6 @@ MiningCPID GetInitializedGlobalCPUMiningCPID(std::string cpid) MiningCPID GetNextProject(bool bForce) { - - - if (GlobalCPUMiningCPID.projectname.length() > 3 && GlobalCPUMiningCPID.projectname != "INVESTOR" && GlobalCPUMiningCPID.Magnitude >= 1) { if (!Timer_Main("globalcpuminingcpid",10)) @@ -843,18 +836,18 @@ MiningCPID GetNextProject(bool bForce) std::string sBoincKey = GetArgument("boinckey",""); if (!sBoincKey.empty()) { - if (fDebug3 && LessVerbose(50)) LogPrintf("Using cached boinckey for project %s",GlobalCPUMiningCPID.projectname); - msMiningProject = GlobalCPUMiningCPID.projectname; - msMiningCPID = GlobalCPUMiningCPID.cpid; - if (LessVerbose(5)) LogPrintf("BoincKey - Mining project %s RAC(%f)", GlobalCPUMiningCPID.projectname, GlobalCPUMiningCPID.rac); - double ProjectRAC = GetNetworkAvgByProject(GlobalCPUMiningCPID.projectname); - GlobalCPUMiningCPID.NetworkRAC = ProjectRAC; - GlobalCPUMiningCPID.Magnitude = CalculatedMagnitude(GetAdjustedTime(),false); - if (fDebug3) LogPrintf("(boinckey) For CPID %s Verified Magnitude = %f",GlobalCPUMiningCPID.cpid,GlobalCPUMiningCPID.Magnitude); - msMiningErrors = (msMiningCPID == "INVESTOR" || msPrimaryCPID=="INVESTOR" || msMiningCPID.empty()) ? _("Staking Interest") : _("Mining"); - GlobalCPUMiningCPID.RSAWeight = GetRSAWeightByCPID(GlobalCPUMiningCPID.cpid); - GlobalCPUMiningCPID.LastPaymentTime = GetLastPaymentTimeByCPID(GlobalCPUMiningCPID.cpid); - return GlobalCPUMiningCPID; + if (fDebug3 && LessVerbose(50)) + LogPrintf("Using cached boinckey for project %s",GlobalCPUMiningCPID.projectname); + + msMiningProject = GlobalCPUMiningCPID.projectname; + msMiningCPID = GlobalCPUMiningCPID.cpid; + if (LessVerbose(5)) LogPrintf("BoincKey - Mining project %s", GlobalCPUMiningCPID.projectname); + GlobalCPUMiningCPID.Magnitude = CalculatedMagnitude(GetAdjustedTime(),false); + if (fDebug3) LogPrintf("(boinckey) For CPID %s Verified Magnitude = %f",GlobalCPUMiningCPID.cpid,GlobalCPUMiningCPID.Magnitude); + msMiningErrors = (msMiningCPID == "INVESTOR" || msPrimaryCPID=="INVESTOR" || msMiningCPID.empty()) ? _("Staking Interest") : _("Mining"); + GlobalCPUMiningCPID.RSAWeight = GetRSAWeightByCPID(GlobalCPUMiningCPID.cpid); + GlobalCPUMiningCPID.LastPaymentTime = GetLastPaymentTimeByCPID(GlobalCPUMiningCPID.cpid); + return GlobalCPUMiningCPID; } @@ -933,13 +926,11 @@ MiningCPID GetNextProject(bool bForce) GlobalCPUMiningCPID.email = email; - if (LessVerbose(1) || fDebug || fDebug3) LogPrintf("Ready to CPU Mine project %s with CPID %s, RAC(%f) ", - structcpid.projectname.c_str(),structcpid.cpid.c_str(), - structcpid.rac); + if (LessVerbose(1) || fDebug || fDebug3) LogPrintf("Ready to CPU Mine project %s with CPID %s", + structcpid.projectname.c_str(),structcpid.cpid.c_str()); //Required for project to be mined in a block: GlobalCPUMiningCPID.cpid=structcpid.cpid; GlobalCPUMiningCPID.projectname = structcpid.projectname; - GlobalCPUMiningCPID.rac=structcpid.rac; GlobalCPUMiningCPID.encboincpublickey = structcpid.boincpublickey; GlobalCPUMiningCPID.encaes = structcpid.boincpublickey; @@ -974,8 +965,6 @@ MiningCPID GetNextProject(bool bForce) msMiningProject = structcpid.projectname; msMiningCPID = structcpid.cpid; - double ProjectRAC = GetNetworkAvgByProject(GlobalCPUMiningCPID.projectname); - GlobalCPUMiningCPID.NetworkRAC = ProjectRAC; GlobalCPUMiningCPID.Magnitude = CalculatedMagnitude(GetAdjustedTime(),false); if (fDebug && LessVerbose(2)) LogPrintf("For CPID %s Verified Magnitude = %f",GlobalCPUMiningCPID.cpid, GlobalCPUMiningCPID.Magnitude); //Reserved for GRC Speech Synthesis @@ -5003,8 +4992,6 @@ bool LoadBlockIndex(bool fAllowNew) { LOCK(cs_main); - CBigNum bnTrustedModulus; - if (fTestNet) { // GLOBAL TESTNET SETTINGS - R HALFORD @@ -5022,10 +5009,7 @@ bool LoadBlockIndex(bool fAllowNew) MAX_OUTBOUND_CONNECTIONS = (int)GetArg("-maxoutboundconnections", 8); } - - std::string mode = fTestNet ? "TestNet" : "Prod"; - LogPrintf("Mode=%s",mode); - + LogPrintf("Mode=%s", fTestNet ? "TestNet" : "Prod"); // // Load block index @@ -5464,7 +5448,6 @@ void AddResearchMagnitude(CBlockIndex* pIndex) stMag.entries++; stMag.payments += pIndex->nResearchSubsidy; stMag.interestPayments += pIndex->nInterestSubsidy; - stMag.AverageRAC = stMag.rac / (stMag.entries+.01); double total_owed = 0; stMag.owed = GetOutstandingAmountOwed(stMag, cpid, pIndex->nTime, total_owed, pIndex->nMagnitude); @@ -7292,12 +7275,7 @@ std::string SerializeBoincBlock(MiningCPID mcpid, int BlockVersion) mcpid.OrganizationKey = "12345678"; //Only reveal 8 characters } else - { - mcpid.projectname = ""; - mcpid.rac = 0; - mcpid.NetworkRAC = 0; - } - + mcpid.projectname.clear(); mcpid.LastPORBlockHash = GetLastPORBlockHash(mcpid.cpid); @@ -7309,10 +7287,10 @@ std::string SerializeBoincBlock(MiningCPID mcpid, int BlockVersion) mcpid.BoincPublicKey = GetBeaconPublicKey(mcpid.cpid, false); } - std::string bb = mcpid.cpid + delim + mcpid.projectname + delim + mcpid.aesskein + delim + RoundToString(mcpid.rac,0) - + delim + RoundToString(mcpid.pobdifficulty,5) + delim + RoundToString((double)mcpid.diffbytes,0) + std::string bb = mcpid.cpid + delim + mcpid.projectname + delim + mcpid.aesskein + delim + "" + + delim + "" + delim + "" + delim + mcpid.enccpid - + delim + mcpid.encaes + delim + RoundToString(mcpid.nonce,0) + delim + RoundToString(mcpid.NetworkRAC,0) + + delim + mcpid.encaes + delim + "" + delim + "" + delim + version + delim + RoundToString(mcpid.ResearchSubsidy,subsidy_places) + delim + RoundToString(mcpid.LastPaymentTime,0) @@ -7344,16 +7322,12 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) surrogate.projectname = s[1]; boost::to_lower(surrogate.projectname); surrogate.aesskein = s[2]; - surrogate.rac = RoundFromString(s[3],0); - surrogate.pobdifficulty = RoundFromString(s[4],6); - surrogate.diffbytes = (unsigned int)RoundFromString(s[5],0); surrogate.enccpid = s[6]; surrogate.encboincpublickey = s[6]; surrogate.encaes = s[7]; - surrogate.nonce = RoundFromString(s[8],0); if (s.size() > 9) { - surrogate.NetworkRAC = RoundFromString(s[9],0); + // Obsoleted network RAC. } if (s.size() > 10) { @@ -7570,11 +7544,9 @@ void HarvestCPIDs(bool cleardata) structcpid.projectname = GlobalCPUMiningCPID.projectname; structcpid.team = "gridcoin"; //Will be verified later during Netsoft Call structcpid.verifiedteam = "gridcoin"; - structcpid.rac = GlobalCPUMiningCPID.rac; structcpid.cpid = GlobalCPUMiningCPID.cpid; structcpid.boincpublickey = GlobalCPUMiningCPID.encboincpublickey; structcpid.boincruntimepublickey = structcpid.cpidhash; - structcpid.NetworkRAC = GlobalCPUMiningCPID.NetworkRAC; structcpid.email = GlobalCPUMiningCPID.email; // 2-6-2015 R Halford - Ensure CPIDv2 Is populated After deserializing GenBoincKey LogPrintf("GenBoincKey using email %s and cpidhash %s key %s ", structcpid.email, structcpid.cpidhash, sDec); @@ -7659,8 +7631,6 @@ void HarvestCPIDs(bool cleardata) if (fDebug3) LogPrintf("Enumerating boinc local project %s cpid %s valid %s, elapsed %" PRId64, structcpid.projectname, structcpid.cpid, YesNo(structcpid.Iscpidvalid), elapsed); - structcpid.rac = RoundFromString(rac,0); - structcpid.verifiedrac = RoundFromString(rac,0); std::string sLocalClientEmailHash = RetrieveMd5(email); if (email_hash != sLocalClientEmailHash) @@ -7780,24 +7750,18 @@ StructCPID GetStructCPID() { StructCPID c; c.initialized=false; - c.rac = 0; c.utc=0; c.rectime=0; c.age = 0; c.verifiedutc=0; - c.verifiedrectime=0; c.verifiedage=0; c.entries=0; - c.AverageRAC=0; c.NetworkProjects=0; c.Iscpidvalid=false; - c.NetworkRAC=0; - c.TotalRAC=0; c.Magnitude=0; c.PaymentMagnitude=0; c.owed=0; c.payments=0; - c.verifiedTotalRAC=0; c.verifiedMagnitude=0; c.TotalMagnitude=0; c.LowLockTime=0; @@ -7823,12 +7787,7 @@ StructCPID GetStructCPID() MiningCPID GetMiningCPID() { MiningCPID mc; - mc.rac = 0; - mc.pobdifficulty = 0; - mc.diffbytes = 0; mc.initialized = false; - mc.nonce = 0; - mc.NetworkRAC=0; mc.lastblockhash = "0"; mc.Magnitude = 0; mc.RSAWeight = 0; diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 727afa660c..48c00cd719 100755 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -115,30 +115,9 @@ std::string getfilecontents(std::string filename); std::string ToOfficialName(std::string proj); -extern double GetNetworkAvgByProject(std::string projectname); void HarvestCPIDs(bool cleardata); BlockFinder RPCBlockFinder; -double GetNetworkAvgByProject(std::string projectname) -{ - projectname = strReplace(projectname,"_"," "); - if (mvNetwork.size() < 1) return 0; - StructCPID structcpid = mvNetwork[projectname]; - if (!structcpid.initialized) return 0; - double networkavgrac = structcpid.AverageRAC; - return networkavgrac; -} - -double GetNetworkTotalByProject(std::string projectname) -{ - projectname = strReplace(projectname,"_"," "); - if (mvNetwork.size() < 1) return 0; - StructCPID structcpid = mvNetwork[projectname]; - if (!structcpid.initialized) return 0; - double networkavgrac = structcpid.rac; - return networkavgrac; -} - double GetDifficulty(const CBlockIndex* blockindex) { // Floating point number that is a multiple of the minimum difficulty, @@ -256,8 +235,6 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fP if (!IsResearchAgeEnabled(blockindex->nHeight)) { result.pushKV("ProjectName", bb.projectname); - result.pushKV("RAC", bb.rac); - result.pushKV("NetworkRAC", bb.NetworkRAC); result.pushKV("RSAWeight",bb.RSAWeight); } @@ -675,7 +652,6 @@ bool TallyMagnitudesInSuperblock() StructCPID stMagg = GetInitializedStructCPID2(cpid,mvMagnitudesCopy); stMagg.cpid = cpid; stMagg.Magnitude = stCPID.Magnitude; - stMagg.PaymentMagnitude = LederstrumpfMagnitude2(magnitude,GetAdjustedTime()); //Adjust total owed - in case they are a newbie: if (true) { @@ -703,15 +679,12 @@ bool TallyMagnitudesInSuperblock() LogPrintf("TallyMagnitudesInSuperblock: Extracted %.0f magnitude entries from cached superblock %s", TotalNetworkEntries, ReadCache("superblock","block_number").value); double TotalProjects = 0; - double TotalRAC = 0; - double AVGRac = 0; // Load boinc project averages from neural network std::string projects = ReadCache("superblock","averages").value; if (projects.empty()) return false; std::vector vProjects = split(projects.c_str(),";"); if (vProjects.size() > 0) { - double totalRAC = 0; WHITELISTED_PROJECTS = 0; for (unsigned int i = 0; i < vProjects.size(); i++) { @@ -724,22 +697,14 @@ bool TallyMagnitudesInSuperblock() { StructCPID stProject = GetInitializedStructCPID2(project,mvNetworkCopy); stProject.projectname = project; - stProject.AverageRAC = avg; //As of 7-16-2015, start pulling in Total RAC - totalRAC = 0; - totalRAC = RoundFromString("0" + ExtractValue(vProjects[i],",",2),0); - stProject.rac = totalRAC; mvNetworkCopy[project]=stProject; TotalProjects++; WHITELISTED_PROJECTS++; - TotalRAC += avg; } } } } - AVGRac = TotalRAC/(TotalProjects+.01); - network.AverageRAC = AVGRac; - network.rac = TotalRAC; network.NetworkProjects = TotalProjects; mvNetworkCopy["NETWORK"] = network; if (fDebug3) LogPrintf(".TMS43."); @@ -1935,7 +1900,6 @@ UniValue network(const UniValue& params, bool fHelp) UniValue results(UniValue::VOBJ); results.pushKV("Project", stNet.projectname); - results.pushKV("Avg RAC", stNet.AverageRAC); if (stNet.projectname == "NETWORK") { @@ -2568,9 +2532,9 @@ UniValue MagnitudeReport(std::string cpid) if (cpid.empty() || (Contains(structMag.cpid,cpid))) { UniValue entry(UniValue::VOBJ); + if (IsResearchAgeEnabled(pindexBest->nHeight)) { - StructCPID stCPID = GetLifetimeCPID(structMag.cpid,"MagnitudeReport"); double days = (GetAdjustedTime() - stCPID.LowLockTime) / 86400.0; entry.pushKV("CPID",structMag.cpid); From 84e846f42dc205c87136b8ced34d71d69c903052 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sat, 13 Apr 2019 07:30:04 +0200 Subject: [PATCH 002/115] Remove safe mode. --- src/main.cpp | 8 -- src/rpcserver.cpp | 318 +++++++++++++++++++++++----------------------- src/rpcserver.h | 1 - 3 files changed, 156 insertions(+), 171 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 3a27e08592..a04c095fe7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6008,10 +6008,6 @@ string GetWarnings(string strFor) { int nPriority = 0; string strStatusBar; - string strRPC; - - if (GetBoolArg("-testsafemode")) - strRPC = "test"; // Misc warnings like out of disk space and clock is wrong if (strMiscWarning != "") @@ -6030,16 +6026,12 @@ string GetWarnings(string strFor) { nPriority = alert.nPriority; strStatusBar = alert.strStatusBar; - if (nPriority > 1000) - strRPC = strStatusBar; } } } if (strFor == "statusbar") return strStatusBar; - else if (strFor == "rpc") - return strRPC; assert(!"GetWarnings() : invalid parameter"); return "error"; } diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 5fe8041d91..b8b1484484 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -272,170 +272,170 @@ UniValue stop(const UniValue& params, bool fHelp) // This also has improved the performance of rpc outputs. static const CRPCCommand vRPCCommands[] = -{ // name function safemd category - // ------------------------ ----------------------- ------ ----------------- - { "list", &listitem, true, cat_null }, - { "help", &help, true, cat_null }, - { "execute", &execute, true, cat_null }, +{ // name function category + // ------------------------ ----------------------- ----------------- + { "list", &listitem, cat_null }, + { "help", &help, cat_null }, + { "execute", &execute, cat_null }, // Wallet commands - { "addmultisigaddress", &addmultisigaddress, false, cat_wallet }, - { "addredeemscript", &addredeemscript, false, cat_wallet }, - { "backupprivatekeys", &backupprivatekeys, false, cat_wallet }, - { "backupwallet", &backupwallet, true, cat_wallet }, - { "burn", &burn, false, cat_wallet }, - { "checkwallet", &checkwallet, false, cat_wallet }, - { "createrawtransaction", &createrawtransaction, false, cat_wallet }, - { "decoderawtransaction", &decoderawtransaction, false, cat_wallet }, - { "decodescript", &decodescript, false, cat_wallet }, - { "dumpprivkey", &dumpprivkey, false, cat_wallet }, - { "dumpwallet", &dumpwallet, true, cat_wallet }, - { "encryptwallet", &encryptwallet, false, cat_wallet }, - { "getaccount", &getaccount, false, cat_wallet }, - { "getaccountaddress", &getaccountaddress, true, cat_wallet }, - { "getaddressesbyaccount", &getaddressesbyaccount, true, cat_wallet }, - { "getbalance", &getbalance, false, cat_wallet }, - { "getnewaddress", &getnewaddress, true, cat_wallet }, - { "getnewpubkey", &getnewpubkey, true, cat_wallet }, - { "getrawtransaction", &getrawtransaction, false, cat_wallet }, - { "getreceivedbyaccount", &getreceivedbyaccount, false, cat_wallet }, - { "getreceivedbyaddress", &getreceivedbyaddress, false, cat_wallet }, - { "gettransaction", &gettransaction, false, cat_wallet }, - { "getwalletinfo", &getwalletinfo, true, cat_wallet }, - { "importprivkey", &importprivkey, false, cat_wallet }, - { "importwallet", &importwallet, false, cat_wallet }, - { "keypoolrefill", &keypoolrefill, true, cat_wallet }, - { "listaccounts", &listaccounts, false, cat_wallet }, - { "listaddressgroupings", &listaddressgroupings, false, cat_wallet }, - { "listreceivedbyaccount", &listreceivedbyaccount, false, cat_wallet }, - { "listreceivedbyaddress", &listreceivedbyaddress, false, cat_wallet }, - { "listsinceblock", &listsinceblock, false, cat_wallet }, - { "listtransactions", &listtransactions, false, cat_wallet }, - { "listunspent", &listunspent, false, cat_wallet }, - { "makekeypair", &makekeypair, false, cat_wallet }, - { "move", &movecmd, false, cat_wallet }, - { "rain", &rain, false, cat_wallet }, - { "rainbymagnitude", &rainbymagnitude, false, cat_wallet }, - { "repairwallet", &repairwallet, false, cat_wallet }, - { "resendtx", &resendtx, false, cat_wallet }, - { "reservebalance", &reservebalance, false, cat_wallet }, - { "sendfrom", &sendfrom, false, cat_wallet }, - { "sendmany", &sendmany, false, cat_wallet }, - { "sendrawtransaction", &sendrawtransaction, false, cat_wallet }, - { "sendtoaddress", &sendtoaddress, false, cat_wallet }, - { "setaccount", &setaccount, true, cat_wallet }, - { "settxfee", &settxfee, false, cat_wallet }, - { "signmessage", &signmessage, false, cat_wallet }, - { "signrawtransaction", &signrawtransaction, false, cat_wallet }, - { "unspentreport", &unspentreport, false, cat_wallet }, - { "validateaddress", &validateaddress, true, cat_wallet }, - { "validatepubkey", &validatepubkey, true, cat_wallet }, - { "verifymessage", &verifymessage, false, cat_wallet }, - { "walletlock", &walletlock, true, cat_wallet }, - { "walletpassphrase", &walletpassphrase, true, cat_wallet }, - { "walletpassphrasechange", &walletpassphrasechange, false, cat_wallet }, + { "addmultisigaddress", &addmultisigaddress, cat_wallet }, + { "addredeemscript", &addredeemscript, cat_wallet }, + { "backupprivatekeys", &backupprivatekeys, cat_wallet }, + { "backupwallet", &backupwallet, cat_wallet }, + { "burn", &burn, cat_wallet }, + { "checkwallet", &checkwallet, cat_wallet }, + { "createrawtransaction", &createrawtransaction, cat_wallet }, + { "decoderawtransaction", &decoderawtransaction, cat_wallet }, + { "decodescript", &decodescript, cat_wallet }, + { "dumpprivkey", &dumpprivkey, cat_wallet }, + { "dumpwallet", &dumpwallet, cat_wallet }, + { "encryptwallet", &encryptwallet, cat_wallet }, + { "getaccount", &getaccount, cat_wallet }, + { "getaccountaddress", &getaccountaddress, cat_wallet }, + { "getaddressesbyaccount", &getaddressesbyaccount, cat_wallet }, + { "getbalance", &getbalance, cat_wallet }, + { "getnewaddress", &getnewaddress, cat_wallet }, + { "getnewpubkey", &getnewpubkey, cat_wallet }, + { "getrawtransaction", &getrawtransaction, cat_wallet }, + { "getreceivedbyaccount", &getreceivedbyaccount, cat_wallet }, + { "getreceivedbyaddress", &getreceivedbyaddress, cat_wallet }, + { "gettransaction", &gettransaction, cat_wallet }, + { "getwalletinfo", &getwalletinfo, cat_wallet }, + { "importprivkey", &importprivkey, cat_wallet }, + { "importwallet", &importwallet, cat_wallet }, + { "keypoolrefill", &keypoolrefill, cat_wallet }, + { "listaccounts", &listaccounts, cat_wallet }, + { "listaddressgroupings", &listaddressgroupings, cat_wallet }, + { "listreceivedbyaccount", &listreceivedbyaccount, cat_wallet }, + { "listreceivedbyaddress", &listreceivedbyaddress, cat_wallet }, + { "listsinceblock", &listsinceblock, cat_wallet }, + { "listtransactions", &listtransactions, cat_wallet }, + { "listunspent", &listunspent, cat_wallet }, + { "makekeypair", &makekeypair, cat_wallet }, + { "move", &movecmd, cat_wallet }, + { "rain", &rain, cat_wallet }, + { "rainbymagnitude", &rainbymagnitude, cat_wallet }, + { "repairwallet", &repairwallet, cat_wallet }, + { "resendtx", &resendtx, cat_wallet }, + { "reservebalance", &reservebalance, cat_wallet }, + { "sendfrom", &sendfrom, cat_wallet }, + { "sendmany", &sendmany, cat_wallet }, + { "sendrawtransaction", &sendrawtransaction, cat_wallet }, + { "sendtoaddress", &sendtoaddress, cat_wallet }, + { "setaccount", &setaccount, cat_wallet }, + { "settxfee", &settxfee, cat_wallet }, + { "signmessage", &signmessage, cat_wallet }, + { "signrawtransaction", &signrawtransaction, cat_wallet }, + { "unspentreport", &unspentreport, cat_wallet }, + { "validateaddress", &validateaddress, cat_wallet }, + { "validatepubkey", &validatepubkey, cat_wallet }, + { "verifymessage", &verifymessage, cat_wallet }, + { "walletlock", &walletlock, cat_wallet }, + { "walletpassphrase", &walletpassphrase, cat_wallet }, + { "walletpassphrasechange", &walletpassphrasechange, cat_wallet }, // Mining commands - { "advertisebeacon", &advertisebeacon, false, cat_mining }, - { "beaconreport", &beaconreport, false, cat_mining }, - { "beaconstatus", &beaconstatus, false, cat_mining }, - { "currentneuralhash", ¤tneuralhash, false, cat_mining }, - { "currentneuralreport", ¤tneuralreport, false, cat_mining }, - { "explainmagnitude", &explainmagnitude, false, cat_mining }, - { "getmininginfo", &getmininginfo, false, cat_mining }, - { "lifetime", &lifetime, false, cat_mining }, - { "magnitude", &magnitude, false, cat_mining }, - { "myneuralhash", &myneuralhash, false, cat_mining }, - { "neuralhash", &neuralhash, false, cat_mining }, - { "neuralreport", &neuralreport, false, cat_mining }, - { "resetcpids", &resetcpids, false, cat_mining }, - { "staketime", &staketime, false, cat_mining }, - { "superblockage", &superblockage, false, cat_mining }, - { "superblocks", &superblocks, false, cat_mining }, - { "syncdpor2", &syncdpor2, false, cat_mining }, - { "upgradedbeaconreport", &upgradedbeaconreport, false, cat_mining }, + { "advertisebeacon", &advertisebeacon, cat_mining }, + { "beaconreport", &beaconreport, cat_mining }, + { "beaconstatus", &beaconstatus, cat_mining }, + { "currentneuralhash", ¤tneuralhash, cat_mining }, + { "currentneuralreport", ¤tneuralreport, cat_mining }, + { "explainmagnitude", &explainmagnitude, cat_mining }, + { "getmininginfo", &getmininginfo, cat_mining }, + { "lifetime", &lifetime, cat_mining }, + { "magnitude", &magnitude, cat_mining }, + { "myneuralhash", &myneuralhash, cat_mining }, + { "neuralhash", &neuralhash, cat_mining }, + { "neuralreport", &neuralreport, cat_mining }, + { "resetcpids", &resetcpids, cat_mining }, + { "staketime", &staketime, cat_mining }, + { "superblockage", &superblockage, cat_mining }, + { "superblocks", &superblocks, cat_mining }, + { "syncdpor2", &syncdpor2, cat_mining }, + { "upgradedbeaconreport", &upgradedbeaconreport, cat_mining }, // Developer commands - { "addkey", &addkey, false, cat_developer }, - { "currentcontractaverage", ¤tcontractaverage, false, cat_developer }, - { "debug", &debug, true, cat_developer }, - { "debug10", &debug10, true, cat_developer }, - { "debug2", &debug2, true, cat_developer }, - { "debug3", &debug3, true, cat_developer }, - { "debug4", &debug4, true, cat_developer }, - { "debugnet", &debugnet, true, cat_developer }, - { "dportally", &dportally, false, cat_developer }, - { "exportstats1", &rpc_exportstats, false, cat_developer }, - { "forcequorum", &forcequorum, false, cat_developer }, - { "gatherneuralhashes", &gatherneuralhashes, false, cat_developer }, - { "genboinckey", &genboinckey, false, cat_developer }, - { "getblockstats", &rpc_getblockstats, false, cat_developer }, - { "getlistof", &getlistof, false, cat_developer }, - { "getnextproject", &getnextproject, false, cat_developer }, - { "getrecentblocks", &rpc_getrecentblocks, false, cat_developer }, - { "getsupervotes", &rpc_getsupervotes, false, cat_developer }, - { "listdata", &listdata, false, cat_developer }, - { "listprojects", &listprojects, false, cat_developer }, - { "memorizekeys", &memorizekeys, false, cat_developer }, - { "network", &network, false, cat_developer }, - { "neuralrequest", &neuralrequest, false, cat_developer }, - { "projects", &projects, false, cat_developer }, - { "readconfig", &readconfig, false, cat_developer }, - { "readdata", &readdata, false, cat_developer }, - { "refhash", &refhash, false, cat_developer }, - { "reorganize", &rpc_reorganize, false, cat_developer }, - { "sendalert", &sendalert, false, cat_developer }, - { "sendalert2", &sendalert2, false, cat_developer }, - { "sendblock", &sendblock, false, cat_developer }, - { "sendrawcontract", &sendrawcontract, false, cat_developer }, - { "superblockaverage", &superblockaverage, false, cat_developer }, - { "tally", &tally, false, cat_developer }, - { "tallyneural", &tallyneural, false, cat_developer }, - { "testnewcontract", &testnewcontract, false, cat_developer }, - { "versionreport", &versionreport, false, cat_developer }, - { "writedata", &writedata, false, cat_developer }, - - { "listmanifests", &listmanifests, false, cat_developer }, - { "getmpart", &getmpart, false, cat_developer }, - { "sendscraperfilemanifest", &sendscraperfilemanifest, false, cat_developer }, - { "savescraperfilemanifest", &savescraperfilemanifest, false, cat_developer }, - { "deletecscrapermanifest", &deletecscrapermanifest, false, cat_developer }, - { "archivescraperlog", &archivescraperlog, false, cat_developer }, + { "addkey", &addkey, cat_developer }, + { "currentcontractaverage", ¤tcontractaverage, cat_developer }, + { "debug", &debug, cat_developer }, + { "debug10", &debug10, cat_developer }, + { "debug2", &debug2, cat_developer }, + { "debug3", &debug3, cat_developer }, + { "debug4", &debug4, cat_developer }, + { "debugnet", &debugnet, cat_developer }, + { "dportally", &dportally, cat_developer }, + { "exportstats1", &rpc_exportstats, cat_developer }, + { "forcequorum", &forcequorum, cat_developer }, + { "gatherneuralhashes", &gatherneuralhashes, cat_developer }, + { "genboinckey", &genboinckey, cat_developer }, + { "getblockstats", &rpc_getblockstats, cat_developer }, + { "getlistof", &getlistof, cat_developer }, + { "getnextproject", &getnextproject, cat_developer }, + { "getrecentblocks", &rpc_getrecentblocks, cat_developer }, + { "getsupervotes", &rpc_getsupervotes, cat_developer }, + { "listdata", &listdata, cat_developer }, + { "listprojects", &listprojects, cat_developer }, + { "memorizekeys", &memorizekeys, cat_developer }, + { "network", &network, cat_developer }, + { "neuralrequest", &neuralrequest, cat_developer }, + { "projects", &projects, cat_developer }, + { "readconfig", &readconfig, cat_developer }, + { "readdata", &readdata, cat_developer }, + { "refhash", &refhash, cat_developer }, + { "reorganize", &rpc_reorganize, cat_developer }, + { "sendalert", &sendalert, cat_developer }, + { "sendalert2", &sendalert2, cat_developer }, + { "sendblock", &sendblock, cat_developer }, + { "sendrawcontract", &sendrawcontract, cat_developer }, + { "superblockaverage", &superblockaverage, cat_developer }, + { "tally", &tally, cat_developer }, + { "tallyneural", &tallyneural, cat_developer }, + { "testnewcontract", &testnewcontract, cat_developer }, + { "versionreport", &versionreport, cat_developer }, + { "writedata", &writedata, cat_developer }, + + { "listmanifests", &listmanifests, cat_developer }, + { "getmpart", &getmpart, cat_developer }, + { "sendscraperfilemanifest", &sendscraperfilemanifest, cat_developer }, + { "savescraperfilemanifest", &savescraperfilemanifest, cat_developer }, + { "deletecscrapermanifest", &deletecscrapermanifest, cat_developer }, + { "archivescraperlog", &archivescraperlog, cat_developer }, // Network commands - { "addnode", &addnode, false, cat_network }, - { "addpoll", &addpoll, false, cat_network }, - { "askforoutstandingblocks", &askforoutstandingblocks, false, cat_network }, - { "getblockchaininfo", &getblockchaininfo, true, cat_network }, - { "getnetworkinfo", &getnetworkinfo, true, cat_network }, - { "currenttime", ¤ttime, false, cat_network }, - { "decryptphrase", &decryptphrase, false, cat_network }, - { "encryptphrase", &encryptphrase, false, cat_network }, - { "getaddednodeinfo", &getaddednodeinfo, true, cat_network }, - { "getbestblockhash", &getbestblockhash, true, cat_network }, - { "getblock", &getblock, true, cat_network }, - { "getblockbynumber", &getblockbynumber, true, cat_network }, - { "getblockcount", &getblockcount, true, cat_network }, - { "getblockhash", &getblockhash, true, cat_network }, - { "getcheckpoint", &getcheckpoint, true, cat_network }, - { "getconnectioncount", &getconnectioncount, true, cat_network }, - { "getdifficulty", &getdifficulty, true, cat_network }, - { "getinfo", &getinfo, true, cat_network }, - { "getnettotals", &getnettotals, true, cat_network }, - { "getpeerinfo", &getpeerinfo, true, cat_network }, - { "getrawmempool", &getrawmempool, true, cat_network }, - { "listallpolls", &listallpolls, true, cat_network }, - { "listallpolldetails", &listallpolldetails, true, cat_network }, - { "listpolldetails", &listpolldetails, true, cat_network }, - { "listpollresults", &listpollresults, true, cat_network }, - { "listpolls", &listpolls, true, cat_network }, - { "memorypool", &memorypool, true, cat_network }, - { "networktime", &networktime, true, cat_network }, - { "ping", &ping, true, cat_network }, - { "showblock", &showblock, true, cat_network }, - { "stop", &stop, true, cat_network }, - { "vote", &vote, false, cat_network }, - { "votedetails", &votedetails, true, cat_network }, + { "addnode", &addnode, cat_network }, + { "addpoll", &addpoll, cat_network }, + { "askforoutstandingblocks", &askforoutstandingblocks, cat_network }, + { "getblockchaininfo", &getblockchaininfo, cat_network }, + { "getnetworkinfo", &getnetworkinfo, cat_network }, + { "currenttime", ¤ttime, cat_network }, + { "decryptphrase", &decryptphrase, cat_network }, + { "encryptphrase", &encryptphrase, cat_network }, + { "getaddednodeinfo", &getaddednodeinfo, cat_network }, + { "getbestblockhash", &getbestblockhash, cat_network }, + { "getblock", &getblock, cat_network }, + { "getblockbynumber", &getblockbynumber, cat_network }, + { "getblockcount", &getblockcount, cat_network }, + { "getblockhash", &getblockhash, cat_network }, + { "getcheckpoint", &getcheckpoint, cat_network }, + { "getconnectioncount", &getconnectioncount, cat_network }, + { "getdifficulty", &getdifficulty, cat_network }, + { "getinfo", &getinfo, cat_network }, + { "getnettotals", &getnettotals, cat_network }, + { "getpeerinfo", &getpeerinfo, cat_network }, + { "getrawmempool", &getrawmempool, cat_network }, + { "listallpolls", &listallpolls, cat_network }, + { "listallpolldetails", &listallpolldetails, cat_network }, + { "listpolldetails", &listpolldetails, cat_network }, + { "listpollresults", &listpollresults, cat_network }, + { "listpolls", &listpolls, cat_network }, + { "memorypool", &memorypool, cat_network }, + { "networktime", &networktime, cat_network }, + { "ping", &ping, cat_network }, + { "showblock", &showblock, cat_network }, + { "stop", &stop, cat_network }, + { "vote", &vote, cat_network }, + { "votedetails", &votedetails, cat_network }, }; CRPCTable::CRPCTable() @@ -865,12 +865,6 @@ UniValue CRPCTable::execute(const std::string& strMethod, const UniValue& params if (!pcmd) throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Method not found"); - // Observe safe mode - string strWarning = GetWarnings("rpc"); - if (strWarning != "" && !GetBoolArg("-disablesafemode") && - !pcmd->okSafeMode) - throw JSONRPCError(RPC_FORBIDDEN_BY_SAFE_MODE, string("Safe mode: ") + strWarning); - // Lets add a optional debug4 to display how long it takes the rpc commands to be performed in ms // We will do this only on successful calls not exceptions try diff --git a/src/rpcserver.h b/src/rpcserver.h index 739673dd51..a6f5abdb49 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -50,7 +50,6 @@ class CRPCCommand public: std::string name; rpcfn_type actor; - bool okSafeMode; rpccategory category; }; From d521776caac6630541a13d3e83af461b6d04eb36 Mon Sep 17 00:00:00 2001 From: RoboticMind <30132912+RoboticMind@users.noreply.github.com> Date: Mon, 29 Apr 2019 07:06:47 -0400 Subject: [PATCH 003/115] Remove bitcoin.moc in Makefile.qt.include --- src/Makefile.qt.include | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 8d62a913c5..4aa1d5e76e 100755 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -130,8 +130,7 @@ GRIDCOIN_MM = \ QT_MOC = \ qt/overviewpage.moc \ - qt/rpcconsole.moc \ - qt/bitcoin.moc + qt/rpcconsole.moc QT_QRC_CPP = qt/qrc_bitcoin.cpp QT_QRC = qt/bitcoin.qrc From 90a57e9bfee564f93016ee3cea2c223cbc565f26 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 30 Apr 2019 13:03:30 -0500 Subject: [PATCH 004/115] Reconcile translatable strings in core code --- src/miner.cpp | 11 ++++++----- src/qt/bitcoinstrings.cpp | 11 ++++++++--- src/txdb-leveldb.cpp | 9 +++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 92ec11749f..5458820917 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -71,12 +71,13 @@ class COrphan //! //! \return Always \false - suitable for returning from the call directly. //! -bool BreakForNoCoins(CMinerStatus& status, const char* message) +bool BreakForNoCoins(CMinerStatus& status, const std::string& message) { LOCK(status.lock); status.Clear(); - status.ReasonNotStaking += _(message); + status.ReasonNotStaking += message; + status.ReasonNotStaking += "; "; if (fDebug) { LogPrintf("CreateCoinStake: %s", MinerStatus.ReasonNotStaking); @@ -443,15 +444,15 @@ bool CreateCoinStake( CBlock &blocknew, CKey &key, //Request all the coins here, check reserve later if (BalanceToStake <= 0) { - return BreakForNoCoins(MinerStatus, "No coins; "); + return BreakForNoCoins(MinerStatus, _("No coins")); } else if (!wallet.SelectCoinsForStaking(BalanceToStake*2, txnew.nTime, CoinsToStake, nValueIn)) { - return BreakForNoCoins(MinerStatus, "Waiting for coins to mature; "); + return BreakForNoCoins(MinerStatus, _("Waiting for coins to mature")); } BalanceToStake -= nReserveBalance; if (BalanceToStake <= 0) { - return BreakForNoCoins(MinerStatus, "Entire balance reserved; "); + return BreakForNoCoins(MinerStatus, _("Entire balance reserved")); } if(fDebug2) LogPrintf("CreateCoinStake: Staking nTime/16= %d Bits= %u", diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 7e2397690d..224781ec41 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -123,6 +123,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Block Version"), QT_TRANSLATE_NOOP("bitcoin-core", "Block creation options:"), QT_TRANSLATE_NOOP("bitcoin-core", "Block not in index"), QT_TRANSLATE_NOOP("bitcoin-core", "Block read failed"), +QT_TRANSLATE_NOOP("bitcoin-core", "Blocks Loaded"), +QT_TRANSLATE_NOOP("bitcoin-core", "Blocks Verified"), QT_TRANSLATE_NOOP("bitcoin-core", "Boinc Mining"), QT_TRANSLATE_NOOP("bitcoin-core", "Boinc Public Key"), QT_TRANSLATE_NOOP("bitcoin-core", "Boinc Reward"), @@ -146,6 +148,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Discover own IP address (default: 1 when list QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), QT_TRANSLATE_NOOP("bitcoin-core", "Duration"), QT_TRANSLATE_NOOP("bitcoin-core", "ERROR"), +QT_TRANSLATE_NOOP("bitcoin-core", "Entire balance reserved"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading blkindex.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted"), @@ -200,7 +203,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Message Data"), QT_TRANSLATE_NOOP("bitcoin-core", "Message Length"), QT_TRANSLATE_NOOP("bitcoin-core", "Message Type"), QT_TRANSLATE_NOOP("bitcoin-core", "Message"), -QT_TRANSLATE_NOOP("bitcoin-core", "Messate Type"), QT_TRANSLATE_NOOP("bitcoin-core", "Miner: "), QT_TRANSLATE_NOOP("bitcoin-core", "Mining"), QT_TRANSLATE_NOOP("bitcoin-core", "Name"), @@ -209,14 +211,16 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Network Date"), QT_TRANSLATE_NOOP("bitcoin-core", "Neural Contract Binary Size"), QT_TRANSLATE_NOOP("bitcoin-core", "Neural Hash"), QT_TRANSLATE_NOOP("bitcoin-core", "No Attached Messages"), -QT_TRANSLATE_NOOP("bitcoin-core", "No coins; "), +QT_TRANSLATE_NOOP("bitcoin-core", "No coins"), +QT_TRANSLATE_NOOP("bitcoin-core", "No current polls"), QT_TRANSLATE_NOOP("bitcoin-core", "Offline; "), QT_TRANSLATE_NOOP("bitcoin-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), QT_TRANSLATE_NOOP("bitcoin-core", "Options:"), QT_TRANSLATE_NOOP("bitcoin-core", "Organization"), -QT_TRANSLATE_NOOP("bitcoin-core", "Out of rance exception while parsing Transaction Message -> "), +QT_TRANSLATE_NOOP("bitcoin-core", "Out of range exception while parsing Transaction Message -> "), QT_TRANSLATE_NOOP("bitcoin-core", "Output extra debugging information. Implies all other -debug* options"), QT_TRANSLATE_NOOP("bitcoin-core", "Output extra network debugging information"), +QT_TRANSLATE_NOOP("bitcoin-core", "POR Blocks Verified"), QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-core", "Please wait for new user wizard to start..."), QT_TRANSLATE_NOOP("bitcoin-core", "Prepend debug output with timestamp"), @@ -275,6 +279,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-core", "Verifying database integrity..."), QT_TRANSLATE_NOOP("bitcoin-core", "Vote"), +QT_TRANSLATE_NOOP("bitcoin-core", "Waiting for coins to mature"), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet %s resides outside data directory %s."), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet locked; "), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Gridcoin to complete"), diff --git a/src/txdb-leveldb.cpp b/src/txdb-leveldb.cpp index f40dc7f9bb..26a4974723 100644 --- a/src/txdb-leveldb.cpp +++ b/src/txdb-leveldb.cpp @@ -392,8 +392,7 @@ bool CTxDB::LoadBlockIndex() nLoaded +=10000; if (nLoaded > nHighest) nHighest=nLoaded; if (nHighest < nGrandfather) nHighest=nGrandfather; - std::string sBlocksLoaded = ToString(nLoaded) + "/" + ToString(nHighest) + " Blocks Loaded"; - uiInterface.InitMessage(_(sBlocksLoaded.c_str())); + uiInterface.InitMessage(strprintf("%" PRId64 "/%" PRId64 " %s", nLoaded, nHighest, _("Blocks Loaded"))); fprintf(stdout,"%d ",nLoaded); fflush(stdout); } } @@ -484,8 +483,7 @@ bool CTxDB::LoadBlockIndex() nLoaded +=1000; if (nLoaded > nHighest) nHighest=nLoaded; if (nHighest < nGrandfather) nHighest=nGrandfather; - std::string sBlocksLoaded = ToString(nLoaded) + "/" + ToString(nHighest) + " Blocks Verified"; - uiInterface.InitMessage(_(sBlocksLoaded.c_str())); + uiInterface.InitMessage(strprintf("%" PRId64 "/%" PRId64 " %s", nLoaded, nHighest, _("Blocks Verified"))); } } @@ -618,8 +616,7 @@ bool CTxDB::LoadBlockIndex() nLoaded +=10000; if (nLoaded > nHighest) nHighest=nLoaded; if (nHighest < nGrandfather) nHighest=nGrandfather; - std::string sBlocksLoaded = ToString(nLoaded) + "/" + ToString(nHighest) + " POR Blocks Verified"; - uiInterface.InitMessage(_(sBlocksLoaded.c_str())); + uiInterface.InitMessage(strprintf("%" PRId64 "/%" PRId64 " %s", nLoaded, nHighest, _("POR Blocks Verified"))); } // Block repair and reward collection only needs to be done after From a97e2b51466b995c97be34d938b1368fa337c585 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 30 Apr 2019 15:17:10 -0500 Subject: [PATCH 005/115] Regenerate Qt Linguist translation units --- src/qt/locale/bitcoin_af_ZA.ts | 588 +++++++++---------- src/qt/locale/bitcoin_ar.ts | 517 +++++++++-------- src/qt/locale/bitcoin_be_BY.ts | 522 +++++++++-------- src/qt/locale/bitcoin_bg.ts | 541 +++++++++--------- src/qt/locale/bitcoin_bs.ts | 440 ++++++++------- src/qt/locale/bitcoin_ca.ts | 545 +++++++++--------- src/qt/locale/bitcoin_ca@valencia.ts | 541 +++++++++--------- src/qt/locale/bitcoin_ca_ES.ts | 626 +++++++++------------ src/qt/locale/bitcoin_cs.ts | 569 +++++++++---------- src/qt/locale/bitcoin_cy.ts | 452 ++++++++------- src/qt/locale/bitcoin_da.ts | 639 +++++++++------------ src/qt/locale/bitcoin_de.ts | 641 +++++++++------------ src/qt/locale/bitcoin_el_GR.ts | 501 +++++++++-------- src/qt/locale/bitcoin_en.ts | 528 +++++++++-------- src/qt/locale/bitcoin_eo.ts | 518 +++++++++-------- src/qt/locale/bitcoin_es.ts | 725 +++++++++--------------- src/qt/locale/bitcoin_es_CL.ts | 488 ++++++++-------- src/qt/locale/bitcoin_es_DO.ts | 521 +++++++++-------- src/qt/locale/bitcoin_es_MX.ts | 462 ++++++++------- src/qt/locale/bitcoin_es_UY.ts | 432 +++++++------- src/qt/locale/bitcoin_et.ts | 520 +++++++++-------- src/qt/locale/bitcoin_eu_ES.ts | 466 ++++++++------- src/qt/locale/bitcoin_fa.ts | 467 ++++++++------- src/qt/locale/bitcoin_fa_IR.ts | 471 +++++++++------- src/qt/locale/bitcoin_fi.ts | 559 ++++++++---------- src/qt/locale/bitcoin_fr.ts | 725 +++++++++--------------- src/qt/locale/bitcoin_fr_CA.ts | 616 +++++++++----------- src/qt/locale/bitcoin_gl.ts | 542 ++++++++---------- src/qt/locale/bitcoin_he.ts | 507 +++++++++-------- src/qt/locale/bitcoin_hi_IN.ts | 440 ++++++++------- src/qt/locale/bitcoin_hr.ts | 486 ++++++++-------- src/qt/locale/bitcoin_hu.ts | 512 +++++++++-------- src/qt/locale/bitcoin_id_ID.ts | 512 ++++++++--------- src/qt/locale/bitcoin_it.ts | 733 +++++++++--------------- src/qt/locale/bitcoin_ja.ts | 525 ++++++++--------- src/qt/locale/bitcoin_ka.ts | 474 +++++++++------- src/qt/locale/bitcoin_kk_KZ.ts | 436 +++++++------- src/qt/locale/bitcoin_ko_KR.ts | 515 +++++++++-------- src/qt/locale/bitcoin_ky.ts | 420 ++++++++------ src/qt/locale/bitcoin_la.ts | 499 ++++++++-------- src/qt/locale/bitcoin_lt.ts | 502 +++++++++-------- src/qt/locale/bitcoin_lv_LV.ts | 492 ++++++++-------- src/qt/locale/bitcoin_ms_MY.ts | 440 ++++++++------- src/qt/locale/bitcoin_nb.ts | 547 +++++++++--------- src/qt/locale/bitcoin_nl.ts | 621 +++++++++----------- src/qt/locale/bitcoin_pam.ts | 496 ++++++++-------- src/qt/locale/bitcoin_pl.ts | 813 ++++++++++----------------- src/qt/locale/bitcoin_pt_BR.ts | 552 +++++++++--------- src/qt/locale/bitcoin_pt_PT.ts | 730 +++++++++--------------- src/qt/locale/bitcoin_ro_RO.ts | 557 ++++++++---------- src/qt/locale/bitcoin_ru.ts | 730 +++++++++--------------- src/qt/locale/bitcoin_sk.ts | 672 +++++++++------------- src/qt/locale/bitcoin_sl_SI.ts | 557 ++++++++---------- src/qt/locale/bitcoin_sq.ts | 466 ++++++++------- src/qt/locale/bitcoin_sr.ts | 442 ++++++++------- src/qt/locale/bitcoin_sv.ts | 716 +++++++++-------------- src/qt/locale/bitcoin_th_TH.ts | 452 ++++++++------- src/qt/locale/bitcoin_tr.ts | 671 +++++++++------------- src/qt/locale/bitcoin_uk.ts | 473 ++++++++-------- src/qt/locale/bitcoin_ur_PK.ts | 426 ++++++++------ src/qt/locale/bitcoin_vi.ts | 428 ++++++++------ src/qt/locale/bitcoin_vi_VN.ts | 467 ++++++++------- src/qt/locale/bitcoin_zh_CN.ts | 730 +++++++++--------------- src/qt/locale/bitcoin_zh_TW.ts | 523 ++++++++--------- 64 files changed, 16635 insertions(+), 18089 deletions(-) diff --git a/src/qt/locale/bitcoin_af_ZA.ts b/src/qt/locale/bitcoin_af_ZA.ts index da16203238..5b485221ff 100644 --- a/src/qt/locale/bitcoin_af_ZA.ts +++ b/src/qt/locale/bitcoin_af_ZA.ts @@ -23,15 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Dit is eksperimentele sagteware. Versprei onder die MIT / X11 sagteware lisensie, sien die meegaande lĂȘer kopieer of http://www.opensource.org/licenses/mit-license.php. Hierdie produk bevat sagteware wat ontwikkel is deur die OpenSSL Projek vir gebruik in die OpenSSL Toolkit (http://www.openssl.org/) en kriptografiese sagteware geskryf deur Eric Young (eay@cryptsoft.com) en UPnP sagteware geskryf deur Thomas Bernard. - AddressBookPage @@ -308,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Overview &Oorsig @@ -338,17 +329,17 @@ This product includes software developed by the OpenSSL Project for use in the O Sluit af - + &Options... &Opsies - + Wallet Beursie - + &Backup Wallet/Config... @@ -358,7 +349,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File &LĂȘer @@ -368,12 +359,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Instellings - + &Help &Hulp - + &Send @@ -459,28 +450,12 @@ This product includes software developed by the OpenSSL Project for use in the O Wys inligting oor Gridcoin - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + %n second(s) ago %n second ago @@ -512,7 +487,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Voting @@ -522,7 +497,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -551,14 +526,6 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet Enkripteer of dekripteer Beursie - - &Backup Wallet... - &Rugsteun Beursie... - - - Backup wallet to another location - Rugsteun Beursie na 'n ander ligging - &Change Passphrase... @@ -620,24 +587,19 @@ This product includes software developed by the OpenSSL Project for use in the O Oop ontfouting en diagnostiese konsole - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client Gridcoin kliĂ«nt @@ -654,34 +616,18 @@ This product includes software developed by the OpenSSL Project for use in the O - - %1 second(s) ago - %1 second ago - - - %1 minute(s) ago - %1 minuut gelede - - - %1 hour(s) ago - %1 uur gelede - - - %1 day(s) ago - %1 dag gelede - Up to date Up to date - + Catching up... Vang tans op... - + Last received block was generated %1. Laaste ontvang blok was Gegenereer wanneer %1. @@ -751,7 +697,7 @@ Adres: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -766,7 +712,7 @@ Adres: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -776,19 +722,37 @@ Adres: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Bedrag: %2 -Tipe: %3 -Adres: %4 - + + Scraper: waiting on wallet to sync. + - + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI kan nie parsed word nie! Dit kan veroorsaak word deur 'n ongeldige Gridcoin adres of misvormde URI parameters. @@ -799,10 +763,6 @@ Adres: %4 URI handling URI hantering - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Beursie is <b>geĂ«nkripteerde</b> en tans <b>ontsluit</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> @@ -841,7 +801,7 @@ Adres: %4 - + %n second(s) @@ -873,32 +833,12 @@ Adres: %4 - Not staking because wallet is locked - Stutting nie omdat beursie is gesluit - - - Not staking because wallet is offline - Stutting nie omdat beursie is vanlyn - - - Not staking because wallet is syncing - Stutting nie omdat Beursie sinkroniseer tans - - - Not staking because you don't have mature coins - Stutting nie want jy hoef nie volwasse muntstukke - - - Not staking - Nie stutting - - - + Gridcoin Gridcoin - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. 'N fatale fout het voorgekom. Gridcoin kan nie meer veilig voort en sal sluit. @@ -906,7 +846,7 @@ Adres: %4 ClientModel - + Network Alert Netwerk ontvanklike @@ -1000,10 +940,6 @@ Adres: %4 Tree &mode - - List mode - Lys modus - Label @@ -1371,7 +1307,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. NewPollDialog - + Create Poll @@ -1817,6 +1753,14 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. uit sinchro + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1878,17 +1822,17 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. RPCConsole - + &Information Informasie - + Gridcoin - Debug Console - + Boost version @@ -1905,7 +1849,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. - + N/A (n.v.t) @@ -2054,6 +1998,11 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Clear console Duidelike konsole + + + &Scraper + + Yes @@ -2080,7 +2029,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Tipe <b>help</b> vir 'n oorsig van beskikbare bevele. - + %1 B @@ -2377,27 +2326,27 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. SendCoinsEntry - + A&mount: &Bedrag: - + Message: Boodskap: - + Form Vorm - + &Label: &Etiket: - + Enter a label for this address to add it to your address book Tik 'n etiket vir hierdie adres om dit by jou adresboek te voeg @@ -2438,17 +2387,12 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Verwyder hierdie ontvanger - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2650,12 +2594,37 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Van @@ -2756,14 +2725,6 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Transaction Inputs - - Transaction ID - Transaksie ID - - - Transaction - Transaksie - Amount @@ -2780,7 +2741,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. onwaar - + Open for %n more block(s) Oop vir %n meer block @@ -2832,16 +2793,12 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. - + Source Bron - - Generated - Gegenereer - - + matures in %n more block(s) verval in %n meer block @@ -2858,14 +2815,6 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informasie - - - Inputs - Insette - TransactionDescDialog @@ -2880,12 +2829,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Hierdie paneel wys 'n gedetailleerde Beskrywing van die transaksie - - View Attachment - - - - + Execute Contract @@ -2894,21 +2838,11 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datum @@ -2918,7 +2852,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Tipe - + Received with Ontvang met @@ -2938,12 +2872,42 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Betalings Aan/na jouself - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n.v.t) - + Date and time that the transaction was received. Datum en tyd wat die transaksie ontvang was. @@ -2953,7 +2917,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Tipe transaksie. - + Address Adres @@ -3016,27 +2980,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Gegenereer maar nie aanvaar - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Transaction status. Hover over this field to show number of confirmations. Transaksie status. Sweef oor hierdie gebied te wys nommer van confirmations. @@ -3223,7 +3167,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. VotingChartDialog - + Poll Results @@ -3367,7 +3311,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. VotingVoteDialog - + PlaceVote @@ -3400,7 +3344,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. WalletModel - + Sending... Stuur... @@ -3408,7 +3352,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. bitcoin-core - + Options: Opsies: @@ -3418,7 +3362,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Laai adresse... - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -3433,7 +3377,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. - + Boinc Mining @@ -3443,7 +3387,7 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. - + Error obtaining next project. Error 06172014. @@ -3488,22 +3432,22 @@ Dit beteken dat 'n fooi van ten minste %2 word benodig. Laai beursie... - + Done loading Klaar gelaai - + Error Fout - + To use the %s option Die %s-opsie gebruik - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3627,6 +3571,16 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3687,6 +3641,11 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< ERROR + + + Entire balance reserved + + Expires @@ -3752,11 +3711,6 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Message Boodskap - - - Messate Type - - Miner: @@ -3798,12 +3752,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< - - No coins; - - - - + Offline; @@ -3813,12 +3762,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< - - Out of rance exception while parsing Transaction Message -> - - - - + Please wait for new user wizard to start... @@ -3908,7 +3852,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< - + List commands Lys bevele @@ -3923,7 +3867,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Gridcoin - + This help message Hierdie help boodskap @@ -3958,12 +3902,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Spesifiseer verbinding afsnytyd in millisekondes (verstek: 5000) - + Connect through socks proxy Koppel deur sokkies volmag - + Select the version of socks proxy to use (4-5, default: 5) Kies die weergawe van sokkies volmag om te gebruik (4-5, verstek: 5) @@ -3973,12 +3917,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Gebruik volmag te bereik sionele verborge dienste (verstek: dieselfde as - volmag) - + Allow DNS lookups for -addnode, -seednode and -connect Laat DNS lookups vir -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) Luister vir verbindings op <port> (verstek: 15714 of testnet: 25714) {32749 ?} {32748)?} @@ -3988,12 +3932,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Onderhou op die meeste <n> konneksies na eweknieĂ« (standaard: 125) - + Add a node to connect to and attempt to keep the connection open Voeg 'n nodus om aan te koppel en probeer die verbinding om oop te hou - + Connect only to the specified node(s) Koppel net om die gespesifiseerde nodes Koppel net om die gespesifiseerde node @@ -4004,26 +3948,22 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Koppel aan 'n nodus herwin eweknie adresse, en ontkoppel - + Specify your own public address Spesifiseer jou eie openbare adres - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Slegs verbind nodusse in netwerk <net>(IPv4, IPv6 of belegger) - + Discover own IP address (default: 1 when listening and no -externalip) Ontdek eie IP-adres (verstek: 1 wanneer luister en geen - externalip) - Find peers using internet relay chat (default: 0) - Vind eweknieĂ« gebruik internet relay chat (verstek: 0) - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Verbindings van buite aanvaar (verstek: 1 as geen - volmag of - verbind) @@ -4033,31 +3973,27 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Bind om gegewe adres. Gebruik [host]: poort notasie vir IPv6 - + Find peers using DNS lookup (default: 1) Vind eweknieĂ« met behulp van DNS opsoek (verstek: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sinchro tyd met ander nodusse. Deaktiveer as tyd op jou stelsel is presiese bv. sinkroniseer met NTP (verstek: 1) - Sync checkpoints policy (default: strict) - Sinchro kontrolepunte beleid (verstek: streng) - - - + Threshold for disconnecting misbehaving peers (default: 100) Drempel vir ontkoppel peers eweknieĂ« (verstek: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Aantal sekondes te hou hom wangedra eweknieĂ« uit herkoppel (verstek: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksimum per-verbinding ontvang buffer, <n>* 1000 grepe (verstek: 5000) @@ -4067,7 +4003,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Maksimum per-verbinding stuur buffer, <n>* 1000 grepe (verstek: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Gebruik UPnP te karteer die luistervaardigheid poort (verstek: 1 wanneer luister) @@ -4077,12 +4013,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Gebruik UPnP te karteer die luistervaardigheid poort (verstek: 0) - + Fee per KB to add to transactions you send Fooi per kg te voeg tot transaksies jy stuur - + When creating transactions, ignore inputs with value less than this (default: 0.01) Wanneer die skep van transaksies, ignoreer insette met waarde minder as dit (verstek: 0.01) @@ -4092,7 +4028,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Aanvaar bevelreĂ«l en JSON-RPC bevele - + Run in the background as a daemon and accept commands Loop in die agtergrond as 'n daemon en aanvaar bevele @@ -4102,7 +4038,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Gebruik die toets netwerk - + Output extra debugging information. Implies all other -debug* options Uitset ekstra ontfouting-inligting. Impliseer alle ander - vir foutopspoor * opsies @@ -4112,7 +4048,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Uitset ekstra netwerk ontfoutingsinligting - + Prepend debug output with timestamp Prepend vir foutopspoor uitsette met timestamp @@ -4142,7 +4078,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Wagwoord vir JSON-RPC verbindings - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Luister vir JSON-RPC verbindings op <port> (verstek: 15715 of testnet: 25715) @@ -4152,12 +4088,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Laat INTO-RPC verbindings van gespesifiseerde IP adres - + Send commands to node running on <ip> (default: 127.0.0.1) Bevele aan nodus wat op <ip>loop stuur (verstek: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) Uitvoer opdrag wanneer die beste blokkeer veranderinge (%s in cmd is vervang deur blok huts) @@ -4167,12 +4103,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Uitvoer opdrag wanneer 'n Beursie transaksie veranderinge (%s in cmd is vervang deur TxID) - + Require a confirmations for change (default: 0) Vereis 'n confirmations vir verandering (verstek: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Transaksie skripte gebruik kanonieke STOOT operateurs dwing (verstek: 1) @@ -4182,7 +4118,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Uitvoer opdrag wanneer 'n relevante ontvanklike ontvang word nie (%s in cmd is vervang deur boodskap) - + Upgrade wallet to latest format Gradeer Beursie te nuutste formaat @@ -4197,12 +4133,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Rescan die blok ketting vir vermiste Beursie transaksies - + Attempt to recover private keys from a corrupt wallet.dat Poging om private keys van 'n korrupte wallet.dat verhaal - + How many blocks to check at startup (default: 2500, 0 = all) Hoeveel blokke te kontroleer by selflaai (verstek: 2500, 0 = al) @@ -4217,12 +4153,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Voer blokke van eksterne blk000?. gerapporteer lĂȘer - + Block creation options: Blok skepping opsies: - + Set minimum block size in bytes (default: 0) Stel minimum blok grootte in grepe (verstek: 0) @@ -4232,12 +4168,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Stel maksimum blok grootte in grepe (verstek: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Stel maksimum grootte van hoĂ«-prioriteit/lae-fooi transaksies in grepe (verstek: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL opsies: (sien die Bitcoin Wiki vir SSL omstellingsinstruksies) @@ -4257,21 +4193,17 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Bediener private sleutel (verstek: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Aanvaarbare ciphers (verstek: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Ongeldige bedrag vir - paytxfee = <amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Waarskuwing: - paytxfee is baie hoog gestel! Dit is die transaksiefooi sal jy betaal as jy stuur 'n transaksie. - + Invalid amount for -mininput=<amount>: '%s' Ongeldige bedrag vir - mininput = <amount>: '%s' @@ -4281,22 +4213,22 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< - + Wallet %s resides outside data directory %s. Beursie %s gesetel buite data gids %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Kan verkry 'n slot op data gids %s. Gridcoin is waarskynlik reeds te laat loop. - + Verifying database integrity... Verifieer tans databasis integriteit... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Fout met die inisialisering van databasis omgewing %s! Om te herwin, RUGSTEUN dat gids, dan verwyder alles uit dit behalwe vir wallet.dat. @@ -4306,10 +4238,35 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Waarskuwing: wallet.dat korrup, data herwin! Oorspronklike wallet.dat gestoor as Beursie. {timestamp} .bak in %s; As jou balans of transaksies is verkeerd jy moet 'n rugsteun teruggelaai. - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4326,7 +4283,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Wallet.dat korrup, red, het misluk - + Unknown -socks proxy version requested: %i Onbekende - socks gevolmagtigde weergawe versoek: %i @@ -4336,7 +4293,7 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Onbekende netwerk gespesifiseer in - onlynet: '%s' - + Invalid -proxy address: '%s' Ongeldige - proxy adres: '%s' @@ -4346,30 +4303,25 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Ongeldige - TOR adres: '%s' - + Cannot resolve -bind address: '%s' Adres kan oplos nie-penarie bevind: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. Het misluk om te luister op enige hawe. Gebruik - luister = 0 as jy dit wil hĂȘ. - + Cannot resolve -externalip address: '%s' -ExternalIP adres kan oplos nie: '%s' - + Invalid amount for -reservebalance=<amount> Ongeldige bedrag vir -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - Kan nie aanteken kontrolepunt, verkeerde checkpointkey? - Error loading blkindex.dat @@ -4381,27 +4333,27 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Kon nie wallet.dat: Beursie korrup - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Waarskuwing: fout lees wallet.dat! Alle sleutels lees korrek, maar transaksie data of adres boek inskrywings dalk ontbreek of is foutief. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Kon nie wallet.dat: Beursie vereis nuwer weergawe van Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Beursie moes word week oorgeskryf: herlaai Gridcoin voltooi - + Error loading wallet.dat Fout laai wallet.dat - + Cannot downgrade wallet Beursie kan downgrade @@ -4411,12 +4363,12 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Verstek adres kan skryf - + Rescanning... Rescanning... - + Importing blockchain data file. Blockchain data lĂȘer invoer. @@ -4431,17 +4383,17 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Fout: kon nie begin nie - + Unable to bind to %s on this computer. Gridcoin is probably already running. Kon nie bind aan %s op hierdie rekenaar nie. Gridcoin is waarskynlik reeds te laat loop. - + Unable to bind to %s on this computer (bind returned error %d, %s) Kon nie %s op hierdie rekenaar bind (penarie bevind teruggekeer fout %d, %s) - + Error: Wallet locked, unable to create transaction Fout: Beursie gesluit, nie skep transaksie @@ -4451,51 +4403,39 @@ As die lĂȘer bestaan nie, dit skep met eienaar-leesbare-net lĂȘer toestemmings.< Fout: Beursie ontsluit vir stutting enigste, nie skep transaksie. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Fout: Hierdie transaksie vereis 'n transaksiefooi van ten minste %s as gevolg van sy bedrag, kompleksiteit, of gebruik van onlangs ontvang fondse - + Error: Transaction creation failed Fout: Transaksie skepping het misluk - + Sending... Stuur... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Ongeldige bedrag - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Waarskuwing: Maak asseblief seker dat jou rekenaar se datum en tyd is korrek! As jou horlosie is verkeerd sal Gridcoin nie behoorlik werk nie. - Warning: This version is obsolete, upgrade required! - Waarskuwing: Hierdie weergawe is verouderde, opgradering nodig! - - - WARNING: synchronized checkpoint violation detected, but skipped! - Waarskuwing: synchronized kontrolepunt skending opgespoor, maar oorgeslaan! - - - + Warning: Disk space is low! Waarskuwing: Skyfspasie laag is! - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - Waarskuwing: Ongeldige kontrolepunt gevind! Gewys word transaksies kan nie korrek wees! Jy moet dalk opgradeer, of stel ontwikkelaars. - diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts index 6c00d254e0..bebf3f307f 100644 --- a/src/qt/locale/bitcoin_ar.ts +++ b/src/qt/locale/bitcoin_ar.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Ű§Ù„ŰȘوقيŰč و Ű§Ù„Ű±ŰłŰ§ŰŠÙ„ - + &Overview &Ù†ŰžŰ±Ű© ŰčŰ§Ù…Ű© @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O Ű§Ù„ŰźŰ±ÙˆŰŹ من Ű§Ù„ŰȘŰ·ŰšÙŠÙ‚ - + &Options... &ŰźÙŠŰ§Ű±Ű§ŰȘ ... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &Ù†ŰłŰź ۭۧŰȘÙŠŰ§Ű· Ù„Ù„Ù…Ű­ÙŰžŰ© - &Change Passphrase... &ŰȘŰșÙŠÙŠŰ± ÙƒÙ„Ù…Ű© Ű§Ù„Ù…Ű±ÙˆŰ± - - Backup wallet to another location - Ű§Ű­ÙŰž Ù†ŰłŰźŰ© ۭۧŰȘÙŠŰ§Ű·ÙŠŰ© Ù„Ù„Ù…Ű­ÙŰžŰ© في Ù…ÙƒŰ§Ù† ۹۟۱ - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O &Ű§Ù„ŰȘŰ­Ù‚Ù‚ من Ű§Ù„Ű±ŰłŰ§Ù„Ű©... - + Wallet Ù…Ű­ÙŰžŰ© @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &Ű§Ű±ŰłÙ„ @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -598,7 +574,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -651,7 +627,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -698,7 +674,7 @@ Address: %4 - + %n second(s) @@ -756,7 +732,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &ملف @@ -771,17 +777,12 @@ Address: %4 - - &Advanced - - - - + &Help &Ù…ŰłŰ§ŰčŰŻŰ© - + %n second(s) ago @@ -834,12 +835,12 @@ Address: %4 Ù…Ű­ŰŻŰ« - + Catching up... Ű§Ù„Ù„Ű­Ű§Ù‚ ŰšŰ§Ù„Ű±ÙƒŰš ... - + Sent transaction Ű§Ù„Ù…ŰčŰ§Ù…Ù„Ű§ŰȘ Ű§Ù„Ù…Ű±ŰłÙ„Ű© @@ -849,7 +850,7 @@ Address: %4 Ű§Ù„Ù…ŰčŰ§Ù…Ù„Ű§ŰȘ Ű§Ù„ÙˆŰ§Ű±ŰŻŰ© - + URI handling @@ -860,17 +861,13 @@ Address: %4 URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Ű§Ù„Ù…Ű­ÙŰžŰ© <b>Ù…ŰŽÙŰ±Ű©</b> و <b>مفŰȘÙˆŰ­Ű©</b> Ű­Ű§Ù„ÙŠŰ§ - Wallet is <b>encrypted</b> and currently <b>locked</b> Ű§Ù„Ù…Ű­ÙŰžŰ© <b>Ù…ŰŽÙŰ±Ű©</b> و <b>Ù…Ù‚ÙÙ„Ű©</b> Ű­Ű§Ù„ÙŠŰ§ - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -878,7 +875,7 @@ Address: %4 ClientModel - + Network Alert @@ -960,10 +957,6 @@ Address: %4 (un)select all ŰčŰŻÙ… ۧ۟ŰȘÙŠŰ§Ű± Ű§Ù„ŰŹÙ…ÙŠŰč - - List mode - Ű”ÙŠŰșŰ© Ű§Ù„Ù‚Ű§ŰŠÙ…Ű© - Amount @@ -1329,7 +1322,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1572,10 +1565,6 @@ This label turns red, if the priority is smaller than "medium". &Network &Ű§Ù„ŰŽŰšÙƒŰ© - - Proxy &IP: - ŰšŰ±ÙˆÙƒŰłÙŠ &Ű§ÙŠ ŰšÙŠ: - &Port: @@ -1779,6 +1768,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1840,7 +1837,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1852,7 +1849,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A ŰșÙŠŰ± مŰčŰ±ÙˆÙ @@ -1877,12 +1874,12 @@ This label turns red, if the priority is smaller than "medium". ŰčŰŻŰŻ Ű§Ù„Ű§ŰȘŰ”Ű§Ù„Ű§ŰȘ - + Gridcoin - Debug Console - + Boost version @@ -2016,6 +2013,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -2037,7 +2039,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B %1 ŰšŰ§ÙŠŰȘ @@ -2072,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2339,22 +2341,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Ű§Ù„Ù‚ÙŠÙ…Ű© - + Pay &To: Ű§ŰŻÙŰč &Ű§Ù„Ù‰ : - + &Label: &ÙˆŰ”Ù : - + Alt+A Alt+A @@ -2380,12 +2382,12 @@ This label turns red, if the priority is smaller than "medium". Ű„ŰŻŰźŰ§Ù„ ŰȘŰłÙ…ÙŠŰ© Ù„Ù‡Ű°Ű§ Ű§Ù„ŰčÙ†ÙˆŰ§Ù† Ù„Ű„Ű¶Ű§ÙŰȘه Ű„Ù„Ù‰ ŰŻÙŰȘ۱ Ű§Ù„ŰčÙ†Ű§ÙˆÙŠÙ† Ű§Ù„ŰźŰ§Ű” ŰšÙƒ - + Form Ù†Ù…ÙˆŰŻŰŹ - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2400,17 +2402,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2649,12 +2646,37 @@ This label turns red, if the priority is smaller than "medium". - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + @@ -2721,11 +2743,7 @@ This label turns red, if the priority is smaller than "medium". - Information - مŰčÙ„ÙˆÙ…Ű§ŰȘ - - - + , has not been successfully broadcast yet , لم يŰȘم Ű­ŰȘى Ű§Ù„ŰąÙ† Ű§Ù„ŰšŰ« ŰšÙ†ŰŹŰ§Ű­ @@ -2748,16 +2766,12 @@ This label turns red, if the priority is smaller than "medium". - + Source Ű§Ù„Ù…Ű”ŰŻŰ± - Generated - ŰȘم Ű§Ű”ŰŻŰ§Ű±Ù‡. - - - + From من @@ -2813,14 +2827,6 @@ This label turns red, if the priority is smaller than "medium". Comment ŰȘŰčليق - - Transaction ID - Ű±Ù‚Ù… Ű§Ù„Ù…ŰčŰ§Ù…Ù„Ű© - - - Transaction - مŰčŰ§Ù…Ù„Ű© - Amount @@ -2850,12 +2856,7 @@ This label turns red, if the priority is smaller than "medium". ÙŠŰšÙŠÙ† Ù‡Ű°Ű§ Ű§Ù„ŰŹŰČŰĄ ÙˆŰ”ÙŰ§ Ù…ÙŰ”Ù„Ű§ Ù„Ù‡ŰŻÙ‡ Ű§Ù„Ù…ŰčŰ§Ù…Ù„Ű© - - View Attachment - - - - + Execute Contract @@ -2864,21 +2865,11 @@ This label turns red, if the priority is smaller than "medium". C&lose ۧ&ŰșÙ„Ű§Ù‚ - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date ŰȘŰ§Ű±ÙŠŰź @@ -2935,32 +2926,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. - + Open until %1 مفŰȘÙˆŰ­ Ű­ŰȘى %1 @@ -2980,7 +2951,7 @@ This label turns red, if the priority is smaller than "medium". ÙˆÙ„ŰŻŰȘ ولكن لم ŰȘÙ‚ŰšÙ„ - + Received with ۧ۳ŰȘÙ‚ŰšÙ„ مŰč @@ -3000,12 +2971,42 @@ This label turns red, if the priority is smaller than "medium". ŰŻÙŰč Ù„Ù†ÙŰłÙƒ - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) ŰșÙŠŰ± مŰȘÙˆÙŰ± - + Transaction status. Hover over this field to show number of confirmations. Ű­Ű§Ù„Ű© Ű§Ù„Ù…ŰčŰ§Ù…Ù„Ű©. ŰȘŰ­ÙˆÙ… Ű­ÙˆÙ„ Ù‡Ű°Ű§ Ű§Ù„Ű­Ù‚Ù„ لŰč۱۶ ŰčŰŻŰŻ Ű§Ù„ŰȘŰŁÙƒÙŠŰŻŰ§ŰȘ. @@ -3194,17 +3195,10 @@ This label turns red, if the priority is smaller than "medium". Ű§Ù„Ù‰ - - UpgradeDialog - - Hide - Ű„ŰźÙŰ§ŰĄ - - VotingChartDialog - + Poll Results @@ -3348,7 +3342,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3381,7 +3375,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3389,17 +3383,17 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ŰźÙŠŰ§Ű±Ű§ŰȘ: - + Specify data directory Ű­ŰŻŰŻ Ù…ŰŹÙ„ŰŻ Ű§Ù„Ù…ŰčÙ„ÙˆÙ…Ű§ŰȘ - + Failed to listen on any port. Use -listen=0 if you want this. ÙŰŽÙ„ في Ű§Ù„Ű§ŰłŰȘÙ…Ű§Űč Űčلى ŰŁÙŠ Ù…Ù†ÙŰ°. ۧ۳ŰȘŰźŰŻŰ§Ù… Ű§Ù„Ű§ŰłŰȘÙ…Ű§Űč = 0 ۄ۰ۧ كنŰȘ ŰȘŰ±ÙŠŰŻ Ù‡Ű°Ű§. @@ -3414,7 +3408,7 @@ This label turns red, if the priority is smaller than "medium". ŰčÙ†ÙˆŰ§Ù† Ű§Ù„ŰšŰ±ÙˆÙƒŰłÙŠ ŰșÙŠŰ± Ű”Ű­ÙŠŰ­ : '%s' - + None @@ -3504,6 +3498,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3564,6 +3568,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3629,11 +3638,6 @@ This label turns red, if the priority is smaller than "medium". Message Ű±ŰłŰ§Ù„Ű© - - - Messate Type - - Miner: @@ -3670,12 +3674,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3685,12 +3684,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3740,7 +3734,7 @@ This label turns red, if the priority is smaller than "medium". - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3755,12 +3749,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Loading wallet... ŰȘŰ­Ù…ÙŠÙ„ Ű§Ù„Ù…Ű­ÙŰžÙ‡ - + Cannot downgrade wallet Ù„Ű§ يمكن ŰȘŰźÙÙŠŰ¶ Ù‚ÙŠÙ…Ű© Ű§Ù„Ù…Ű­ÙŰžŰ© @@ -3770,22 +3764,22 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo Ù„Ű§ÙŠÙ…ÙƒÙ† كŰȘۧۚ۩ Ű§Ù„ŰčÙ†ÙˆŰ§Ù† Ű§Ù„Ű§ÙŰȘŰ±Ű§Ű¶ÙŠ - + Rescanning... Ű„Űčۧۯ۩ Ù…ŰłŰ­ - + Done loading Ű§Ù†ŰȘÙ‡Ű§ŰĄ Ű§Ù„ŰȘŰ­Ù…ÙŠÙ„ - + Error ۟۷ۣ - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3817,7 +3811,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3827,7 +3821,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3867,12 +3861,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3917,7 +3931,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3932,7 +3946,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3962,12 +3976,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3977,12 +3991,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3992,12 +4006,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -4007,22 +4021,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -4032,27 +4046,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -4062,7 +4076,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -4072,12 +4086,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -4087,7 +4101,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -4097,7 +4111,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -4107,7 +4121,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4137,7 +4151,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4147,12 +4161,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4162,12 +4176,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4177,7 +4191,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4192,12 +4206,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4212,12 +4226,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4227,12 +4241,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4252,17 +4266,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4272,22 +4286,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4297,10 +4311,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4317,7 +4336,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4327,12 +4346,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4342,7 +4361,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -reservebalance=<amount> @@ -4357,22 +4376,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4392,17 +4411,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4412,37 +4431,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_be_BY.ts b/src/qt/locale/bitcoin_be_BY.ts index ea7edf668c..2ad56315cd 100644 --- a/src/qt/locale/bitcoin_be_BY.ts +++ b/src/qt/locale/bitcoin_be_BY.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... ПаЮпісаць паĐČĐ”ĐŽĐ°ĐŒĐ»Đ”ĐœĐœĐ”... - + &Overview ĐĐłĐ»ŃĐŽ @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O ВыĐčсці Đ· ĐżŃ€Đ°ĐłŃ€Đ°ĐŒŃ‹ - + &Options... Опцыі... @@ -343,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... ЗашыфраĐČаць Đ“Đ°ĐŒĐ°ĐœĐ”Ń†... - - &Backup Wallet... - СтĐČарыць ĐșĐŸĐżŃ–ŃŽ ĐłĐ°ĐŒĐ°ĐœŃ†Đ°... - &Change Passphrase... &Change Passphrase... - - Backup wallet to another location - ЗрабіцД ĐșĐŸĐżŃ–ŃŽ ĐłĐ°ĐŒĐ°ĐœŃ†Đ° ў Ń–ĐœŃˆĐ°Đ” ĐŒĐ”ŃŃ†Đ° - Change the passphrase used for wallet encryption @@ -377,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O ПраĐČĐ”Ń€Ń‹Ń†ŃŒ паĐČĐ”ĐŽĐ°ĐŒĐ»Đ”ĐœĐœĐ”... - + Wallet Đ“Đ°ĐŒĐ°ĐœĐ”Ń† - + &Send Đ”Đ°ŃĐ»Đ°Ń†ŃŒ @@ -392,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O ĐŃ‚Ń€Ń‹ĐŒĐ°Ń†ŃŒ - + &Show / Hide &ПаĐșĐ°Đ·Đ°Ń†ŃŒ / СхаĐČаць - + &File Đ€&Đ°ĐčĐ» @@ -407,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O ĐĐ°Đ»Đ°ĐŽĐșі - + &Help Đ”Đ°ĐżĐ°ĐŒĐŸĐłĐ° - + %n second(s) ago @@ -453,12 +445,12 @@ This product includes software developed by the OpenSSL Project for use in the O ĐĄŃ–ĐœŃ…Ń€Đ°ĐœŃ–Đ·Đ°ĐČĐ°ĐœĐ° - + Catching up... ĐĐ°ĐłĐ°ĐœŃĐ”ĐŒ... - + Sent transaction Đ”Đ°ŃĐ»Đ°ĐœŃ‹Ń Ń‚Ń€Đ°ĐœĐ·Đ°Đșцыі @@ -468,16 +460,12 @@ This product includes software developed by the OpenSSL Project for use in the O ĐŸŃ€Ń‹ĐœŃŃ‚Ń‹Ń Ń‚Ń€Đ°ĐœĐ·Đ°Đșцыі - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Đ“Đ°ĐŒĐ°ĐœĐ”Ń† <b>Đ·Đ°ŃˆŃ‹Ń„Ń€Đ°ĐČĐ°ĐœŃ‹</b> і зараз <b>разблаĐșĐ°ĐČĐ°ĐœŃ‹</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Đ“Đ°ĐŒĐ°ĐœĐ”Ń† <b>Đ·Đ°ŃˆŃ‹Ń„Ń€Đ°ĐČĐ°ĐœŃ‹</b> і зараз <b>заблаĐșĐ°ĐČĐ°ĐœŃ‹</b> - + Send coins to a Gridcoin address @@ -543,7 +531,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Encrypt or decrypt wallet @@ -578,12 +566,12 @@ This product includes software developed by the OpenSSL Project for use in the O Đ­ĐșспартаĐČаць гэтыя Đ·ĐČДстĐșі у фаĐčĐ» - + Gridcoin - + &About Gridcoin @@ -593,28 +581,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -624,7 +596,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -649,14 +621,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -675,7 +647,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -728,7 +700,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -775,7 +747,7 @@ Address: %4 - + %n second(s) @@ -821,17 +793,42 @@ Address: %4 - - &Community + + Scraper: waiting on wallet to sync. - - &Advanced + + Scraper: superblock not needed - inactive. - + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Community + + + + URI handling @@ -843,7 +840,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -851,7 +848,7 @@ Address: %4 ClientModel - + Network Alert @@ -888,10 +885,6 @@ Address: %4 (un)select all (ĐœĐ”)ĐČŃ‹Đ±Ń€Đ°Ń†ŃŒ ўсё - - List mode - Đ ŃĐ¶Ń‹ĐŒ спіса - Amount @@ -1302,7 +1295,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1748,6 +1741,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1809,17 +1810,17 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + &Information Đ†ĐœŃ„Đ°Ń€ĐŒĐ°Ń†Ń‹Ń - + Gridcoin - Debug Console - + Boost version @@ -1836,7 +1837,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1985,6 +1986,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -2011,7 +2017,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2308,22 +2314,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: ĐšĐŸĐ»ŃŒĐșасць: - + Pay &To: Đ—Đ°ĐżĐ»Đ°Ń†Ń–Ń†ŃŒ ĐŽĐ°: - + &Label: ĐœĐ”Ń‚ĐșĐ°: - + Alt+A Alt+A @@ -2349,12 +2355,12 @@ This label turns red, if the priority is smaller than "medium". ĐŁĐČŃĐŽĐ·Ń–Ń†Đ” ĐżĐ°Đ·ĐœĐ°Đșу ĐłŃŃ‚Đ°ĐŒŃƒ аЮрасу, Đșаб ЮаЮаць ŃĐłĐŸ ў Đ°ĐŽŃ€Đ°ŃĐœŃƒŃŽ ĐșĐœŃ–ĐłŃƒ - + Form Đ€ĐŸŃ€ĐŒĐ° - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2369,17 +2375,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2606,12 +2607,7 @@ This label turns red, if the priority is smaller than "medium". - - Generated, PoS - - - - + unknown ĐœĐ”ĐČŃĐŽĐŸĐŒĐ° @@ -2661,17 +2657,13 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID - Amount ĐšĐŸĐ»ŃŒĐșасць - + , broadcast through %n node(s) @@ -2681,12 +2673,42 @@ This label turns red, if the priority is smaller than "medium". - + Source - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2755,10 +2777,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Đ†ĐœŃ„Đ°Ń€ĐŒĐ°Ń†Ń‹Ń - true @@ -2770,7 +2788,7 @@ This label turns red, if the priority is smaller than "medium". - + Open for %n more block(s) @@ -2802,12 +2820,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2816,21 +2829,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Đ—Đ°Ń‡Ń‹ĐœŃ–Ń†ŃŒ - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Дата @@ -2850,7 +2853,7 @@ This label turns red, if the priority is smaller than "medium". Đ—ĐłĐ”ĐœĐ”Ń€Đ°ĐČĐ°ĐœĐ°, алД ĐœĐ” ĐżŃ€Ń‹ĐœŃŃ‚Đ° - + Received with ĐŸŃ€Ń‹ĐœŃŃ‚Đ° Đ· @@ -2870,12 +2873,42 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐ»Đ°Ń†Ń‘Đ¶ ŃĐ°ĐŒĐŸĐŒŃƒ сабД - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Статус Ń‚Ń€Đ°ĐœĐ·Đ°Đșцыі. НаĐČŃĐŽĐ·Ń–Ń†Đ” Đșурсар ĐœĐ° ĐłŃŃ‚Đ°Đ” ĐżĐŸĐ»Đ”, Đșаб паĐșĐ°Đ·Đ°Ń†ŃŒ ĐșĐŸĐ»ŃŒĐșасць пацĐČĐ”Ń€ĐŽĐ¶Đ°ĐœĐœŃŃž. @@ -2895,7 +2928,7 @@ This label turns red, if the priority is smaller than "medium". ĐšĐŸĐ»ŃŒĐșасць Đ°ĐŽĐœŃŃ‚Đ°Ń ці ĐŽĐ°ĐŽĐ°ĐœĐ°Ń ĐŽĐ° Đ±Đ°Đ»Đ°ĐœŃŃƒ. - + Address АЮрас @@ -2949,27 +2982,7 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. @@ -3146,7 +3159,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3290,7 +3303,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3323,7 +3336,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3331,17 +3344,17 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Опцыі: - + Specify data directory Đ’Ń‹Đ·ĐœĐ°Ń‡Ń‹Ń†ŃŒ ĐșĐ°Ń‚Đ°Đ»ĐŸĐł ĐŽĐ°ĐœŃ‹Ń… - + Accept command line and JSON-RPC commands ĐŸŃ€Ń‹ĐŒĐ°Ń†ŃŒ ĐșĐ°ĐŒĐ°ĐœĐŽĐœŃ‹ Ń€Đ°ĐŽĐŸĐș і JSON-RPC ĐșĐ°ĐŒĐ°ĐœĐŽŃ‹ @@ -3361,7 +3374,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3371,7 +3384,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3406,12 +3419,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3451,12 +3484,12 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐ°Ń€ĐŸĐ»ŃŒ ĐŽĐ»Ń JSON-RPC Đ·Đ»ŃƒŃ‡ŃĐœĐœŃŃž - + Execute command when the best block changes (%s in cmd is replaced by block hash) ВыĐșĐ°ĐœĐ°Ń†ŃŒ ĐșĐ°ĐŒĐ°ĐœĐŽŃƒ Đșалі Đ»Đ”ĐżŃˆŃ‹ Đ±Đ»ĐŸĐș Đ·ĐŒĐ”ĐœŃ–Ń†Ń†Đ° (%s Đ·Đ°ĐŒŃĐœŃĐ”Ń†Ń†Đ° ĐœĐ° хэш Đ±Đ»ĐŸĐșĐ°) - + Loading addresses... Đ—Đ°ĐłŃ€ŃƒĐ¶Đ°Đ”ĐŒ аЮрасы... @@ -3476,37 +3509,37 @@ This label turns red, if the priority is smaller than "medium". Đ—Đ°ĐłŃ€ŃƒĐ¶Đ°Đ”ĐŒ ĐłĐ°ĐŒĐ°ĐœĐ”Ń†... - + Cannot downgrade wallet ĐĐ”ĐŒĐ°ĐłŃ‡Ń‹ĐŒĐ° рэгрэсаĐČаць ĐłĐ°ĐŒĐ°ĐœĐ”Ń† - + Rescanning... ĐŸĐ”Ń€Đ°ŃĐșĐ°ĐœĐ°ĐČĐ°ĐœĐœĐ”... - + Done loading Đ—Đ°ĐłŃ€ŃƒĐ·ĐșĐ° ĐČыĐșĐ°ĐœĐ°ĐœĐ° - + Error ĐŸĐ°ĐŒŃ‹Đ»ĐșĐ° - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -3516,37 +3549,37 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3668,6 +3701,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3728,6 +3771,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3788,11 +3836,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message ПаĐČĐ”ĐŽĐ°ĐŒĐ»Đ”ĐœĐœĐ” - - - Messate Type - - Miner: @@ -3829,12 +3872,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3844,12 +3882,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3919,7 +3952,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3934,7 +3967,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3964,12 +3997,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3979,12 +4012,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3994,12 +4027,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -4009,22 +4042,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -4034,27 +4067,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -4064,7 +4097,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -4074,22 +4107,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -4099,7 +4132,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4114,7 +4147,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4124,22 +4157,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4149,7 +4182,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4164,12 +4197,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4184,12 +4217,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4199,12 +4232,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4224,17 +4257,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4244,22 +4277,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4269,10 +4302,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4289,7 +4327,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4299,7 +4337,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4309,22 +4347,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4339,32 +4377,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat - + Cannot write default address - + Importing blockchain data file. @@ -4379,12 +4417,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts index f401979575..261febb10e 100644 --- a/src/qt/locale/bitcoin_bg.ts +++ b/src/qt/locale/bitcoin_bg.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... ĐŸĐŸĐŽĐżĐžŃĐČĐ°ĐœĐ” ĐœĐ° &ŃŃŠĐŸĐ±Ń‰Đ”ĐœĐžĐ”... - + &Overview &Đ‘Đ°Đ»Đ°ĐœŃ @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O Đ˜Đ·Ń…ĐŸĐŽ ĐŸŃ‚ ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”Ń‚ĐŸ - + &Options... &Опцоо... @@ -343,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... &ĐšĐžŃ„Ń€ĐžŃ€Đ°ĐœĐ” ĐœĐ° ĐżĐŸŃ€Ń‚Ń„Đ”Đčла... - - &Backup Wallet... - &ЗапазĐČĐ°ĐœĐ” ĐœĐ° ĐżĐŸŃ€Ń‚Ń„Đ”Đčла... - &Change Passphrase... &ĐĄĐŒŃĐœĐ° ĐœĐ° ĐżĐ°Ń€ĐŸĐ»Đ°Ń‚Đ°... - - Backup wallet to another location - ЗапазĐČĐ°ĐœĐ” ĐœĐ° ĐżĐŸŃ€Ń‚Ń„Đ”Đčла ĐœĐ° ĐŽŃ€ŃƒĐłĐŸ ĐŒŃŃŃ‚ĐŸ - Change the passphrase used for wallet encryption @@ -377,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ĐŸŃ€ĐŸĐČДрĐșĐ° ĐœĐ° ŃŃŠĐŸĐ±Ń‰Đ”ĐœĐžĐ”... - + Wallet ĐŸĐŸŃ€Ń‚Ń„Đ”ĐčĐ» - + &Send &Đ˜Đ·ĐżŃ€Đ°Ń‰Đ°ĐœĐ” @@ -392,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ĐŸĐŸĐ»ŃƒŃ‡Đ°ĐČĐ°ĐœĐ” - + &Show / Hide &ĐŸĐŸĐșĐ°Đ·ĐČĐ°ĐœĐ” / ĐĄĐșроĐČĐ°ĐœĐ” - + &File &ЀаĐčĐ» @@ -407,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž - + &Help &ĐŸĐŸĐŒĐŸŃ‰ - + %n second(s) ago @@ -449,12 +441,12 @@ This product includes software developed by the OpenSSL Project for use in the O ĐĄĐžĐœŃ…Ń€ĐŸĐœĐžĐ·ĐžŃ€Đ°Đœ - + Catching up... ЗарДжЎа Đ±Đ»ĐŸĐșĐŸĐČĐ”... - + Sent transaction Đ˜Đ·Ń…ĐŸĐŽŃŃ‰Đ° Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя @@ -464,16 +456,12 @@ This product includes software developed by the OpenSSL Project for use in the O Đ’Ń…ĐŸĐŽŃŃ‰Đ° Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - ĐŸĐŸŃ€Ń‚Ń„Đ”Đčлът Đ” <b>ĐșŃ€ĐžĐżŃ‚ĐžŃ€Đ°Đœ</b> Đž <b>ĐŸŃ‚ĐșĐ»ŃŽŃ‡Đ”Đœ</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> ĐŸĐŸŃ€Ń‚Ń„Đ”Đčлът Đ” <b>ĐșŃ€ĐžĐżŃ‚ĐžŃ€Đ°Đœ</b> Đž <b>Đ·Đ°ĐșĐ»ŃŽŃ‡Đ”Đœ</b> - + Send coins to a Gridcoin address @@ -539,7 +527,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Encrypt or decrypt wallet @@ -574,12 +562,12 @@ This product includes software developed by the OpenSSL Project for use in the O Đ—Đ°ĐżĐžŃˆĐ”Ń‚Đ” ĐŽĐ°ĐœĐœĐžŃ‚Đ” ĐŸŃ‚ Ń‚Đ”Đșущоя разЎДл ĐČъĐČ Ń„Đ°ĐčĐ» - + Gridcoin - + &About Gridcoin @@ -589,28 +577,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -620,7 +592,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -645,14 +617,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -670,7 +642,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -723,7 +695,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -770,7 +742,7 @@ Address: %4 - + %n second(s) @@ -812,17 +784,42 @@ Address: %4 - - &Community + + Scraper: waiting on wallet to sync. - - &Advanced + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Community - + URI handling СпраĐČŃĐœĐ” с URI @@ -834,7 +831,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -884,10 +881,6 @@ Address: %4 (un)select all (ĐŸŃ€Đ”)ĐŒĐ°Ń…ĐœĐž ĐČсочĐșĐž - - List mode - ĐĄĐżĐžŃŃŠŃ‡Đ”Đœ Ń€Đ”Đ¶ĐžĐŒ - Amount @@ -1293,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1391,10 +1384,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP ОтĐČĐ°Ń€ŃĐœĐ” ĐœĐ° ĐČŃ…ĐŸĐŽŃŃ‰ĐžŃ ĐżĐŸŃ€Ń‚ чрДз &UPnP - - Proxy &IP: - ĐŸŃ€ĐŸĐșсО & АĐčПо: - &Port: @@ -1743,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1804,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1816,7 +1813,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A ĐĐ”ŃŃŠŃ‰Đ”ŃŃ‚ĐČуĐČащ @@ -1866,7 +1863,12 @@ This label turns red, if the priority is smaller than "medium". &ĐšĐŸĐœĐ·ĐŸĐ»Đ° - + + &Scraper + + + + &Network Traffic &ĐœŃ€Đ”Đ¶ĐŸĐČ ĐąŃ€Đ°Ń„ĐžĐș @@ -1921,7 +1923,7 @@ This label turns red, if the priority is smaller than "medium". ВъĐČДЎeŃ‚Đ” </b>ĐżĐŸĐŒĐŸŃ‰</b> Đ·Đ° ĐŽĐ° ĐČОЎОтД ĐœĐ°Đ»ĐžŃ‡ĐœĐžŃ‚Đ” ĐșĐŸĐŒĐ°ĐœĐŽĐž. - + %1 B %1 БаĐčт @@ -1941,12 +1943,12 @@ This label turns red, if the priority is smaller than "medium". %1 ГОгабаĐčт - + Gridcoin - Debug Console - + Boost version @@ -2036,7 +2038,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2303,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: ĐĄ&ŃƒĐŒĐ°: - + Pay &To: ĐŸĐ»Đ°Ń‚Đž &На: - + &Label: &Đ˜ĐŒĐ”: - + Alt+A Alt+A @@ -2344,12 +2346,12 @@ This label turns red, if the priority is smaller than "medium". ВъĐČДЎДтД ĐžĐŒĐ” Đ·Đ° Ń‚ĐŸĐ·Đž аЎрДс, Đ·Đ° ĐŽĐ° ĐłĐŸ ĐŽĐŸĐ±Đ°ĐČОтД ĐČ ŃĐżĐžŃŃŠĐșĐ° с аЎрДсО - + Form Đ€ĐŸŃ€ĐŒŃƒĐ»ŃŃ€ - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2364,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2602,16 +2599,42 @@ This label turns red, if the priority is smaller than "medium". - + Source Đ˜Đ·Ń‚ĐŸŃ‡ĐœĐžĐș - Generated - Đ˜Đ·ĐŽĐ°ĐŽĐ”ĐœĐž + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + - + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From От @@ -2717,14 +2740,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID - - - Transaction - ĐąŃ€Đ°ĐœĐ·Đ°Đșцоя - Amount @@ -2741,7 +2756,7 @@ This label turns red, if the priority is smaller than "medium". false - + conflicted @@ -2758,13 +2773,8 @@ This label turns red, if the priority is smaller than "medium". Generated in CoinBase - - - Generated, PoS - - - + matures in %n more block(s) @@ -2776,12 +2786,8 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Đ˜ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ - - + Open for %n more block(s) @@ -2802,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2816,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose ЗатĐČĐŸŃ€Đž - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Дата @@ -2870,7 +2861,7 @@ This label turns red, if the priority is smaller than "medium". Đ“Đ”ĐœĐ”Ń€ĐžŃ€Đ°ĐœĐ°, ĐœĐŸ ĐŸŃ‚Ń…ĐČŃŠŃ€Đ»Đ”ĐœĐ° ĐŸŃ‚ ĐŒŃ€Đ”Đ¶Đ°Ń‚Đ° - + Received with ĐŸĐŸĐ»ŃƒŃ‡Đ”ĐœĐž @@ -2890,12 +2881,42 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐ»Đ°Ń‰Đ°ĐœĐ” ĐșŃŠĐŒ сДбД сО - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. ĐĄŃŠŃŃ‚ĐŸŃĐœĐžĐ” ĐœĐ° Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоята. ЗаЎръжтД ĐČърху Ń‚ĐŸĐČĐ° ĐżĐŸĐ»Đ” Đ·Đ° Đ±Ń€ĐŸĐč ĐżĐŸŃ‚ĐČŃŠŃ€Đ¶ĐŽĐ”ĐœĐžŃ. @@ -2915,7 +2936,7 @@ This label turns red, if the priority is smaller than "medium". ĐĄŃƒĐŒĐ° ОзĐČĐ°ĐŽĐ”ĐœĐ° ОлО ĐŽĐŸĐ±Đ°ĐČĐ”ĐœĐ° ĐșŃŠĐŒ Đ±Đ°Đ»Đ°ĐœŃĐ°. - + Address АЎрДс @@ -2948,27 +2969,7 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. @@ -3142,17 +3143,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - ĐĄĐșроĐč - - VotingChartDialog - + Poll Results @@ -3296,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3329,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3337,32 +3331,32 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Опцоо: - + Specify data directory ОпрДЎДлДтД ЎОрДĐșŃ‚ĐŸŃ€ĐžŃ Đ·Đ° ĐŽĐ°ĐœĐœĐžŃ‚Đ” - + Connect to a node to retrieve peer addresses, and disconnect ĐĄĐČържДтД сД ĐșŃŠĐŒ сърĐČър Đ·Đ° ĐŽĐ° ĐŒĐŸĐ¶Đ”Ń‚Đ” ĐŽĐ° ОзĐČлДчДтД аЎрДсОтД ĐœĐ° пОърОтД слДЎ ĐșĐŸĐ”Ń‚ĐŸ сД разĐșачДтД. - + Specify your own public address ВъĐČДЎДтД Ваш ĐżŃƒĐ±Đ»ĐžŃ‡Đ”Đœ аЎрДс - + Failed to listen on any port. Use -listen=0 if you want this. ĐŸŃ€ĐŸĐČĐ°Đ»Đ”ĐœĐŸ "ŃĐ»ŃƒŃˆĐ°ĐœĐ”" ĐœĐ° ĐČсДĐșĐž ĐżĐŸŃ€Ń‚. Đ˜Đ·ĐżĐŸĐ»Đ·ĐČĐ°ĐčŃ‚Đ” -listen=0 Đ°ĐșĐŸ ОсĐșĐ°Ń‚Đ” Ń‚ĐŸĐČĐ°. - + Send trace/debug info to console instead of debug.log file Đ˜Đ·ĐżŃ€Đ°Ń‚Đž Đ»ĐŸĐșалОзОращата ОлО ЎДбъг ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃŃ‚Đ° ĐșŃŠĐŒ ĐșĐŸĐœĐ·ĐŸĐ»Đ°Ń‚Đ°, ĐČĐŒĐ”ŃŃ‚ĐŸ фаĐčлът debug.log @@ -3377,7 +3371,7 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐ°Ń€ĐŸĐ»Đ° Đ·Đ° JSON-RPC ĐČръзĐșОтД - + Loading addresses... Đ—Đ°Ń€Đ”Đ¶ĐŽĐ°ĐœĐ” ĐœĐ° аЎрДсО... @@ -3387,7 +3381,7 @@ This label turns red, if the priority is smaller than "medium". ĐĐ”ĐČĐ°Đ»ĐžĐŽĐ”Đœ -proxy address: '%s' - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -3402,7 +3396,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3412,7 +3406,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3462,12 +3456,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3477,22 +3491,22 @@ This label turns red, if the priority is smaller than "medium". ĐŸŃ€Đ”Ń€Đ°Đ·ĐłĐ»Đ”Đ¶ĐŽĐ°ĐœĐ” ĐœĐ° ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČŃ‚Đ”Đ»ĐœĐŸŃŃ‚Ń‚Đ° ĐŸŃ‚ Đ±Đ»ĐŸĐșĐŸĐČĐ”... - + Done loading Đ—Đ°Ń€Đ”Đ¶ĐŽĐ°ĐœĐ”Ń‚ĐŸ Đ” Đ·Đ°ĐČŃŠŃ€ŃˆĐ”ĐœĐŸ - + Error Đ“Ń€Đ”ŃˆĐșĐ° - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3524,12 +3538,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Unable to extract Share Type. Vote likely > 6 months old @@ -3549,7 +3563,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3564,7 +3578,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3594,12 +3608,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3609,12 +3623,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3624,27 +3638,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3654,27 +3668,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3684,7 +3698,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3694,12 +3708,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3709,7 +3723,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3719,7 +3733,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3729,7 +3743,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3744,7 +3758,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3754,12 +3768,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -3769,12 +3783,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3784,7 +3798,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -3799,12 +3813,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -3819,12 +3833,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -3834,12 +3848,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -3859,17 +3873,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -3879,22 +3893,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -3904,10 +3918,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -3924,7 +3943,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -3934,12 +3953,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -tor address: '%s' - + None @@ -4029,6 +4048,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -4099,6 +4128,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -4159,11 +4193,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message ĐĄŃŠĐŸĐ±Ń‰Đ”ĐœĐžĐ” - - - Messate Type - - Miner: @@ -4200,12 +4229,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -4215,12 +4239,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4285,7 +4304,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading blkindex.dat @@ -4295,27 +4314,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4325,7 +4344,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Importing blockchain data file. @@ -4340,17 +4359,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4360,37 +4379,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_bs.ts b/src/qt/locale/bitcoin_bs.ts index 6b6fd9dd12..32106fdd05 100644 --- a/src/qt/locale/bitcoin_bs.ts +++ b/src/qt/locale/bitcoin_bs.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... - + &Overview @@ -354,7 +354,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Options... @@ -374,12 +374,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + Send coins to a Gridcoin address - + Modify configuration options for Gridcoin @@ -414,7 +414,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Gridcoin @@ -424,12 +424,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + &About Gridcoin - + &Show / Hide @@ -459,7 +459,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File @@ -469,19 +469,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Help - + [testnet] - + Gridcoin client @@ -536,7 +536,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -544,7 +544,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -569,7 +569,7 @@ Address: %4 - + %n second(s) @@ -615,7 +615,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &Send @@ -671,28 +701,12 @@ Address: %4 - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -702,7 +716,7 @@ Address: %4 - + &Diagnostics @@ -717,27 +731,22 @@ Address: %4 - + &Community - - &Advanced - - - - + Up to date - + Catching up... - + Last received block was generated %1. @@ -792,7 +801,7 @@ Address: %4 - + URI handling @@ -831,7 +840,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -839,7 +848,7 @@ Address: %4 ClientModel - + Network Alert @@ -1286,7 +1295,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1732,6 +1741,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1793,7 +1810,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + Client name @@ -1810,7 +1827,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1845,12 +1862,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -1969,6 +1986,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1995,7 +2017,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2297,7 +2319,7 @@ This label turns red, if the priority is smaller than "medium". - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2307,33 +2329,28 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - + A&mount: - - Add Attachment - - - - + Enter a label for this address to add it to your address book - + &Label: - + Pay &To: @@ -2600,12 +2617,42 @@ This label turns red, if the priority is smaller than "medium". - + Source - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2736,7 +2783,7 @@ This label turns red, if the priority is smaller than "medium". - + , has not been successfully broadcast yet @@ -2755,12 +2802,7 @@ This label turns red, if the priority is smaller than "medium". - - Generated, PoS - - - - + unknown @@ -2778,7 +2820,7 @@ This label turns red, if the priority is smaller than "medium". - + Execute Contract @@ -2787,26 +2829,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - View Attachment - - - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date @@ -2850,28 +2877,8 @@ This label turns red, if the priority is smaller than "medium". This block was not received by any other nodes<br> and will probably not be accepted! - - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - + Open for %n more block(s) @@ -2900,7 +2907,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2920,12 +2927,42 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3122,7 +3159,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3266,7 +3303,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3299,7 +3336,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3307,17 +3344,17 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Gridcoin version - + Usage: - + List commands @@ -3332,7 +3369,7 @@ This label turns red, if the priority is smaller than "medium". - + Specify wallet file (within data directory) @@ -3352,32 +3389,32 @@ This label turns red, if the priority is smaller than "medium". - + Maintain at most <n> connections to peers (default: 125) - + Connect to a node to retrieve peer addresses, and disconnect - + Specify your own public address - + Bind to given address. Use [host]:port notation for IPv6 - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3407,7 +3444,7 @@ This label turns red, if the priority is smaller than "medium". - + Error: Transaction creation failed @@ -3427,7 +3464,12 @@ This label turns red, if the priority is smaller than "medium". - + + Out of range exception while parsing Transaction Message -> + + + + Run in the background as a daemon and accept commands @@ -3447,7 +3489,7 @@ This label turns red, if the priority is smaller than "medium". - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3587,6 +3629,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3657,6 +3709,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3693,12 +3750,22 @@ This label turns red, if the priority is smaller than "medium". - + + No coins + + + + + No current polls + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3713,7 +3780,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Send command to -server or gridcoind @@ -3723,12 +3790,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Listen for connections on <port> (default: 32749 or testnet: 32748) - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -3743,7 +3810,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Boinc Mining @@ -3753,7 +3820,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error obtaining next project. Error 06172014. @@ -3837,11 +3904,6 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo Message - - - Messate Type - - Miner: @@ -3883,12 +3945,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - - No coins; - - - - + Offline; @@ -3898,18 +3955,18 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - - Out of rance exception while parsing Transaction Message -> + + Output extra debugging information. Implies all other -debug* options - Output extra debugging information. Implies all other -debug* options + Output extra network debugging information - Output extra network debugging information + POR Blocks Verified @@ -4028,12 +4085,17 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + + Waiting for coins to mature + + + + Weight - + Use UPnP to map the listening port (default: 0) @@ -4058,7 +4120,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Warning: Disk space is low! @@ -4068,12 +4130,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Password for JSON-RPC connections - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) @@ -4088,12 +4150,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4103,12 +4165,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4118,7 +4180,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Upgrade wallet to latest format @@ -4133,7 +4195,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4148,7 +4210,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Use OpenSSL (https) for JSON-RPC connections @@ -4163,7 +4225,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Initialization sanity check failed. Gridcoin is shutting down. @@ -4173,42 +4235,42 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + This help message - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Gridcoin - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Connect through socks proxy - + Allow DNS lookups for -addnode, -seednode and -connect - + Loading addresses... @@ -4228,12 +4290,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Vote - + Wallet locked; @@ -4243,7 +4305,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error loading wallet.dat @@ -4253,7 +4315,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Unknown network specified in -onlynet: '%s' @@ -4263,7 +4325,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Cannot resolve -bind address: '%s' @@ -4273,7 +4335,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Invalid amount for -paytxfee=<amount>: '%s' @@ -4283,12 +4345,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Sending... - + Invalid amount @@ -4303,7 +4365,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Add a node to connect to and attempt to keep the connection open @@ -4313,7 +4375,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Fee per KB to add to transactions you send @@ -4328,7 +4390,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Cannot downgrade wallet @@ -4338,27 +4400,27 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Rescanning... - + Done loading - + To use the %s option - + Error - + You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts index e6c58ea596..6d3dc539f4 100644 --- a/src/qt/locale/bitcoin_ca.ts +++ b/src/qt/locale/bitcoin_ca.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Signa el &missatge... - + &Overview &Panorama general @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O Surt de l'aplicaciĂł - + &Options... &Opcions... @@ -343,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... &Encripta el moneder... - - &Backup Wallet... - &Realitza una cĂČpia de seguretat del moneder... - &Change Passphrase... &Canvia la contrasenya... - - Backup wallet to another location - Realitza una cĂČpia de seguretat del moneder a una altra ubicaciĂł - Change the passphrase used for wallet encryption @@ -377,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Verifica el missatge... - + Wallet Moneder - + &Send &Envia @@ -392,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Rep - + &Show / Hide &Mostra / Amaga - + &File &Fitxer @@ -407,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ConfiguraciĂł - + &Help &Ajuda - + Processed %n block(s) of transaction history. S'ha processat %n bloc de l'historial de transacciĂł. @@ -425,12 +417,12 @@ This product includes software developed by the OpenSSL Project for use in the O Al dia - + Catching up... S'estĂ  posant al dia ... - + Sent transaction TransacciĂł enviada @@ -440,16 +432,12 @@ This product includes software developed by the OpenSSL Project for use in the O TransacciĂł entrant - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - El moneder estĂ  <b>encriptat</b> i actualment <b>desbloquejat</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> El moneder estĂ  <b>encriptat</b> i actualment <b>bloquejat</b> - + Send coins to a Gridcoin address @@ -515,7 +503,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Encrypt or decrypt wallet @@ -560,7 +548,7 @@ This product includes software developed by the OpenSSL Project for use in the O Exporta les dades de la pestanya actual a un fitxer - + %n second(s) ago @@ -592,7 +580,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -600,7 +588,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -610,12 +598,12 @@ Address: %4 - + Gridcoin - + &About Gridcoin @@ -625,28 +613,12 @@ Address: %4 - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -656,7 +628,7 @@ Address: %4 - + &Diagnostics @@ -671,14 +643,14 @@ Address: %4 - + [testnet] [testnet] - + Gridcoin client @@ -688,7 +660,7 @@ Address: %4 - + Last received block was generated %1. @@ -733,7 +705,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -792,7 +764,7 @@ Address: %4 - + %n second(s) @@ -824,17 +796,42 @@ Address: %4 - - &Community + + Scraper: waiting on wallet to sync. - - &Advanced + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. - + + &Community + + + + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -884,10 +881,6 @@ Address: %4 (un)select all (des)selecciona-ho tot - - List mode - Mode llista - Amount @@ -1293,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1391,10 +1384,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Port obert amb &UPnP - - Proxy &IP: - &IP del proxy: - &Port: @@ -1743,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1804,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1816,7 +1813,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1896,7 +1893,12 @@ This label turns red, if the priority is smaller than "medium". Fora: - + + &Scraper + + + + Debug log file Fitxer de registre de depuraciĂł @@ -1926,7 +1928,7 @@ This label turns red, if the priority is smaller than "medium". Escriviu <b>help<\b> per a obtenir un llistat de les ordres disponibles. - + %1 B %1 B @@ -1961,12 +1963,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2036,7 +2038,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2303,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Q&uantitat: - + Pay &To: Paga &a: - + &Label: &Etiqueta: - + Alt+A Alta+A @@ -2344,12 +2346,12 @@ This label turns red, if the priority is smaller than "medium". IntroduĂŻu una etiqueta per a aquesta adreça per afegir-la a la llibreta d'adreces - + Form Formulari - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2364,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2602,16 +2599,42 @@ This label turns red, if the priority is smaller than "medium". - + Source Font - Generated - Generada + + MINED - POS + - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De @@ -2717,18 +2740,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID de la transacciĂł - - - Transaction - TransacciĂł - - - Inputs - Entrades - Amount @@ -2745,7 +2756,7 @@ This label turns red, if the priority is smaller than "medium". fals - + conflicted @@ -2762,13 +2773,8 @@ This label turns red, if the priority is smaller than "medium". Generated in CoinBase - - - Generated, PoS - - - + matures in %n more block(s) @@ -2780,12 +2786,8 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂł - - + Open for %n more block(s) @@ -2806,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2820,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Tanca - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2874,7 +2861,7 @@ This label turns red, if the priority is smaller than "medium". Generat perĂČ no acceptat - + Received with Rebuda amb @@ -2894,12 +2881,42 @@ This label turns red, if the priority is smaller than "medium". Pagament a un mateix - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Estat de la transacciĂł. Desplaceu-vos sobre aquest camp per mostrar el nombre de confirmacions. @@ -2919,7 +2936,7 @@ This label turns red, if the priority is smaller than "medium". Import extret o afegit del balanç. - + Address Adreça @@ -2952,27 +2969,7 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. @@ -3146,17 +3143,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - Amaga - - VotingChartDialog - + Poll Results @@ -3300,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3333,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3341,37 +3331,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opcions: - + Specify data directory Especifica el directori de dades - + Connect to a node to retrieve peer addresses, and disconnect Connecta al node per obtenir les adreces de les connexions, i desconnecta - + Specify your own public address Especifiqueu la vostra adreça pĂșblica - + Accept command line and JSON-RPC commands Accepta la lĂ­nia d'ordres i ordres JSON-RPC - + Run in the background as a daemon and accept commands Executa en segon pla com a programa dimoni i accepta ordres - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executa una ordre quan una transacciĂł del moneder canviĂŻ (%s en cmd es canvia per TxID) @@ -3381,12 +3371,12 @@ This label turns red, if the priority is smaller than "medium". Opcions de la creaciĂł de blocs: - + Failed to listen on any port. Use -listen=0 if you want this. Ha fallat escoltar a qualsevol port. Feu servir -listen=0 si voleu fer aixĂČ. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3416,7 +3406,7 @@ This label turns red, if the priority is smaller than "medium". Contrasenya per a connexions JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Executa l'ordre quan el millor bloc canviĂŻ (%s en cmd es reemplaça per un resum de bloc) @@ -3426,7 +3416,7 @@ This label turns red, if the priority is smaller than "medium". Permet consultes DNS per a -addnode, -seednode i -connect - + Loading addresses... S'estan carregant les adreces... @@ -3436,12 +3426,12 @@ This label turns red, if the priority is smaller than "medium". Adreça -proxy invalida: '%s' - + Unknown network specified in -onlynet: '%s' Xarxa desconeguda especificada a -onlynet: '%s' - + Insufficient funds Balanç insuficient @@ -3451,17 +3441,17 @@ This label turns red, if the priority is smaller than "medium". S'estĂ  carregant l'Ă­ndex de blocs... - + Add a node to connect to and attempt to keep the connection open Afegeix un node per a connectar-s'hi i intenta mantenir-hi la connexiĂł oberta - + Loading wallet... S'estĂ  carregant el moneder... - + Cannot downgrade wallet No es pot reduir la versiĂł del moneder @@ -3471,22 +3461,22 @@ This label turns red, if the priority is smaller than "medium". No es pot escriure l'adreça per defecte - + Rescanning... S'estĂ  reescanejant... - + Done loading Ha acabat la cĂ rrega - + Error Error - + This help message @@ -3511,12 +3501,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3526,7 +3516,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3536,22 +3526,22 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3561,22 +3551,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3671,6 +3661,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3731,6 +3731,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3796,11 +3801,6 @@ This label turns red, if the priority is smaller than "medium". Message Missatge - - - Messate Type - - Miner: @@ -3837,12 +3837,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3852,12 +3847,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3937,22 +3927,22 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3962,7 +3952,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3972,7 +3962,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3982,7 +3972,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3992,7 +3982,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4002,7 +3992,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -4017,7 +4007,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -4037,7 +4027,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -4047,7 +4037,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4097,12 +4087,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4117,12 +4127,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4142,17 +4152,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4162,22 +4172,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4187,10 +4197,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4207,17 +4222,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4227,7 +4242,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4242,22 +4257,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4277,17 +4292,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4297,47 +4312,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4369,12 +4384,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Ús: @@ -4384,7 +4399,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands diff --git a/src/qt/locale/bitcoin_ca@valencia.ts b/src/qt/locale/bitcoin_ca@valencia.ts index 2cfe023150..6028b30289 100644 --- a/src/qt/locale/bitcoin_ca@valencia.ts +++ b/src/qt/locale/bitcoin_ca@valencia.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Signa el &missatge... - + &Overview &Panorama general @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O Ix de l'aplicaciĂł - + &Options... &Opcions... @@ -343,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... &Encripta el moneder... - - &Backup Wallet... - &Realitza una cĂČpia de seguretat del moneder... - &Change Passphrase... &Canvia la contrasenya... - - Backup wallet to another location - Realitza una cĂČpia de seguretat del moneder a una altra ubicaciĂł - Change the passphrase used for wallet encryption @@ -377,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Verifica el missatge... - + Wallet Moneder - + &Send &Envia @@ -392,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Rep - + &Show / Hide &Mostra / Amaga - + &File &Fitxer @@ -407,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ConfiguraciĂł - + &Help &Ajuda - + %n second(s) ago @@ -449,12 +441,12 @@ This product includes software developed by the OpenSSL Project for use in the O Al dia - + Catching up... S'estĂ  posant al dia ... - + Sent transaction TransacciĂł enviada @@ -464,16 +456,12 @@ This product includes software developed by the OpenSSL Project for use in the O TransacciĂł entrant - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - El moneder estĂ  <b>encriptat</b> i actualment <b>desbloquejat</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> El moneder estĂ  <b>encriptat</b> i actualment <b>bloquejat</b> - + Send coins to a Gridcoin address @@ -539,7 +527,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Encrypt or decrypt wallet @@ -574,12 +562,12 @@ This product includes software developed by the OpenSSL Project for use in the O Exporta les dades de la pestanya actual a un fitxer - + Gridcoin - + &About Gridcoin @@ -589,28 +577,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -620,7 +592,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -645,14 +617,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -670,7 +642,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -723,7 +695,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -770,7 +742,7 @@ Address: %4 - + %n second(s) @@ -812,17 +784,42 @@ Address: %4 - - &Community + + Scraper: waiting on wallet to sync. - - &Advanced + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. - + + &Community + + + + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -834,7 +831,7 @@ Address: %4 GestiĂł d'URI - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -884,10 +881,6 @@ Address: %4 (un)select all (des)selecciona-ho tot - - List mode - Mode llista - Amount @@ -1293,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1391,10 +1384,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Port obert amb &UPnP - - Proxy &IP: - &IP del proxy: - &Port: @@ -1743,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1804,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1816,7 +1813,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1896,7 +1893,12 @@ This label turns red, if the priority is smaller than "medium". Fora: - + + &Scraper + + + + Debug log file Fitxer de registre de depuraciĂł @@ -1926,7 +1928,7 @@ This label turns red, if the priority is smaller than "medium". Escriviu <b>help<\b> per a obtindre un llistat de les ordes disponibles. - + %1 B %1 B @@ -1961,12 +1963,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2036,7 +2038,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2303,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Q&uantitat: - + Pay &To: Paga &a: - + &Label: &Etiqueta: - + Alt+A Alt+A @@ -2344,12 +2346,12 @@ This label turns red, if the priority is smaller than "medium". IntroduĂŻu una etiqueta per a esta adreça per afegir-la a la llibreta d'adreces - + Form Formulari - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2364,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2602,16 +2599,42 @@ This label turns red, if the priority is smaller than "medium". - + Source Font - Generated - Generat + + MINED - POS + - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Des de @@ -2717,18 +2740,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID de transacciĂł - - - Transaction - TransacciĂł - - - Inputs - Entrades - Amount @@ -2745,7 +2756,7 @@ This label turns red, if the priority is smaller than "medium". fals - + conflicted @@ -2762,13 +2773,8 @@ This label turns red, if the priority is smaller than "medium". Generated in CoinBase - - - Generated, PoS - - - + matures in %n more block(s) @@ -2780,12 +2786,8 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂł - - + Open for %n more block(s) @@ -2806,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2820,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Tanca - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2874,7 +2861,7 @@ This label turns red, if the priority is smaller than "medium". Generat perĂČ no acceptat - + Received with Rebut amb @@ -2894,12 +2881,42 @@ This label turns red, if the priority is smaller than "medium". Pagament a un mateix - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Estat de la transacciĂł. Desplaceu-vos sobre este camp per mostrar el nombre de confirmacions. @@ -2919,7 +2936,7 @@ This label turns red, if the priority is smaller than "medium". Import extret o afegit del balanç. - + Address Adreça @@ -2952,27 +2969,7 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. @@ -3146,17 +3143,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - Amaga - - VotingChartDialog - + Poll Results @@ -3300,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3333,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3341,37 +3331,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opcions: - + Specify data directory Especifica el directori de dades - + Connect to a node to retrieve peer addresses, and disconnect Connecta al node per obtindre les adreces de les connexions, i desconnecta - + Specify your own public address Especifiqueu la vostra adreça pĂșblica - + Accept command line and JSON-RPC commands Accepta la lĂ­nia d'ordes i ordes JSON-RPC - + Run in the background as a daemon and accept commands Executa en segon pla com a programa dimoni i accepta ordes - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executa una orde quan una transacciĂł del moneder canvie (%s en cmd es canvia per TxID) @@ -3381,12 +3371,12 @@ This label turns red, if the priority is smaller than "medium". Opcions de la creaciĂł de blocs: - + Failed to listen on any port. Use -listen=0 if you want this. Ha fallat escoltar a qualsevol port. Feu servir -listen=0 si voleu fer aixĂČ. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3416,7 +3406,7 @@ This label turns red, if the priority is smaller than "medium". Contrasenya per a connexions JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Executa l'orde quan el millor bloc canvie (%s en cmd es reemplaça per un resum de bloc) @@ -3426,7 +3416,7 @@ This label turns red, if the priority is smaller than "medium". Permet consultes DNS per a -addnode, -seednode i -connect - + Loading addresses... S'estan carregant les adreces... @@ -3436,12 +3426,12 @@ This label turns red, if the priority is smaller than "medium". Adreça -proxy invalida: '%s' - + Unknown network specified in -onlynet: '%s' Xarxa desconeguda especificada a -onlynet: '%s' - + Insufficient funds Balanç insuficient @@ -3451,17 +3441,17 @@ This label turns red, if the priority is smaller than "medium". S'estĂ  carregant l'Ă­ndex de blocs... - + Add a node to connect to and attempt to keep the connection open Afig un node per a connectar-s'hi i intenta mantindre-hi la connexiĂł oberta - + Loading wallet... S'estĂ  carregant el moneder... - + Cannot downgrade wallet No es pot reduir la versiĂł del moneder @@ -3471,22 +3461,22 @@ This label turns red, if the priority is smaller than "medium". No es pot escriure l'adreça per defecte - + Rescanning... S'estĂ  reescanejant... - + Done loading Ha acabat la cĂ rrega - + Error Error - + This help message @@ -3511,12 +3501,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3526,7 +3516,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3536,22 +3526,22 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3561,22 +3551,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3671,6 +3661,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3731,6 +3731,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3796,11 +3801,6 @@ This label turns red, if the priority is smaller than "medium". Message Missatge - - - Messate Type - - Miner: @@ -3837,12 +3837,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3852,12 +3847,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3937,22 +3927,22 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3962,7 +3952,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3972,7 +3962,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3982,7 +3972,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3992,7 +3982,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4002,7 +3992,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -4017,7 +4007,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -4037,7 +4027,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -4047,7 +4037,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4097,12 +4087,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4117,12 +4127,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4142,17 +4152,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4162,22 +4172,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4187,10 +4197,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4207,17 +4222,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4227,7 +4242,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4242,22 +4257,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4277,17 +4292,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4297,47 +4312,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4369,12 +4384,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Ús: @@ -4384,7 +4399,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts index bfa9a29aee..cdfe66e61c 100644 --- a/src/qt/locale/bitcoin_ca_ES.ts +++ b/src/qt/locale/bitcoin_ca_ES.ts @@ -23,15 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - \n Aquest Ă©s software experimental.\n\n DistribuĂŻt sota llicĂšncia de software MIT/11, veure l'arxiu COPYING o http://www.opensource.org/licenses/mit-license.php.\n\nAquest producte inclou software desarrollat pel projecte OpenSSL per a l'Ășs de OppenSSL Toolkit (http://www.openssl.org/) i de software criptogrĂ fic escrit per l'Eric Young (eay@cryptsoft.com) i software UPnP escrit per en Thomas Bernard. - AddressBookPage @@ -308,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Signa el &missatge... - + &Overview &Panorama general @@ -343,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O Surt de l'aplicaciĂł - + &Options... &Opcions... @@ -352,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... &Encripta el moneder... - - &Backup Wallet... - &Realitza una cĂČpia de seguretat del moneder... - &Change Passphrase... &Canvia la contrasenya... - - Backup wallet to another location - Realitza una cĂČpia de seguretat del moneder a una altra ubicaciĂł - Change the passphrase used for wallet encryption @@ -386,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Verifica el missatge... - + Wallet Moneder - + &Send &Envia @@ -401,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Rep - + &Show / Hide &Mostra / Amaga - + &File &Fitxer @@ -416,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ConfiguraciĂł - + &Help &Ajuda - + Processed %n block(s) of transaction history. S'ha processat %n bloc de l'historial de transacciĂł. @@ -434,12 +417,12 @@ This product includes software developed by the OpenSSL Project for use in the O Al dia - + Catching up... S'estĂ  posant al dia ... - + Sent transaction TransacciĂł enviada @@ -449,16 +432,12 @@ This product includes software developed by the OpenSSL Project for use in the O TransacciĂł entrant - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - El moneder estĂ  <b>encriptat</b> i actualment <b>desbloquejat</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> El moneder estĂ  <b>encriptat</b> i actualment <b>bloquejat</b> - + Send coins to a Gridcoin address Enviar monedes a una adreça Gridcoin @@ -524,7 +503,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Encrypt or decrypt wallet Xifrar o desxifrar moneder @@ -569,7 +548,7 @@ This product includes software developed by the OpenSSL Project for use in the O Exportar les dades de la pestanya actual a un arxiu - + %n second(s) ago fa %n segon @@ -601,7 +580,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -612,7 +591,7 @@ Address: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -622,43 +601,57 @@ Address: %4 - - Gridcoin - Gridcoin + + Scraper: waiting on wallet to sync. + - - &About Gridcoin - &Sobre Gridcoin + + Scraper: superblock not needed - inactive. + - - Show information about Gridcoin - Mostra informaciĂł sobre Gridcoin + + Scraper: downloading and processing stats. + - - &Neural Network + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - - Neural Network + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - &New User Wizard + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + Gridcoin + Gridcoin + + + + &About Gridcoin + &Sobre Gridcoin + - + Show information about Gridcoin + Mostra informaciĂł sobre Gridcoin + + + New User Wizard - + &Voting @@ -668,7 +661,7 @@ Address: %4 - + &Diagnostics @@ -683,14 +676,14 @@ Address: %4 Modificar les opcions de configuraciĂł per a Gridcoin - + [testnet] [testnet] - + Gridcoin client Client Gridcoin @@ -700,23 +693,7 @@ Address: %4 %1 conexiĂł activa a la xarxa Gridcoin - %1 second(s) ago - fa %1 segon - - - %1 minute(s) ago - fa %1 minut - - - %1 hour(s) ago - fa %1 hora - - - %1 day(s) ago - fa %1 dia - - - + Last received block was generated %1. El darrer bloc rebut s'ha generat %1. @@ -761,15 +738,7 @@ Address: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1\nQuantitat %2\n Tipus: %3\n Adreça: %4\n - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. l'URI no es pot analitzar! AixĂČ pot ser causat per una adreça Gridcoin no vĂ lida o parĂ metres URI malformats. @@ -828,7 +797,7 @@ Address: %4 - + %n second(s) @@ -860,37 +829,12 @@ Address: %4 - Not staking because wallet is locked - No s'estĂ  fent "stake" perquĂš el moneder esa bloquejat - - - Not staking because wallet is offline - No s'estĂ  fent "stake" perquĂš el moneder estĂ  fora de lĂ­nia - - - Not staking because wallet is syncing - No s'estĂ  fent "stake" perquĂš el moneder estĂ  sincronitzant - - - Not staking because you don't have mature coins - No s'estĂ  fent "stake" perquĂš no tens monedes madures - - - Not staking - No s'estĂ  fent "stake" - - - + &Community - - &Advanced - - - - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. S'ha produĂŻt un error fatal. Gridcoin ja no pot continuar de forma segura i es tancarĂ . @@ -898,7 +842,7 @@ Address: %4 ClientModel - + Network Alert Alerta de xarxa @@ -940,10 +884,6 @@ Address: %4 (un)select all (des)selecciona-ho tot - - List mode - Mode llista - Amount @@ -1363,7 +1303,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. NewPollDialog - + Create Poll @@ -1461,10 +1401,6 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Map port using &UPnP Port obert amb &UPnP - - Proxy &IP: - &IP del proxy: - &Port: @@ -1813,6 +1749,14 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Fora de sincronia + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1874,7 +1818,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. RPCConsole - + @@ -1886,7 +1830,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. - + N/A N/A @@ -1966,7 +1910,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Fora: - + + &Scraper + + + + Debug log file Fitxer de registre de depuraciĂł @@ -1996,7 +1945,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Escriviu <b>help<\b> per a obtenir un llistat de les ordres disponibles. - + %1 B %1 B @@ -2031,12 +1980,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. - + Gridcoin - Debug Console - + Boost version @@ -2106,7 +2055,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Nom del client - + Welcome to the Gridcoin RPC console! @@ -2373,22 +2322,22 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. SendCoinsEntry - + A&mount: Q&uantitat: - + Pay &To: Paga &a: - + &Label: &Etiqueta: - + Alt+A Alta+A @@ -2414,12 +2363,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. IntroduĂŻu una etiqueta per a aquesta adreça per afegir-la a la llibreta d'adreces - + Form Formulari - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2434,17 +2383,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Eliminar aquest destinatari - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2672,16 +2616,42 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. - + Source Font - Generated - Generada + + MINED - POS + + + + + MINED - POR + - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De @@ -2787,18 +2757,6 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Transaction Inputs - - Transaction ID - ID de la transacciĂł - - - Transaction - TransacciĂł - - - Inputs - Entrades - Amount @@ -2815,7 +2773,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. fals - + conflicted conflicte @@ -2832,13 +2790,8 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Generated in CoinBase - - - Generated, PoS - - - + matures in %n more block(s) madura en %n bloc mĂ©s @@ -2850,12 +2803,8 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - &InformaciĂł - - + Open for %n more block(s) Obert per a %n bloc mĂ©s @@ -2876,12 +2825,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Detall de la transacciĂł - - View Attachment - - - - + Execute Contract @@ -2890,21 +2834,11 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. C&lose &Tanca - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2944,7 +2878,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Generat perĂČ no acceptat - + Received with Rebuda amb @@ -2964,12 +2898,42 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Pagament a un mateix - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Estat de la transacciĂł. Desplaceu-vos sobre aquest camp per mostrar el nombre de confirmacions. @@ -2989,7 +2953,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Import extret o afegit del balanç. - + Address DirecciĂł @@ -3022,27 +2986,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Adreça del destinatari de la transacciĂł. @@ -3216,17 +3160,10 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. No s'ha pogut escriure al fitxer %1. - - UpgradeDialog - - Hide - Amaga - - VotingChartDialog - + Poll Results @@ -3370,7 +3307,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. VotingVoteDialog - + PlaceVote @@ -3403,7 +3340,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. WalletModel - + Sending... Enviant... @@ -3411,37 +3348,37 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. bitcoin-core - + Options: Opcions: - + Specify data directory Especifica el directori de dades - + Connect to a node to retrieve peer addresses, and disconnect Connecta al node per obtenir les adreces de les connexions, i desconnecta - + Specify your own public address Especifiqueu la vostra adreça pĂșblica - + Accept command line and JSON-RPC commands Accepta la lĂ­nia d'ordres i ordres JSON-RPC - + Run in the background as a daemon and accept commands Executa en segon pla com a programa dimoni i accepta ordres - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executa una ordre quan una transacciĂł del moneder canviĂŻ (%s en cmd es canvia per TxID) @@ -3451,12 +3388,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Opcions de la creaciĂł de blocs: - + Failed to listen on any port. Use -listen=0 if you want this. Ha fallat escoltar a qualsevol port. Feu servir -listen=0 si voleu fer aixĂČ. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3486,7 +3423,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Contrasenya per a connexions JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Executa l'ordre quan el millor bloc canviĂŻ (%s en cmd es reemplaça per un resum de bloc) @@ -3496,7 +3433,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Permet consultes DNS per a -addnode, -seednode i -connect - + Loading addresses... S'estan carregant les adreces... @@ -3506,12 +3443,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Adreça -proxy invalida: '%s' - + Unknown network specified in -onlynet: '%s' Xarxa desconeguda especificada a -onlynet: '%s' - + Insufficient funds Balanç insuficient @@ -3521,17 +3458,17 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. S'estĂ  carregant l'Ă­ndex de blocs... - + Add a node to connect to and attempt to keep the connection open Afegeix un node per a connectar-s'hi i intenta mantenir-hi la connexiĂł oberta - + Loading wallet... S'estĂ  carregant el moneder... - + Cannot downgrade wallet No es pot reduir la versiĂł del moneder @@ -3541,22 +3478,22 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. No es pot escriure l'adreça per defecte - + Rescanning... S'estĂ  reescanejant... - + Done loading Ha acabat la cĂ rrega - + Error Error - + This help message Aquest misatge d'ajuda @@ -3581,12 +3518,12 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Especificar el temps limit per a un intent de connexiĂł en milisegons (per defecte: 5000) - + Connect through socks proxy Conectar a travĂ©s d'un proxy SOCKS - + Select the version of socks proxy to use (4-5, default: 5) Seleccioneu la versiĂł de proxy socks per utilitzar (4-5, per defecte: 5) @@ -3596,7 +3533,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Utilitza proxy per arribar als serveis ocults de Tor (per defecte: la mateixa que -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Escoltar connexions en <port> (per defecte: 15714 o testnet: 25714) {32749 ?} {32748)?} @@ -3606,26 +3543,22 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Mantenir com a molt <n> connexions a peers (per defecte: 125) - + Connect only to the specified node(s) Connectar nomĂ©s al(s) node(s) especificats - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) NomĂ©s connectar als nodes de la xarxa <net> (IPv4, IPv6 o Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descobrir la prĂČpia adreça IP (per defecte: 1 quan escoltant i no -externalip) - Find peers using internet relay chat (default: 0) - Trobar companys utilitzant l'IRC (per defecte: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Aceptar connexions d'afora (per defecte: 1 si no -proxy o -connect) @@ -3635,26 +3568,22 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Enllaçar a l'adreça donada. Utilitzeu la notaciĂł [host]:port per a IPv6 - + Find peers using DNS lookup (default: 1) Trobar companys utilitzant la recerca de DNS (per defecte: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sincronitzar el temps amb altres nodes. Desactivar si el temps al seu sistema Ă©s precĂ­s, per exemple, si fa Ășs de sincronitzaciĂł amb NTP (per defecte: 1) - Sync checkpoints policy (default: strict) - PolĂ­tica dels punts de control de sincronitzaciĂł (per defecte: estricta) - - - + Threshold for disconnecting misbehaving peers (default: 100) LĂ­mit per a desconectar connexions errĂČnies (per defecte: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Nombre de segons abans de reconectar amb connexions errĂČnies (per defecte: 86400) @@ -3749,6 +3678,16 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3809,6 +3748,11 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. ERROR + + + Entire balance reserved + + Expires @@ -3874,11 +3818,6 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Message Missatge - - - Messate Type - - Miner: @@ -3915,12 +3854,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. - - No coins; - - - - + Offline; @@ -3930,12 +3864,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4015,22 +3944,22 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Utilitza UPnP per a mapejar els ports d'escolta (per defecte: 0) - + Fee per KB to add to transactions you send ComisiĂł per KB per a afegir a les transaccions que enviĂŻ - + When creating transactions, ignore inputs with value less than this (default: 0.01) En crear transaccions, ignorar les entrades amb valor inferior a aquesta (per defecte: 0.01) - + Use the test network Usar la xarxa de prova - + Output extra debugging information. Implies all other -debug* options Sortida d'informaciĂł de depuraciĂł extra. Implica totes les opcions de depuracĂł -debug* @@ -4040,7 +3969,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Sortida d'informaciĂł de depuraciĂł de xarxa addicional - + Prepend debug output with timestamp Anteposar marca de temps a la sortida de depuraciĂł @@ -4050,7 +3979,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Enviar informaciĂł de traça/depuraciĂł al depurador - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Escoltar connexions JSON-RPC al port <port> (per defecte: 15715 o testnet: 25715) @@ -4060,7 +3989,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Permetre connexions JSON-RPC d'adreces IP especĂ­fiques - + Send commands to node running on <ip> (default: 127.0.0.1) Enviar ordre al node en execuciĂł a <ip> (per defecte: 127.0.0.1) @@ -4070,7 +3999,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Requerir les confirmacions de canvi (per defecte: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Fer complir als scripts de transaccions d'utilitzar operadors PUSH canĂČniques (per defecte: 1) @@ -4081,7 +4010,7 @@ En aquest cas es requereix una comisiĂł d'almenys 2%. Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per missatge) - + Upgrade wallet to latest format Actualitzar moneder a l'Ășltim format @@ -4096,7 +4025,7 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per Re-escanejar cadena de blocs en cerca de transaccions de moneder perdudes - + Attempt to recover private keys from a corrupt wallet.dat Intentar recuperar les claus privades d'un arxiu wallet.dat corrupte @@ -4116,7 +4045,7 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per - + Boinc Mining @@ -4126,7 +4055,7 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per - + Error obtaining next project. Error 06172014. @@ -4176,12 +4105,32 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4196,12 +4145,12 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per Establir una mida mĂĄxima de bloc en bytes (per defecte: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Establir la grandĂ ria mĂ xima de les transaccions alta-prioritat/baixa-comisiĂł en bytes (per defecte: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Opcions SSL: (veure la Wiki de Bitcoin per a instruccions de configuraciĂł SSL) @@ -4221,21 +4170,17 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per Clau privada del servidor (per defecte: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Xifres acceptables (per defecte: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Quantitat invalida per a -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. AdvertĂšncia: el -paytxfee Ă©s molt elevat! Aquesta Ă©s la comissiĂł de transacciĂł que pagarĂ s quan enviis una transacciĂł. - + Invalid amount for -mininput=<amount>: '%s' Quantitat invalida per a -mininput=<amount>: '%s' @@ -4245,22 +4190,22 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per - + Wallet %s resides outside data directory %s. El moneder %s resideix fora del directori de dades %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. No es pot obtenir un bloqueig en el directori de dades %s. Gridcoin probablement ja estigui en funcionament. - + Verifying database integrity... Comprovant la integritat de la base de dades ... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Error en inicialitzar l'entorn de base de dades %s! Per recuperar, FACI UNA COPIA DE SEGURETAT D'AQUEST DIRECTORI, a continuaciĂł, retiri tot d'ella excepte l'arxiu wallet.dat. @@ -4270,10 +4215,15 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per AdvertĂšncia: L'arxiu wallet.dat Ă©s corrupte, dades rescatades! L'arxiu wallet.dat original ha estat desat com wallet.{estampa_temporal}.bak al directori %s; si el teu balanç o transaccions son incorrectes hauries de restaurar-lo de un backup. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4290,17 +4240,17 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per L'arxiu wallet.data Ă©s corrupte, el rescat de les dades ha fallat - + Unknown -socks proxy version requested: %i S'ha demanat una versiĂł desconeguda de -socks proxy: %i - + Invalid -tor address: '%s' Adreça -tor invalida: '%s' - + Cannot resolve -bind address: '%s' No es pot resoldre l'adreça -bind: '%s' @@ -4310,16 +4260,10 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per No es pot resoldre l'adreça -externalip: '%s' - + Invalid amount for -reservebalance=<amount> Quantitat invalida per a -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - No es pot signar el punt de control, la clau del punt de control esta malament? - - Error loading blkindex.dat @@ -4331,22 +4275,22 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per Error carregant wallet.dat: Moneder corrupte - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. AdvertĂšncia: Error llegint l'arxiu wallet.dat!! Totes les claus es llegeixen correctament, perĂČ hi ha dades de transaccions o entrades del llibre d'adreces absents o bĂ© son incorrectes. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Error en carregar wallet.dat: El moneder requereix la versiĂł mĂ©s recent de Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete El moneder necessita ser reescrita: reiniciar Gridcoin per completar - + Error loading wallet.dat Error carregant wallet.dat @@ -4366,17 +4310,17 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per Error: no s'ha pogut iniciar el node - + Unable to bind to %s on this computer. Gridcoin is probably already running. No es pot enllaçar a %s en aquest equip. Gridcoin probablement ja estigui en funcionament. - + Unable to bind to %s on this computer (bind returned error %d, %s) Impossible d'unir %s a aquest ordinador (s'ha retornat l'error %d, %s) - + Error: Wallet locked, unable to create transaction Error: Moneder bloquejat, no es pot de crear la transacciĂł @@ -4386,59 +4330,47 @@ Executar una ordre quan es rep un avĂ­s rellevant (%s en cmd es substitueix per Error: Cartera bloquejada nomĂšs per a fer "stake", no es pot de crear la transacciĂł - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Error: Aquesta transacciĂł requereix una comisiĂł d'almenys %s degut a la seva quantitat, complexitat, o l'Ășs dels fons rebuts recentment - + Error: Transaction creation failed Error: La creaciĂł de transacciĂł ha fallat. - + Sending... Enviant... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Error: La transacciĂł ha sigut rebutjada. AixĂČ pot passar si algunes de les monedes al moneder ja s'han gastat, per exemple, si vostĂš utilitza una cĂČpia del wallet.dat i les monedes han estat gastades a la cĂłpia pero no s'han marcat com a gastades aqui. - + Invalid amount Quanitat invalida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. AvĂ­s: Comproveu que la data i hora de l'equip siguin correctes! Si el seu rellotge Ă©s erroni Gridcoin no funcionarĂ  correctament. - Warning: This version is obsolete, upgrade required! - AdvertĂšncia: Aquetsa versiĂł estĂ  obsoleta, Ă©s necessari actualitzar! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ADVERTÈNCIA: violaciĂł de punt de control sincronitzat detectada, es saltarĂ ! - - - + Warning: Disk space is low! AvĂ­s: L'espai en disc Ă©s baix! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ADVERTÈNCIA: Punt de control invĂ lid! Les transaccions mostrades podrĂ­en no ser correctes! Podria ser necessari actualitzar o notificar-ho als desenvolupadors. - - - + To use the %s option Utilitza la opciĂł %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4470,12 +4402,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Has de configurar el rpcpassword=<password> a l'arxiu de configuraciĂł:\n %s\n Si l'arxiu no existeix, crea'l amb els permĂ­s owner-readable-only. - + Gridcoin version versiĂł Gridcoin - + Usage: Ús: @@ -4485,7 +4417,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands Llista d'ordres diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts index 5b83cfaa75..9da4473f21 100644 --- a/src/qt/locale/bitcoin_cs.ts +++ b/src/qt/locale/bitcoin_cs.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Tohle je experimentĂĄlnĂ­ program. - -Ć Ă­?en pod licencĂ­ MIT/X11, viz p?iloĆŸenĂœ soubor COPYING nebo http://www.opensource.org/licenses/mit-license.php. - -Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v OpenSSL Toolkitu (http://www.openssl.org/) a kryptografickĂœ program od Erika Younga (eay@cryptsoft.com) a program UPnP od Thomase Bernarda. - AddressBookPage @@ -313,12 +299,12 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open BitcoinGUI - + Sign &message... Po&depiĆĄ zprĂĄvu... - + &Overview &Pƙehled @@ -348,7 +334,7 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open Ukonči aplikaci - + &Options... &MoĆŸnosti... @@ -357,19 +343,11 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open &Encrypt Wallet... ZaĆĄi&fruj penÄ›ĆŸenku... - - &Backup Wallet... - &ZazĂĄlohuj penÄ›ĆŸenku... - &Change Passphrase... Změƈ &heslo... - - Backup wallet to another location - ZazĂĄlohuj penÄ›ĆŸenku na jinĂ© mĂ­sto - Change the passphrase used for wallet encryption @@ -391,12 +369,12 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open &Ověƙ zprĂĄvu... - + Wallet PenÄ›ĆŸenka - + &Send P&oĆĄli @@ -406,12 +384,12 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open Pƙi&jmi - + &Show / Hide &Zobraz/Skryj - + &File &Soubor @@ -421,12 +399,12 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open &NastavenĂ­ - + &Help NĂĄpověd&a - + Processed %n block(s) of transaction history. ZpracovĂĄn %n blok transakčnĂ­ historie. @@ -440,12 +418,12 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open AktuĂĄlnĂ­ - + Catching up... Stahuji... - + Sent transaction OdeslanĂ© transakce @@ -455,16 +433,12 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open PƙíchozĂ­ transakce - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - PenÄ›ĆŸenka je <b>zaĆĄifrovanĂĄ</b> a momentĂĄlně <b>odemčenĂĄ</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> PenÄ›ĆŸenka je <b>zaĆĄifrovanĂĄ</b> a momentĂĄlně <b>zamčenĂĄ</b> - + Send coins to a Gridcoin address @@ -530,7 +504,7 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open - + Encrypt or decrypt wallet @@ -575,7 +549,7 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open Exportuj data z tohoto panelu do souboru - + %n second(s) ago @@ -611,7 +585,7 @@ Tento produkt zahrnuje programy vyvinutĂ© OpenSSL Projektem pro pouĆŸitĂ­ v Open - + Date: %1 Amount: %2 Type: %3 @@ -626,7 +600,7 @@ Adresa: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -636,43 +610,57 @@ Adresa: %4 - - Gridcoin + + Scraper: waiting on wallet to sync. - - &About Gridcoin + + Scraper: superblock not needed - inactive. - - Show information about Gridcoin + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &Neural Network + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - Neural Network + + Scraper: No convergence able to be achieved. Will retry in a few minutes. - - &New User Wizard + + Gridcoin + + + + + &About Gridcoin - + Show information about Gridcoin + + + + New User Wizard - + &Voting @@ -682,7 +670,7 @@ Adresa: %4 - + &Diagnostics @@ -697,14 +685,14 @@ Adresa: %4 - + [testnet] [testnet] - + Gridcoin client @@ -714,7 +702,7 @@ Adresa: %4 - + Last received block was generated %1. @@ -759,19 +747,7 @@ Adresa: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -?ĂĄstka: %2 -Typ: %3 -Adresa: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -830,7 +806,7 @@ Adresa: %4 - + %n second(s) %n vteƙinu @@ -866,17 +842,12 @@ Adresa: %4 - + &Community - - &Advanced - - - - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -884,7 +855,7 @@ Adresa: %4 ClientModel - + Network Alert Upozorn?nĂ­ sĂ­t? @@ -926,10 +897,6 @@ Adresa: %4 (un)select all (od)označit vĆĄechny - - List mode - Vypsat jako seznam - Amount @@ -1335,7 +1302,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1433,10 +1400,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Namapovat port pƙes &UPnP - - Proxy &IP: - &IP adresa proxy: - &Port: @@ -1785,6 +1748,14 @@ This label turns red, if the priority is smaller than "medium". nesynchronizovĂĄno + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1846,7 +1817,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1858,7 +1829,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A nedostupnĂĄ informace @@ -1938,7 +1909,12 @@ This label turns red, if the priority is smaller than "medium". Ven: - + + &Scraper + + + + Debug log file Soubor s ladicĂ­mi zĂĄznamy @@ -1958,7 +1934,7 @@ This label turns red, if the priority is smaller than "medium". NapsĂĄnĂ­m <b>help</b> si vypĂ­ĆĄeĆĄ pƙehled dostupnĂœch pƙíkazĆŻ. - + %1 B %1 B @@ -1978,7 +1954,7 @@ This label turns red, if the priority is smaller than "medium". %1 GB - + Welcome to the Gridcoin RPC console! @@ -1993,7 +1969,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 m %1 m @@ -2008,12 +1984,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2345,22 +2321,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Čás&tka: - + Pay &To: &Komu: - + &Label: O&značenĂ­: - + Alt+A Alt+A @@ -2386,12 +2362,12 @@ This label turns red, if the priority is smaller than "medium". Zadej označenĂ­ tĂ©to adresy; obojĂ­ se ti pak uloĆŸĂ­ do adresáƙe - + Form FormulĂĄ? - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2406,17 +2382,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2662,26 +2633,17 @@ This label turns red, if the priority is smaller than "medium". - + Source Zdroj - Generated - VygenerovĂĄno - - - + Generated in CoinBase - - Generated, PoS - - - - + From Od @@ -2796,18 +2758,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID transakce - - - Transaction - Transakce - - - Inputs - Vstupy - Amount @@ -2824,18 +2774,44 @@ This label turns red, if the priority is smaller than "medium". false - + conflicted - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + MINED - POS - Information - Informace + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + @@ -2851,12 +2827,7 @@ This label turns red, if the priority is smaller than "medium". Detaily transakce - - View Attachment - - - - + Execute Contract @@ -2865,21 +2836,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Zavƙít - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datum @@ -2928,7 +2889,7 @@ This label turns red, if the priority is smaller than "medium". VygenerovĂĄno, ale neakceptovĂĄno - + Received with Pƙijato do @@ -2948,12 +2909,42 @@ This label turns red, if the priority is smaller than "medium". Platba sama sobě - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Stav transakce. NajetĂ­m myĆĄi na toto políčko si zobrazĂ­ĆĄ počet potvrzenĂ­. @@ -2973,7 +2964,7 @@ This label turns red, if the priority is smaller than "medium". Částka odečtenĂĄ z nebo pƙičtenĂĄ k Ășčtu. - + Address Adresa @@ -2998,27 +2989,7 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. CĂ­lovĂĄ adresa transakce. @@ -3192,17 +3163,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - Skryj - - VotingChartDialog - + Poll Results @@ -3346,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3379,7 +3343,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3387,37 +3351,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: MoĆŸnosti: - + Specify data directory Adresáƙ pro data - + Connect to a node to retrieve peer addresses, and disconnect Pƙipojit se k uzlu, zĂ­skat adresy jeho protějĆĄkĆŻ a odpojit se - + Specify your own public address Udej svou veƙejnou adresu - + Accept command line and JSON-RPC commands Akceptovat pƙíkazy z pƙíkazovĂ© ƙádky a pƙes JSON-RPC - + Run in the background as a daemon and accept commands BÄ›ĆŸet na pozadĂ­ jako dĂ©mon a pƙijĂ­mat pƙíkazy - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Spustit pƙíkaz, kdyĆŸ se objevĂ­ transakce tĂœkajĂ­cĂ­ se penÄ›ĆŸenky (%s se v pƙíkazu nahradĂ­ za TxID) @@ -3427,12 +3391,12 @@ This label turns red, if the priority is smaller than "medium". MoĆŸnosti vytváƙenĂ­ bloku: - + Failed to listen on any port. Use -listen=0 if you want this. Nepodaƙilo se naslouchat na ĆŸĂĄdnĂ©m portu. PouĆŸij -listen=0, pokud to byl tvĆŻj zĂĄměr. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3462,7 +3426,7 @@ This label turns red, if the priority is smaller than "medium". Heslo pro JSON-RPC spojenĂ­ - + Execute command when the best block changes (%s in cmd is replaced by block hash) Spustit pƙíkaz, kdyĆŸ se změnĂ­ nejlepĆĄĂ­ blok (%s se v pƙíkazu nahradĂ­ hashem bloku) @@ -3472,7 +3436,7 @@ This label turns red, if the priority is smaller than "medium". Povolit DNS dotazy pro -addnode (pƙidĂĄnĂ­ uzlu), -seednode a -connect (pƙipojenĂ­) - + Loading addresses... NačítĂĄm adresy... @@ -3482,12 +3446,12 @@ This label turns red, if the priority is smaller than "medium". NeplatnĂĄ -proxy adresa: '%s' - + Unknown network specified in -onlynet: '%s' V -onlynet byla uvedena neznĂĄmĂĄ sĂ­Ć„: '%s' - + Insufficient funds Nedostatek prostƙedkĆŻ @@ -3497,17 +3461,17 @@ This label turns red, if the priority is smaller than "medium". NačítĂĄm index blokĆŻ... - + Add a node to connect to and attempt to keep the connection open Pƙidat uzel, ke kterĂ©mu se pƙipojit a snaĆŸit se spojenĂ­ udrĆŸet - + Loading wallet... NačítĂĄm penÄ›ĆŸenku... - + Cannot downgrade wallet Nemohu pƙevĂ©st penÄ›ĆŸenku do starĆĄĂ­ho formĂĄtu @@ -3517,22 +3481,22 @@ This label turns red, if the priority is smaller than "medium". Nemohu napsat vĂœchozĂ­ adresu - + Rescanning... PƙeskenovĂĄvĂĄm
 - + Done loading NačítĂĄnĂ­ dokončeno - + Error Chyba - + This help message Tato nĂĄpov?da @@ -3557,12 +3521,12 @@ This label turns red, if the priority is smaller than "medium". Zadej ?asovĂœ limit spojenĂ­ v milisekundĂĄch (vĂœchozĂ­: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3572,7 +3536,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) Naslouchej pƙipojenĂ­m na <port> (vĂœchozĂ­: 15714 nebo testovacĂ­ sĂ­Ć„: 25714) {32749 ?} {32748)?} @@ -3582,22 +3546,22 @@ This label turns red, if the priority is smaller than "medium". Povolit nejvĂœĆĄe <n> p?ipojenĂ­ k uzl?m (vĂœchozĂ­: 125) - + Connect only to the specified node(s) P?ipojit se pouze k zadanĂ©mu uzlu (p?Ă­p. zadanĂœm uzl?m) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) P?ipojit se pouze k uzl?m v <net> sĂ­ti (IPv4, IPv6 nebo Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Zjistit vlastnĂ­ IP adresu (vĂœchozĂ­: 1, pokud naslouchĂĄ a nenĂ­ zadĂĄno -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) P?ijĂ­mat spojenĂ­ zven?Ă­ (vĂœchozĂ­: 1, pokud nenĂ­ zadĂĄno -proxy nebo -connect) @@ -3607,22 +3571,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) PrĂĄh pro odpojovĂĄnĂ­ zlobivĂœch uzl? (vĂœchozĂ­: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Doba ve vte?inĂĄch, po kterou se nebudou moci zlobivĂ© uzly znovu p?ipojit (vĂœchozĂ­: 86400) @@ -3717,6 +3681,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3777,6 +3751,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3842,11 +3821,6 @@ This label turns red, if the priority is smaller than "medium". Message ZprĂĄva - - - Messate Type - - Miner: @@ -3883,12 +3857,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3898,12 +3867,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3983,22 +3947,22 @@ This label turns red, if the priority is smaller than "medium". PouĆŸĂ­t UPnP k namapovĂĄnĂ­ naslouchacĂ­ho portu (vĂœchozĂ­: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network PouĆŸĂ­t testovacĂ­ sĂ­? (testnet) - + Output extra debugging information. Implies all other -debug* options @@ -4008,7 +3972,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -4018,7 +3982,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4028,7 +3992,7 @@ This label turns red, if the priority is smaller than "medium". Povolit JSON-RPC spojenĂ­ ze specifikovanĂ© IP adresy - + Send commands to node running on <ip> (default: 127.0.0.1) PosĂ­lat p?Ă­kazy uzlu b?ĆŸĂ­cĂ­m na <ip> (vĂœchozĂ­: 127.0.0.1) @@ -4038,7 +4002,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4048,7 +4012,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format P?evĂ©st pen?ĆŸenku na nejnov?jĆĄĂ­ formĂĄt @@ -4063,7 +4027,7 @@ This label turns red, if the priority is smaller than "medium". P?eskenovat ?et?zec blok? na chyb?jĂ­cĂ­ transakce tvĂ© p?n?ĆŸenky - + Attempt to recover private keys from a corrupt wallet.dat Pokusit se zachrĂĄnit soukromĂ© klĂ­?e z poĆĄkozenĂ©ho souboru wallet.dat @@ -4083,7 +4047,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -4093,7 +4057,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4143,12 +4107,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4163,12 +4147,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) MoĆŸnosti SSL: (viz instrukce nastavenĂ­ SSL v Bitcoin Wiki) @@ -4188,17 +4172,17 @@ This label turns red, if the priority is smaller than "medium". Soubor se serverovĂœm soukromĂœm klĂ­?em (vĂœchozĂ­: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' NeplatnĂĄ ?ĂĄstka pro -paytxfee=<?ĂĄstka>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Upozorn?nĂ­: -paytxfee je nastaveno velmi vysoko! Toto je transak?nĂ­ poplatek, kterĂœ zaplatĂ­ĆĄ za kaĆŸdou poslanou transakci. - + Invalid amount for -mininput=<amount>: '%s' @@ -4208,22 +4192,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4233,10 +4217,15 @@ This label turns red, if the priority is smaller than "medium". Upozorn?nĂ­: soubor wallet.dat je poĆĄkozenĂœ, data jsou vĆĄak zachrĂĄn?na! P?vodnĂ­ soubor wallet.dat je uloĆŸenĂœ jako wallet.{timestamp}.bak v %s. Pokud je stav tvĂ©ho Ăș?tu nebo transakce nesprĂĄvnĂ©, z?ejm? bys m?l obnovit zĂĄlohu. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4253,17 +4242,17 @@ This label turns red, if the priority is smaller than "medium". Soubor wallet.dat je poĆĄkozen, jeho zĂĄchrana se nezda?ila - + Unknown -socks proxy version requested: %i V -socks byla poĆŸadovĂĄna neznĂĄmĂĄ verze proxy: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Nemohu p?eloĆŸit -bind adresu: '%s' @@ -4273,7 +4262,7 @@ This label turns red, if the priority is smaller than "medium". Nemohu p?eloĆŸit -externalip adresu: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4288,22 +4277,22 @@ This label turns red, if the priority is smaller than "medium". Chyba p?i na?Ă­tĂĄnĂ­ wallet.dat: pen?ĆŸenka je poĆĄkozenĂĄ - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Upozorn?nĂ­: nastala chyba p?i ?tenĂ­ souboru wallet.dat! VĆĄechny klĂ­?e se p?e?etly sprĂĄvn?, ale data o transakcĂ­ch nebo zĂĄznamy v adresĂĄ?i mohou chyb?t ?i bĂœt nesprĂĄvnĂ©. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Chyba p?i na?Ă­tĂĄnĂ­ wallet.dat @@ -4323,17 +4312,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Neda?Ă­ se mi p?ipojit na %s na tomhle po?Ă­ta?i (operace bind vrĂĄtila chybu %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4343,51 +4332,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount NeplatnĂĄ ?ĂĄstka - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Upozorn?nĂ­: tahle verze je zastaralĂĄ, m?l bys ji aktualizovat! - - - + Warning: Disk space is low! - + To use the %s option K pouĆŸitĂ­ volby %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4421,12 +4406,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Pokud konfigura?nĂ­ soubor jeĆĄt? neexistuje, vytvo? ho tak, aby ho mohl ?Ă­st pouze vlastnĂ­k. - + Gridcoin version - + Usage: UĆŸitĂ­: @@ -4436,7 +4421,7 @@ Pokud konfigura?nĂ­ soubor jeĆĄt? neexistuje, vytvo? ho tak, aby ho mohl ?Ă­st p - + List commands VĂœpis p?Ă­kaz? diff --git a/src/qt/locale/bitcoin_cy.ts b/src/qt/locale/bitcoin_cy.ts index 0d3d662ea4..650df7c904 100644 --- a/src/qt/locale/bitcoin_cy.ts +++ b/src/qt/locale/bitcoin_cy.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Overview &Trosolwg @@ -329,7 +329,7 @@ This product includes software developed by the OpenSSL Project for use in the O Gadael rhaglen - + &Options... &Opsiynau @@ -349,12 +349,12 @@ This product includes software developed by the OpenSSL Project for use in the O Newid y cyfrinymadrodd a ddefnyddiwyd ar gyfer amgryptio'r waled - + Wallet Waled - + &Send &Anfon @@ -364,7 +364,7 @@ This product includes software developed by the OpenSSL Project for use in the O &Derbyn - + &Show / Hide &Dangos / Cuddio @@ -379,7 +379,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File &Ffeil @@ -389,22 +389,22 @@ This product includes software developed by the OpenSSL Project for use in the O &Gosodiadau - + &Help &Cymorth - + Up to date Cyfamserol - + Catching up... Dal i fyny - + Sent transaction Trafodiad a anfonwyd @@ -414,16 +414,12 @@ This product includes software developed by the OpenSSL Project for use in the O Trafodiad sy'n cyrraedd - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Mae'r waled <b>wedi'i amgryptio</b> ac <b>heb ei gloi</b> ar hyn o bryd - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Mae'r waled <b>wedi'i amgryptio</b> ac <b>ar glo</b> ar hyn o bryd - + Send coins to a Gridcoin address @@ -499,28 +495,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -530,7 +510,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -600,24 +580,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -638,7 +613,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -691,7 +666,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -701,13 +676,13 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -751,7 +726,7 @@ Address: %4 - + URI handling @@ -804,7 +779,7 @@ Address: %4 - + %n second(s) @@ -848,12 +823,42 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + Gridcoin - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -861,7 +866,7 @@ Address: %4 ClientModel - + Network Alert @@ -1308,7 +1313,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1754,6 +1759,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1815,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + &Information Gwybodaeth @@ -1825,12 +1838,12 @@ This label turns red, if the priority is smaller than "medium". &Agor - + Gridcoin - Debug Console - + Boost version @@ -1847,7 +1860,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1991,6 +2004,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -2017,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2314,17 +2332,17 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Maint - + &Label: &Label: - + Alt+A Alt+A @@ -2344,12 +2362,12 @@ This label turns red, if the priority is smaller than "medium". Neges: - + Form Ffurflen - + Enter a label for this address to add it to your address book @@ -2375,17 +2393,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2640,22 +2653,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2777,10 +2815,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Gwybodaeth - Amount @@ -2810,12 +2844,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2824,21 +2853,11 @@ This label turns red, if the priority is smaller than "medium". C&lose C&au - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Dyddiad @@ -2914,7 +2933,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2934,32 +2953,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3156,7 +3185,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3300,7 +3329,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3333,7 +3362,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3341,7 +3370,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opsiynau: @@ -3351,12 +3380,12 @@ This label turns red, if the priority is smaller than "medium". Gwall - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3403,7 +3432,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3413,7 +3442,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3453,12 +3482,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3518,7 +3567,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3533,7 +3582,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3568,12 +3617,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3583,12 +3632,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3598,7 +3647,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open @@ -3693,6 +3742,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3763,6 +3822,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3818,11 +3882,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message Neges - - - Messate Type - - Miner: @@ -3859,12 +3918,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3874,12 +3928,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3914,17 +3963,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3934,27 +3983,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3964,7 +4013,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3974,12 +4023,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3989,7 +4038,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3999,7 +4048,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -4009,7 +4058,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4039,7 +4088,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4049,12 +4098,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4064,12 +4113,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4079,7 +4128,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4094,12 +4143,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4114,12 +4163,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4129,12 +4178,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4154,17 +4203,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4174,22 +4223,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4199,7 +4248,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4209,7 +4258,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4219,7 +4268,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4229,22 +4278,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4269,20 +4318,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4294,12 +4348,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4309,12 +4363,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4334,22 +4388,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4359,27 +4413,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4389,12 +4443,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 1f23f5d548..32b56b7e74 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Dette program er eksperimentelt. - -Det er gjort tilgĂŠngeligt under MIT/X11-softwarelicensen. Se den medfĂžlgende fil "COPYING" eller http://www.opensource.org/licenses/mit-license.php. - -Produktet indeholder software, som er udviklet af OpenSSL Project til brug i OpenSSL Toolkit (http://www.openssl.org/). Kryptografisk software er skrevet af Eric Young (eay@cryptsoft.com), og UPnP-software er skrevet af Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope BitcoinGUI - + Sign &message... SignĂ©r &besked
 - + &Overview &Oversigt @@ -348,7 +334,7 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope Afslut program - + &Options... &Indstillinger
 @@ -357,19 +343,11 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope &Encrypt Wallet... &KryptĂ©r tegnebog
 - - &Backup Wallet... - &SikkerhedskopiĂ©r tegnebog
 - &Change Passphrase... &Skift adgangskode
 - - Backup wallet to another location - Lav sikkerhedskopi af tegnebogen til et andet sted - Change the passphrase used for wallet encryption @@ -391,12 +369,12 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope &VerificĂ©r besked
 - + Wallet Tegnebog - + &Send &Send @@ -406,12 +384,12 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope &Modtag - + &Show / Hide &Vis / skjul - + &File &Fil @@ -421,12 +399,12 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope &OpsĂŠtning - + &Help &HjĂŠlp - + Processed %n block(s) of transaction history. Bearbejdede %n blok med transaktionshistorik. @@ -439,12 +417,12 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope Opdateret - + Catching up... Indhenter
 - + Sent transaction Afsendt transaktion @@ -454,16 +432,12 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope IndgĂ„ende transaktion - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Tegnebog er <b>krypteret</b> og i Ăžjeblikket <b>ulĂ„st</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Tegnebog er <b>krypteret</b> og i Ăžjeblikket <b>lĂ„st</b> - + Send coins to a Gridcoin address Send mĂžnter til en Gridcoin adresse @@ -529,7 +503,7 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope - + Encrypt or decrypt wallet Kryptere eller dekryptere tegnebog @@ -574,7 +548,7 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope Eksportere data i den aktuelle fane til en fil - + %n second(s) ago %n sekund siden @@ -606,7 +580,7 @@ Produktet indeholder software, som er udviklet af OpenSSL Project til brug i Ope - + Date: %1 Amount: %2 Type: %3 @@ -621,7 +595,7 @@ Adresse: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -631,43 +605,57 @@ Adresse: %4 - - Gridcoin - Gridcoin + + Scraper: waiting on wallet to sync. + - - &About Gridcoin - &Om Gridcoin + + Scraper: superblock not needed - inactive. + - - Show information about Gridcoin - Vis oplysninger om Gridcoin + + Scraper: downloading and processing stats. + - - &Neural Network + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - - Neural Network + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - &New User Wizard + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + Gridcoin + Gridcoin + + + + &About Gridcoin + &Om Gridcoin + - + Show information about Gridcoin + Vis oplysninger om Gridcoin + + + New User Wizard - + &Voting @@ -677,7 +665,7 @@ Adresse: %4 - + &Diagnostics @@ -692,14 +680,14 @@ Adresse: %4 Ændre indstillingsmuligheder for Gridcoin - + [testnet] [testnetvĂŠrk] - + Gridcoin client Gridcoin klient @@ -709,23 +697,7 @@ Adresse: %4 %1 aktiv forbindelse til Gridcoin netvĂŠrk - %1 second(s) ago - %1 sekund siden - - - %1 minute(s) ago - %1 minut siden - - - %1 hour(s) ago - %1 time siden - - - %1 day(s) ago - %1 dag siden - - - + Last received block was generated %1. Sidst modtagne blok blev genereret %1. @@ -770,19 +742,7 @@ Adresse: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Dato: %1 -BelĂžb: %2 -Type: %3 -Adresse: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI kan ikke tolkes! Dette kan skyldes en ugyldig Gridcoin adresse eller misdannede URI parametre. @@ -841,7 +801,7 @@ Adresse: %4 - + %n second(s) %n sekund @@ -873,37 +833,12 @@ Adresse: %4 - Not staking because wallet is locked - Ingen rente fordi tegnebog er lĂ„st - - - Not staking because wallet is offline - Ingen rente fordi tegnebog er offline - - - Not staking because wallet is syncing - Ingen rente fordi tegnebog er ved at synkronisere - - - Not staking because you don't have mature coins - Ingen rente fordi der ingen modne mĂžnter eksistere - - - Not staking - Ingen rente - - - + &Community - - &Advanced - - - - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Der opstod en fejl under forsĂžg pĂ„ at gemme dataene i tegnebogen til den nye placering. @@ -911,7 +846,7 @@ Adresse: %4 ClientModel - + Network Alert NetvĂŠrksadvarsel @@ -953,10 +888,6 @@ Adresse: %4 (un)select all (af)vĂŠlg alle - - List mode - Listetilstand - Amount @@ -1376,7 +1307,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. NewPollDialog - + Create Poll @@ -1474,10 +1405,6 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Map port using &UPnP KonfigurĂ©r port vha. &UPnP - - Proxy &IP: - Proxy-&IP: - &Port: @@ -1826,6 +1753,14 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. ikke synkroniseret + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1887,7 +1822,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. RPCConsole - + @@ -1899,7 +1834,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + N/A N/A @@ -1979,7 +1914,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. UdgĂ„ende: - + + &Scraper + + + + Debug log file FejlsĂžgningslogfil @@ -1999,7 +1939,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Tast <b>help</b> for en oversigt over de tilgĂŠngelige kommandoer. - + %1 B %1 B @@ -2019,7 +1959,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. %1 GB - + Welcome to the Gridcoin RPC console! @@ -2034,7 +1974,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + %1 m %1 m @@ -2049,12 +1989,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + Gridcoin - Debug Console - + Boost version @@ -2386,22 +2326,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. SendCoinsEntry - + A&mount: &BelĂžb: - + Pay &To: Betal &til: - + &Label: &MĂŠrkat: - + Alt+A Alt+A @@ -2427,12 +2367,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Indtast en mĂŠrkat for denne adresse for at fĂžje den til din adressebog - + Form Form - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2447,17 +2387,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Fjern denne modtager - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2701,26 +2636,17 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + Source Kilde - Generated - Genereret - - - + Generated in CoinBase - - Generated, PoS - - - - + From Fra @@ -2834,18 +2760,6 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Transaction Inputs - - Transaction ID - Transaktions-ID - - - Transaction - Transaktion - - - Inputs - Input - Amount @@ -2862,18 +2776,44 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. falsk - + conflicted konflikt - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE - Information - Information + + MINED - UNKNOWN + + + + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + @@ -2889,12 +2829,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Transaktionsdetaljer - - View Attachment - - - - + Execute Contract @@ -2903,21 +2838,11 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. C&lose &Luk - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Dato @@ -2965,7 +2890,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Genereret, men ikke accepteret - + Received with Modtaget med @@ -2985,12 +2910,42 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Betaling til dig selv - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Transaktionsstatus. Hold musen over dette felt for at vise antallet af bekrĂŠftelser. @@ -3010,7 +2965,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. BelĂžb trukket fra eller tilfĂžjet balance. - + Address Adresse @@ -3035,27 +2990,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Destinationsadresse for transaktion. @@ -3229,17 +3164,10 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Kunne ikke skrive til filen% 1. - - UpgradeDialog - - Hide - Skjul - - VotingChartDialog - + Poll Results @@ -3383,7 +3311,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. VotingVoteDialog - + PlaceVote @@ -3416,7 +3344,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. WalletModel - + Sending... Sender... @@ -3424,37 +3352,37 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. bitcoin-core - + Options: Indstillinger: - + Specify data directory Angiv datamappe - + Connect to a node to retrieve peer addresses, and disconnect Forbind til en knude for at modtage adresser pĂ„ andre knuder, og afbryd derefter - + Specify your own public address Angiv din egen offentlige adresse - + Accept command line and JSON-RPC commands AcceptĂ©r kommandolinje- og JSON-RPC-kommandoer - + Run in the background as a daemon and accept commands KĂžr i baggrunden som en service, og acceptĂ©r kommandoer - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) UdfĂžr kommando, nĂ„r en transaktion i tegnebogen ĂŠndres (%s i kommandoen erstattes med TxID) @@ -3464,12 +3392,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Blokoprettelsestilvalg: - + Failed to listen on any port. Use -listen=0 if you want this. Lytning pĂ„ enhver port mislykkedes. Brug -listen=0, hvis du Ăžnsker dette. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3499,7 +3427,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Adgangskode til JSON-RPC-forbindelser - + Execute command when the best block changes (%s in cmd is replaced by block hash) UdfĂžr kommando, nĂ„r den bedste blok ĂŠndres (%s i kommandoen erstattes med blokhash) @@ -3509,7 +3437,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Tillad DNS-opslag for -addnode, -seednode og -connect - + Loading addresses... IndlĂŠser adresser
 @@ -3519,12 +3447,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Ugyldig -proxy adresse: “%s” - + Unknown network specified in -onlynet: '%s' Ukendt netvĂŠrk anfĂžrt i -onlynet: “%s” - + Insufficient funds Manglende dĂŠkning @@ -3534,17 +3462,17 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. IndlĂŠser blokindeks
 - + Add a node to connect to and attempt to keep the connection open TilfĂžj en knude til at forbinde til og forsĂžg at holde forbindelsen Ă„ben - + Loading wallet... IndlĂŠser tegnebog
 - + Cannot downgrade wallet Kan ikke nedgradere tegnebog @@ -3554,22 +3482,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Kan ikke skrive standardadresse - + Rescanning... GenindlĂŠser
 - + Done loading IndlĂŠsning gennemfĂžrt - + Error Fejl - + This help message Denne hjĂŠlpebesked @@ -3594,12 +3522,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Angiv tilslutningstimeout i millisekunder (standard: 5000) - + Connect through socks proxy Tilslut gennem socks proxy - + Select the version of socks proxy to use (4-5, default: 5) VĂŠlg den version af socks proxy du vil bruge (4-5, standard: 5) @@ -3609,7 +3537,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Brug proxy til at nĂ„ tor skjulte services (Standard: samme som-proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Lyt efter forbindelser pĂ„ <port> (default: 15714 eller Testnet: 25714) {32749 ?} {32748)?} @@ -3619,26 +3547,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Oprethold hĂžjest <n> forbindelser til andre i netvĂŠrket (standard: 125) - + Connect only to the specified node(s) Tilslut kun til de(n) angivne knude(r) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Tilslut kun til knuder i netvĂŠrk <net> (IPv4, IPv6 eller Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Find egen IP-adresse (standard: 1 nĂ„r lytter og ingen -externalip) - Find peers using internet relay chat (default: 0) - Find peers der bruger internet relay chat (default: 1) {? 0)} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Accepter forbindelser udefra (standard: 1 hvis hverken -proxy eller -connect) @@ -3648,26 +3572,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Binder til en given adresse. Brug [host]: port notation for IPv6 - + Find peers using DNS lookup (default: 1) Find peer bruges DNS-opslag (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synkroniser tid med andre noder. Deaktiver, hvis tiden pĂ„ dit system er prĂŠcis eksempelvis synkroniseret med NTP (default: 1) - Sync checkpoints policy (default: strict) - Synkroniser checkpoints politik (default: streng) - - - + Threshold for disconnecting misbehaving peers (default: 100) GrĂŠnse for afbrydelse til dĂ„rlige forbindelser (standard: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Antal sekunder dĂ„rlige forbindelser skal vente fĂžr reetablering (standard: 86400) @@ -3762,6 +3682,16 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3822,6 +3752,11 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. ERROR + + + Entire balance reserved + + Expires @@ -3887,11 +3822,6 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Message Besked - - - Messate Type - - Miner: @@ -3928,12 +3858,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - - No coins; - - - - + Offline; @@ -3943,12 +3868,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4028,22 +3948,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. ForsĂžg at bruge UPnP til at konfigurere den lyttende port (standard: 0) - + Fee per KB to add to transactions you send Gebyr pr KB som tilfĂžjes til transaktioner, du sender - + When creating transactions, ignore inputs with value less than this (default: 0.01) NĂ„r du opretter transaktioner ignoreres input med vĂŠrdi mindre end dette (standard: 0,01) - + Use the test network Brug testnetvĂŠrket - + Output extra debugging information. Implies all other -debug* options Output ekstra debugging information. IndebĂŠrer alle andre-debug * muligheder @@ -4053,7 +3973,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Output ekstra netvĂŠrk debugging information - + Prepend debug output with timestamp Prepend debug output med tidsstempel @@ -4063,7 +3983,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Send trace / debug info til debugger - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Spor efter JSON-RPC-forbindelser pĂ„ <port> (default: 15715 eller Testnet: 25715) @@ -4073,7 +3993,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Tillad JSON-RPC-forbindelser fra bestemt IP-adresse - + Send commands to node running on <ip> (default: 127.0.0.1) Send kommandoer til knude, der kĂžrer pĂ„ <ip> (standard: 127.0.0.1) @@ -4083,7 +4003,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. KrĂŠver en bekrĂŠftelser for forandring (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Gennemtving transaktions omkostninger scripts til at bruge canoniske PUSH operatĂžrer (default: 1) @@ -4093,7 +4013,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. UdfĂžr kommando, nĂ„r en relevant advarsel er modtaget (% s i cmd erstattes af meddelelse) - + Upgrade wallet to latest format Opgrader tegnebog til seneste format @@ -4108,7 +4028,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. GennemsĂžg blokkĂŠden for manglende tegnebogstransaktioner - + Attempt to recover private keys from a corrupt wallet.dat ForsĂžg at genskabe private nĂžgler fra Ăždelagt wallet.dat @@ -4128,7 +4048,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + Boinc Mining @@ -4138,7 +4058,7 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + Error obtaining next project. Error 06172014. @@ -4188,12 +4108,32 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4208,12 +4148,12 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Indstil maks. blok stĂžrrelse i bytes (standard: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Angiv maksimal stĂžrrelse pĂ„ high-priority/low-fee transaktioner i bytes (standard: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL-indstillinger: (se Bitcoin Wiki for SSL-opsĂŠtningsinstruktioner) @@ -4233,21 +4173,17 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Serverens private nĂžgle (standard: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptable ciphers (default: TLSv1 + HØJ:! SSLv2: aNULL: eNULL: AH: 3DES: @ styrke) - - - + Invalid amount for -paytxfee=<amount>: '%s' Ugyldigt belĂžb for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Advarsel: -paytxfee er sat meget hĂžjt! Dette er det gebyr du vil betale, hvis du sender en transaktion. - + Invalid amount for -mininput=<amount>: '%s' Ugyldigt belĂžb for-mininput = <belĂžb>: '% s' @@ -4257,22 +4193,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. - + Wallet %s resides outside data directory %s. Wallet% s placeret udenfor data mappe% s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Kan ikke fĂ„ en lĂ„s pĂ„ data mappe% s. Gridcoin kĂžrer sikkert allerede. - + Verifying database integrity... BekrĂŠfter database integritet ... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Fejl initialisering database miljĂž% s! For at gendanne, BACKUP denne mappe, og derefter fjern alt bortset fra wallet.dat. @@ -4282,10 +4218,15 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Advarsel: wallet.dat Ăždelagt, data reddet! Oprindelig wallet.net gemt som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaktioner er forkert, bĂžr du genskabe fra en sikkerhedskopi. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4302,17 +4243,17 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. wallet.dat Ăždelagt, redning af data mislykkedes - + Unknown -socks proxy version requested: %i Ukendt -socks proxy-version: %i - + Invalid -tor address: '%s' Ugyldig-tor-adresse: '% s' - + Cannot resolve -bind address: '%s' Kan ikke finde -bind adressen: '%s' @@ -4322,16 +4263,10 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Kan ikke finde -externalip adressen: '%s' - + Invalid amount for -reservebalance=<amount> Ugyldigt belĂžb for-reservebalance = <belĂžb> - - Unable to sign checkpoint, wrong checkpointkey? - - Kan ikke logge checkpoint, forkert checkpointkey? - - Error loading blkindex.dat @@ -4343,22 +4278,22 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Fejl ved indlĂŠsning af wallet.dat: Tegnebog Ăždelagt - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Advarsel: fejl under lĂŠsning af wallet.dat! Alle nĂžgler blev lĂŠst korrekt, men transaktionsdata eller adressebogsposter kan mangle eller vĂŠre forkerte. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Fejl ved indlĂŠsning af wallet.dat: Wallet krĂŠver en nyere version af Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Det er nĂždvendig for wallet at blive omskrevet: Genstart Gridcoin for fuldfĂžre - + Error loading wallet.dat Fejl ved indlĂŠsning af wallet.dat @@ -4378,17 +4313,17 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Fejl: kunne ikke starte node - + Unable to bind to %s on this computer. Gridcoin is probably already running. Kunne ikke binde sig til% s pĂ„ denne computer. Gridcoin kĂžrer sikkert allerede. - + Unable to bind to %s on this computer (bind returned error %d, %s) Kunne ikke tildele %s pĂ„ denne computer (bind returnerede fejl %d, %s) - + Error: Wallet locked, unable to create transaction Fejl: Wallet lĂ„st, ude af stand til at skabe transaktion @@ -4398,59 +4333,47 @@ Det betyder, at et gebyr pĂ„ mindst %2 er pĂ„krĂŠvet. Fejl: Pung lĂ„st for at udregne rente, ude af stand til at skabe transaktion. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Fejl: Denne transaktion krĂŠver et transaktionsgebyr pĂ„ mindst% s pĂ„ grund af dens stĂžrrelse, kompleksitet, eller anvendelse af nylig modtaget midler - + Error: Transaction creation failed Fejl: Transaktion oprettelse mislykkedes - + Sending... Sender... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fejl: Transaktionen blev afvist. Dette kan ske, hvis nogle af mĂžnterne i din pung allerede er blevet brugt, som hvis du brugte en kopi af wallet.dat og mĂžnterne blev brugt i kopien, men ikke markeret her. - + Invalid amount Ugyldigt belĂžb - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Advarsel: Kontroller venligst, at computerens dato og klokkeslĂŠt er korrekt! Hvis dit ur er forkert vil Gridcoin ikke fungere korrekt. - Warning: This version is obsolete, upgrade required! - Advarsel: Denne version er forĂŠldet, opgradering pĂ„krĂŠvet! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ADVARSEL: synkroniseret checkpoint overtrĂŠdelse opdaget, men skibbet! - - - + Warning: Disk space is low! Advarsel: Diskplads lav! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ADVARSEL: Ugyldig checkpoint fundet! Viste transaktioner er mĂ„ske ikke korrekte! Du kan vĂŠre nĂždt til at opgradere, eller underrette udviklerne. - - - + To use the %s option For at bruge %s mulighed - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4484,12 +4407,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren lĂŠserettighed. - + Gridcoin version Gridcoin version - + Usage: Anvendelse: @@ -4499,7 +4422,7 @@ Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren lĂŠserettigh - + List commands Liste over kommandoer diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index 25aa419edc..11d9814245 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Dies ist experimentelle Software. - -Veröffentlicht unter der MIT/X11-Softwarelizenz, siehe beiligende Datei COPYING oder http://www.opensource.org/licenses/mit-license.php. - -Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit (http://www.openssl.org/) entwickelt wurde, sowie kryptographische Software geschrieben von Eric Young (eay@cryptsoft.com) und UPnP-Software geschrieben von Thomas Bernard. - AddressBookPage @@ -315,12 +301,12 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open BitcoinGUI - + Sign &message... Nachricht s&ignieren... - + &Overview &Übersicht @@ -350,7 +336,7 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open Anwendung beenden - + &Options... &Konfiguration... @@ -359,19 +345,11 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open &Encrypt Wallet... Wallet &verschlĂŒsseln... - - &Backup Wallet... - Wallet &sichern... - &Change Passphrase... Passphrase &Ă€ndern... - - Backup wallet to another location - Eine Wallet-Sicherungskopie erstellen und abspeichern - Change the passphrase used for wallet encryption @@ -393,12 +371,12 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open Nachricht &verifizieren... - + Wallet Wallet - + &Send &Überweisen @@ -408,12 +386,12 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open &Empfangen - + &Show / Hide &Anzeigen / Verstecken - + &File &Datei @@ -423,12 +401,12 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open &Einstellungen - + &Help &Hilfe - + Processed %n block(s) of transaction history. %n Block des Transaktionsverlaufs verarbeitet. @@ -473,12 +451,12 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open Auf aktuellem Stand - + Catching up... Hole auf... - + Sent transaction Gesendete Transaktion @@ -488,16 +466,12 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open Eingehende Transaktion - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet ist <b>verschlĂŒsselt</b> und aktuell <b>entsperrt</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Wallet ist <b>verschlĂŒsselt</b> und aktuell <b>gesperrt</b> - + Send coins to a Gridcoin address Sende Coins zu einer Gridcoin Addresse @@ -563,7 +537,7 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open - + Encrypt or decrypt wallet VerschlĂŒssele oder entschlĂŒsele das Wallet @@ -608,11 +582,37 @@ Dieses Produkt enthĂ€lt Software, die vom OpenSSL-Projekt zur Verwendung im Open Exportiere die Daten des momentanen Reiters in eine Datei - %1 second(s) ago - %1 Sekunde(n) + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + - + Date: %1 Amount: %2 Type: %3 @@ -626,7 +626,7 @@ Adresse: %4 {1 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -651,7 +651,7 @@ Adresse: %4 {1 - + %n second(s) %n Sekunde @@ -693,24 +693,12 @@ Adresse: %4 {1 - + Gridcoin Gridcoin - %1 minute(s) ago - %1 Minute(n) - - - %1 hour(s) ago - %1 Stunde(n) - - - %1 day(s) ago - %1 Tag(en) - - - + Last received block was generated %1. Letzter erhaltener Block wurde vor %1 generiert. @@ -755,18 +743,7 @@ Adresse: %4 {1 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Betrag: %2 -Typ: %3 -Adresse: %4 - - - + &About Gridcoin &Über Gridcoin @@ -776,28 +753,12 @@ Adresse: %4 Zeige Information ĂŒber Gridcoin - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -807,7 +768,7 @@ Adresse: %4 - + &Diagnostics @@ -822,7 +783,7 @@ Adresse: %4 VerĂ€ndere Konfigurationen von Gridcoin - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI kann nicht geparsed werden! Dies kann durch eine nicht gĂŒltige Gridcoin Addresse, oder schlechten URI Parametern verursacht worden sein. @@ -856,14 +817,14 @@ Adresse: %4 Es gab einen Fehler beim speichern ihrer Wallet Datei in dem neuen Ort. - + [testnet] [Testnetz] - + Gridcoin client Gridcoin @@ -873,41 +834,12 @@ Adresse: %4 %1 aktive Verbindung(en) zum Gridcoin Netzwerk - Not staking because wallet is locked - Nicht am Verzinsen, da das Wallet verschlossen ist - - - Not staking because wallet is offline - Nicht am Verzinsen, da das Wallet offline ist - - - Not staking because wallet is syncing - Nicht am Verzinsen, weil das Wallet synchronisiert - - - Not staking because you don't have mature coins and stake weight is too low. - Nicht am Verzinsen, da keine reifen Coins vorhanden sind und das stake weight zu niedrig ist - - - Not staking because you don't have mature coins - Nicht am Verzinsen, da keine keine reifen Coins vorhanden sind - - - Not staking - Nicht am Verzinsen - - - + &Community - - &Advanced - - - - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Ein fataler Fehler passierte. Gridcoin kann nicht mehr lĂ€nger sicher ausgfĂŒhrt werden und wird runterfahren. @@ -915,7 +847,7 @@ Adresse: %4 ClientModel - + Network Alert Netzwerkalarm @@ -957,10 +889,6 @@ Adresse: %4 (un)select all Alles (de)selektieren - - List mode - Listenansicht - Amount @@ -1380,7 +1308,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. NewPollDialog - + Create Poll @@ -1478,10 +1406,6 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Map port using &UPnP Portweiterleitung via &UPnP - - Proxy &IP: - Proxy-&IP: - &Port: @@ -1830,6 +1754,14 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. nicht synchron + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1891,7 +1823,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. RPCConsole - + @@ -1903,7 +1835,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + N/A k.A. @@ -1983,7 +1915,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. ausgehend: - + + &Scraper + + + + Debug log file Debugprotokolldatei @@ -2003,7 +1940,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Bitte <b>help</b> eingeben, um eine Übersicht verfĂŒgbarer Befehle zu erhalten. - + %1 B %1 B @@ -2023,7 +1960,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. %1 GB - + Welcome to the Gridcoin RPC console! @@ -2038,7 +1975,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + %1 m %1 m @@ -2053,12 +1990,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + Gridcoin - Debug Console - + Boost version @@ -2390,22 +2327,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. SendCoinsEntry - + A&mount: Betra&g: - + Pay &To: E&mpfĂ€nger: - + &Label: &Bezeichnung: - + Alt+A Alt+A @@ -2431,12 +2368,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Geben Sie eine Bezeichnung fĂŒr diese Adresse ein, um sie zu Ihrem Adressbuch hinzuzufĂŒgen - + Form Form - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2451,17 +2388,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Entferne den EmpfĂ€nger - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2705,26 +2637,17 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + Source Quelle - Generated - Erzeugt - - - + Generated in CoinBase - - Generated, PoS - - - - + From Von @@ -2838,18 +2761,6 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Transaction Inputs - - Transaction ID - Transaktionskennung - - - Transaction - Transaktion - - - Inputs - Eingaben - Amount @@ -2866,18 +2777,44 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. falsch - + conflicted kollidiert - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + MINED - POS - Information - Hinweis + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + @@ -2893,12 +2830,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Transaktionsdetails - - View Attachment - - - - + Execute Contract @@ -2907,21 +2839,11 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. C&lose &Schließen - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datum @@ -2969,7 +2891,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Generiert, aber nicht akzeptiert - + Received with Empfangen ĂŒber @@ -2989,12 +2911,42 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. EigenĂŒberweisung - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (k.A.) - + Transaction status. Hover over this field to show number of confirmations. Transaktionsstatus. Fahren Sie mit der Maus ĂŒber dieses Feld, um die Anzahl der BestĂ€tigungen zu sehen. @@ -3014,7 +2966,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Der Betrag, der dem Kontostand abgezogen oder hinzugefĂŒgt wurde. - + Address Adresse @@ -3039,27 +2991,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Zieladresse der Transaktion. @@ -3233,17 +3165,10 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Kann Datei nicht schreiben %1. - - UpgradeDialog - - Hide - Ausblenden - - VotingChartDialog - + Poll Results @@ -3387,7 +3312,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. VotingVoteDialog - + PlaceVote @@ -3420,7 +3345,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. WalletModel - + Sending... Wird gesendet... @@ -3428,37 +3353,37 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. bitcoin-core - + Options: Optionen: - + Specify data directory Datenverzeichnis festlegen - + Connect to a node to retrieve peer addresses, and disconnect Mit dem angegebenen Knoten verbinden, um Adressen von Gegenstellen abzufragen, danach trennen - + Specify your own public address Die eigene öffentliche Adresse angeben - + Accept command line and JSON-RPC commands Kommandozeilen- und JSON-RPC-Befehle annehmen - + Run in the background as a daemon and accept commands Als Hintergrunddienst ausfĂŒhren und Befehle annehmen - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Befehl ausfĂŒhren wenn sich eine Wallet-Transaktion verĂ€ndert (%s im Befehl wird durch die Transaktions-ID ersetzt) @@ -3468,12 +3393,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Blockerzeugungsoptionen: - + Failed to listen on any port. Use -listen=0 if you want this. Fehler, es konnte kein Port abgehört werden. Wenn dies so gewĂŒnscht wird -listen=0 verwenden. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3503,7 +3428,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Passwort fĂŒr JSON-RPC-Verbindungen - + Execute command when the best block changes (%s in cmd is replaced by block hash) Befehl ausfĂŒhren wenn der beste Block wechselt (%s im Befehl wird durch den Hash des Blocks ersetzt) @@ -3513,7 +3438,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Erlaube DNS-Abfragen fĂŒr -addnode, -seednode und -connect - + Loading addresses... Lade Adressen... @@ -3523,12 +3448,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. UngĂŒltige Adresse in -proxy: '%s' - + Unknown network specified in -onlynet: '%s' Unbekannter Netztyp in -onlynet angegeben: '%s' - + Insufficient funds Unzureichender Kontostand @@ -3538,17 +3463,17 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Lade Blockindex... - + Add a node to connect to and attempt to keep the connection open Mit dem angegebenen Knoten verbinden und versuchen die Verbindung aufrecht zu erhalten - + Loading wallet... Lade Wallet... - + Cannot downgrade wallet Wallet kann nicht auf eine Ă€ltere Version herabgestuft werden @@ -3558,22 +3483,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Standardadresse kann nicht geschrieben werden - + Rescanning... Durchsuche erneut... - + Done loading Laden abgeschlossen - + Error Fehler - + This help message Dieser Hilfetext @@ -3598,12 +3523,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Verbindungstimeout in Millisekunden festlegen (Standard: 5000) - + Connect through socks proxy Verbinde ĂŒber socks proxy - + Select the version of socks proxy to use (4-5, default: 5) WĂ€hle die Socks Proxy Version (4-5,default:5) @@ -3613,7 +3538,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Proxy benutzen um versteckte Services zu erreichen (Standard: selbe Einstellung wie Proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Höre auf Verbindungen auf <port> (default: 15714 oder Testnetz: 25714) {32749 ?} {32748)?} @@ -3623,26 +3548,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Maximal <n> Verbindungen zu Gegenstellen aufrechterhalten (Standard: 125) - + Connect only to the specified node(s) Nur mit dem/den angegebenen Knoten verbinden - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Verbinde nur zu Knoten des Netztyps <net> (IPv4, IPv6 oder Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Eigene IP-Adresse erkennen (Standard: 1, wenn abgehört wird und nicht -externalip) - Find peers using internet relay chat (default: 0) - Knoten die IRC Chat nutzen auffinden (Standard: 1) (0)?) - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Eingehende Verbindungen annehmen (Standard: 1, wenn nicht -proxy oder -connect) @@ -3652,26 +3573,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Binde an gegebene Addresse. Benutze [host]:port Notation fĂŒr IPv6 - + Find peers using DNS lookup (default: 1) Finde Peers mit DNS lookup (default:1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synchronisiere Zeit mit anderen Knoten. Deaktivieren wenn die Zeit auf ihrem System prĂ€zise ist, zum Beispiel ĂŒber NTP (default:1) - Sync checkpoints policy (default: strict) - Synchronisiere Checkpoints Police (default:strikt) - - - + Threshold for disconnecting misbehaving peers (default: 100) Schwellenwert, um Verbindungen zu sich nicht konform verhaltenden Gegenstellen zu beenden (Standard: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Anzahl Sekunden, wĂ€hrend denen sich nicht konform verhaltenden Gegenstellen die Wiederverbindung verweigert wird (Standard: 86400) @@ -3766,6 +3683,16 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3826,6 +3753,11 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. ERROR + + + Entire balance reserved + + Expires @@ -3891,11 +3823,6 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Message Nachricht - - - Messate Type - - Miner: @@ -3932,12 +3859,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - - No coins; - - - - + Offline; @@ -3947,12 +3869,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4032,22 +3949,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. UPnP verwenden, um die Portweiterleitung einzurichten (Standard: 0) - + Fee per KB to add to transactions you send GebĂŒhr pro KB, zusĂ€tzlich zur ausgehenden Transaktion - + When creating transactions, ignore inputs with value less than this (default: 0.01) Beim erstellen einer Transaktion werden eingaben kleiner als dieser Wert ignoriert (Standard 0,01) - + Use the test network Das Testnetz verwenden - + Output extra debugging information. Implies all other -debug* options Ausgabe weiterer Debug Informationen. Impliziert alle anderen -debug* Optionen @@ -4057,7 +3974,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Ausgabe weiterer Netzwerk Debugging Informationen - + Prepend debug output with timestamp FĂŒge Zeitstempel zu Debug Ausgabe hinzu @@ -4067,7 +3984,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Sende Trace/Debug Information an Debugger - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Höre auf JSON-RPC Verbindungen auf <port> (default: 15715 oder Testnetz: 25715) @@ -4077,7 +3994,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. JSON-RPC-Verbindungen von der angegebenen IP-Adresse erlauben - + Send commands to node running on <ip> (default: 127.0.0.1) Sende Befehle an Knoten <ip> (Standard: 127.0.0.1) @@ -4087,7 +4004,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Benötigt eine BestĂ€tigung zur Änderung (Standard: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Zwinge Transaktionsskripte den kanonischen PUSH Operator zu verwenden (default: 1) @@ -4097,7 +4014,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Kommando ausfĂŒhren wenn eine relevante Meldung eingeht (%s in cmd wird von der Meldung ausgetauscht) - + Upgrade wallet to latest format Wallet auf das neueste Format aktualisieren @@ -4112,7 +4029,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Blockkette erneut nach fehlenden Wallet-Transaktionen durchsuchen - + Attempt to recover private keys from a corrupt wallet.dat Versucht private SchlĂŒssel aus einer beschĂ€digten wallet.dat wiederherzustellen @@ -4132,7 +4049,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + Boinc Mining @@ -4142,7 +4059,7 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + Error obtaining next project. Error 06172014. @@ -4192,12 +4109,32 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4212,12 +4149,12 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Setze Maximal Block Grösse in Bytes (default 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Setze Maximalgrösse von hoch bzw tief priorisierten Transaktionen mit niedrigen GebĂŒhren in Bytes (default:27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL-Optionen: (siehe Bitcoin-Wiki fĂŒr SSL-Installationsanweisungen) @@ -4237,21 +4174,17 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Privater ServerschlĂŒssel (Standard: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Annehmbare Chiffren (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' UngĂŒltiger Betrag fĂŒr -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Warnung: -paytxfee ist auf einen sehr hohen Wert festgelegt! Dies ist die GebĂŒhr die beim Senden einer Transaktion fĂ€llig wird. - + Invalid amount for -mininput=<amount>: '%s' UngĂŒltiger Betrag fĂŒr -mininput=<amount>:'%s' @@ -4261,22 +4194,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. - + Wallet %s resides outside data directory %s. Wallet %s liegt außerhalb des Daten Verzeichnisses %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Kann das Verzeichniss nicht einbinden %s. Gridcoin lĂ€uft wahrscheinlich bereits. - + Verifying database integrity... ÜberprĂŒfe Datenbank IntegritĂ€t... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Fehler beim initialisieren der Datenbank Umgebung %s! Um wiederherzustellen, fertige ein Backup des Verzeichnisses an, dann entferne alles davon ausser die wallet.dat Datei. @@ -4286,10 +4219,15 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Warnung: wallet.dat beschĂ€digt, Rettung erfolgreich! Original wallet.dat wurde als wallet.{Zeitstempel}.dat in %s gespeichert. Falls ihr Kontostand oder Transaktionen nicht korrekt sind, sollten Sie von einer Datensicherung wiederherstellen. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4306,17 +4244,17 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. wallet.dat beschĂ€digt, Rettung fehlgeschlagen - + Unknown -socks proxy version requested: %i Unbekannte Proxyversion in -socks angefordert: %i - + Invalid -tor address: '%s' UngĂŒltige Tor Addresse: '%s' - + Cannot resolve -bind address: '%s' Kann Adresse in -bind nicht auflösen: '%s' @@ -4326,15 +4264,10 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Kann Adresse in -externalip nicht auflösen: '%s' - + Invalid amount for -reservebalance=<amount> UngĂŒltige Anzahl fĂŒr 'reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - Nicht möglich den Checkpoint zu unterschreiben - falscher CheckpointschlĂŒssel? - Error loading blkindex.dat @@ -4346,22 +4279,22 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Fehler beim Laden von wallet.dat: Wallet beschĂ€digt - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Warnung: Lesen von wallet.dat fehlgeschlagen! Alle SchlĂŒssel wurden korrekt gelesen, Transaktionsdaten bzw. AdressbucheintrĂ€ge fehlen aber möglicherweise oder sind inkorrekt. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Fehler beim Laden von wallet.dat. Wallet benötigt neuere Version von Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Wallet muss neu geschrieben werden. Starte Gridcoin neu um auszufĂŒhren - + Error loading wallet.dat Fehler beim Laden von wallet.dat @@ -4381,17 +4314,17 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Fehler: Node konnte nicht gestartet werden - + Unable to bind to %s on this computer. Gridcoin is probably already running. Fehler beim anbinden %s auf diesem Computer. Gridcoin lĂ€uft wahrscheinlich bereits. - + Unable to bind to %s on this computer (bind returned error %d, %s) Kann auf diesem Computer nicht an %s binden (von bind zurĂŒckgegebener Fehler %d, %s) - + Error: Wallet locked, unable to create transaction Fehler: Wallet verschlĂŒsselt, unmöglich Transaktion zu erstellen @@ -4401,59 +4334,47 @@ Dieses Label wird rot, wenn die PrioritĂ€t kleiner ist als Mittel. Fehler: Das Wallet ist nur zum Verzinsen geöffnet. Nicht möglich die Transaktion zu erstellen. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Fehler: Diese Transaktion benötigt eine TransaktionsgebĂŒhr von mindestens %s wegen der Anzahl, KomplexitĂ€t oder Benutzung von neuerlich erhaltenen BetrĂ€gen - + Error: Transaction creation failed Fehler: Erstellung der Transaktion fehlgeschlagen - + Sending... Wird gesendet... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fehler: Transaktion wurde abgelehnt. Das kann geschehen wenn einige Coins in dem Wallet bereits ausgegeben wurden. Wenn von einer Kopie der wallet.dat Coins ausgegeben wurden, werden sie hier nicht sofort als Ausgabe aufgefĂŒhrt. - + Invalid amount UngĂŒltiger Betrag - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Wanung : Bitte prĂŒfen Sie ob Datum und Uhrzeit richtig eingestellt sind. Wenn das Datum falsch ist Gridcoin nicht richtig funktionieren. - Warning: This version is obsolete, upgrade required! - Warnung: Diese Version is veraltet, Aktualisierung erforderlich! - - - WARNING: synchronized checkpoint violation detected, but skipped! - WARNUNG: Synchronisierter CheckpointVerstoss entdeckt, aber ĂŒbersprungen! - - - + Warning: Disk space is low! Warnung: Festplatte hat wenig freien Speicher! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - WARNUNG : UngĂŒltiger Checkpunkt gefunden! Angezeigte Transaktionen können falsch sein! Du musst vielleicht updaten oder die Entwickler benachrichtigen. - - - + To use the %s option Zur Nutzung der %s Option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4487,12 +4408,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Falls die Konfigurationsdatei nicht existiert, erzeugen Sie diese mit Leserechten nur fĂŒr den Dateibesitzer. - + Gridcoin version Gridcoin Version - + Usage: Benutzung: @@ -4502,7 +4423,7 @@ Falls die Konfigurationsdatei nicht existiert, erzeugen Sie diese mit Leserechte - + List commands Befehle auflisten diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts index 9d78801b3e..fb81a32d4f 100644 --- a/src/qt/locale/bitcoin_el_GR.ts +++ b/src/qt/locale/bitcoin_el_GR.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Î„Ï€ÎżÎłÏÎ±Ï†Îź &ÎœÎ·ÎœÏÎŒÎ±Ï„ÎżÏ‚... - + &Overview &ΕπÎčσÎșόπηση @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O Î•ÎŸÎżÎŽÎżÏ‚ από τηΜ Î”Ï†Î±ÏÎŒÎżÎłÎź - + &Options... &ΕπÎčÎ»ÎżÎłÎ­Ï‚... @@ -343,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... &ÎšÏÏ…Ï€Ï„ÎżÎłÏÎŹÏ†Î·ÏƒÎ” Ï„Îż Ï€ÎżÏÏ„ÎżÏ†ÏŒÎ»Îč - - &Backup Wallet... - &Î‘ÎœÏ„ÎŻÎłÏÎ±Ï†Îż Î±ÏƒÏ†Î±Î»Î”ÎŻÎ±Ï‚ Ï„ÎżÏ… Ï€ÎżÏÏ„ÎżÏ†ÎżÎ»ÎčÎżÏ - &Change Passphrase... &ΆλλαΟΔ ÎșωΎÎčÎșÎż πρόσÎČασης - - Backup wallet to another location - ΔηΌÎčÎżÏ…ÏÎłÎŻÎ± αΜτÎčÎłÏÎŹÏ†ÎżÏ… Î±ÏƒÏ†Î±Î»Î”ÎŻÎ±Ï‚ Ï€ÎżÏÏ„ÎżÏ†ÎżÎ»ÎčÎżÏ σΔ Ώλλη Ï„ÎżÏ€ÎżÎžÎ”ÏƒÎŻÎ± - Change the passphrase used for wallet encryption @@ -377,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ΕπÎčÎČΔÎČÎ±ÎŻÏ‰ÏƒÎ· ÎŒÎ·ÎœÏÎŒÎ±Ï„ÎżÏ‚ - + Wallet Î ÎżÏÏ„ÎżÏ†ÏŒÎ»Îč - + &Send &Î‘Ï€ÎżÏƒÏ„ÎżÎ»Îź @@ -392,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ΠαραλαÎČÎź - + &Show / Hide &Î•ÎŒÏ†ÎŹÎœÎčσΔ/ΚρύψΔ - + &File &Î‘ÏÏ‡Î”ÎŻÎż @@ -407,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O &ÎĄÏ…ÎžÎŒÎŻÏƒÎ”Îčς - + &Help &ΒοΟΞΔÎčα - + %n second(s) ago @@ -449,12 +441,12 @@ This product includes software developed by the OpenSSL Project for use in the O Î•ÎœÎ·ÎŒÎ”ÏÏ‰ÎŒÎ­ÎœÎż - + Catching up... ΕΜηΌέρωση... - + Sent transaction Η ÏƒÏ…ÎœÎ±Î»Î»Î±ÎłÎź Î±Ï€Î”ÏƒÏ„ÎŹÎ»Î· @@ -464,16 +456,12 @@ This product includes software developed by the OpenSSL Project for use in the O ΕÎčσΔρχόΌΔΜη ÏƒÏ…ÎœÎ±Î»Î»Î±ÎłÎź - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - ΀ο Ï€ÎżÏÏ„ÎżÏ†ÏŒÎ»Îč Î”ÎŻÎœÎ±Îč <b>ÎșÏÏ…Ï€Ï„ÎżÎłÏÎ±Ï†Î·ÎŒÎ­ÎœÎż</b> ÎșαÎč <b>ΟΔÎșÎ»Î”ÎŻÎŽÏ‰Ï„Îż</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> ΀ο Ï€ÎżÏÏ„ÎżÏ†ÏŒÎ»Îč Î”ÎŻÎœÎ±Îč <b>ÎșÏÏ…Ï€Ï„ÎżÎłÏÎ±Ï†Î·ÎŒÎ­ÎœÎż</b> ÎșαÎč <b>ÎșλΔÎčÎŽÏ‰ÎŒÎ­ÎœÎż</b> - + Send coins to a Gridcoin address @@ -539,7 +527,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Encrypt or decrypt wallet @@ -574,12 +562,12 @@ This product includes software developed by the OpenSSL Project for use in the O Î•ÎŸÎ±ÎłÏ‰ÎłÎź ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ Îșαρτέλας σΔ Î±ÏÏ‡Î”ÎŻÎż - + Gridcoin - + &About Gridcoin @@ -589,28 +577,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -620,7 +592,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -645,14 +617,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -670,7 +642,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -723,7 +695,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -770,7 +742,7 @@ Address: %4 - + %n second(s) @@ -812,17 +784,42 @@ Address: %4 - - &Community + + Scraper: waiting on wallet to sync. - - &Advanced + + Scraper: superblock not needed - inactive. - + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Community + + + + URI handling @@ -834,7 +831,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -884,10 +881,6 @@ Address: %4 (un)select all (από)ΔπÎčλογΟ όλωΜ - - List mode - Î›ÎŻÏƒÏ„Î± Î”ÎœÏ„ÎżÎ»ÏŽÎœ - Amount @@ -1293,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1391,10 +1384,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Î‘Ï€ÏŒÎŽÎżÏƒÎ· ΞυρώΜ ΌΔ Ï‡ÏÎźÏƒÏ„Î· &UPnP - - Proxy &IP: - &IP ÎŽÎčÎ±ÎŒÎ”ÏƒÎżÎ»Î±ÎČÎ·Ï„Îź: - &Port: @@ -1744,6 +1733,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1805,7 +1802,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1817,7 +1814,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A Μη ÎŽÎčαΞέσÎčÎŒÎż @@ -1897,7 +1894,12 @@ This label turns red, if the priority is smaller than "medium". ΕΟΔρχόΌΔΜα: - + + &Scraper + + + + Debug log file Î‘ÏÏ‡Î”ÎŻÎż ÎșÎ±Ï„Î±ÎłÏÎ±Ï†ÎźÏ‚ Î”ÎœÏ„ÎżÏ€ÎčÏƒÎŒÎżÏ ÏƒÏ†Î±Î»ÎŒÎŹÏ„Ï‰Îœ @@ -1927,7 +1929,7 @@ This label turns red, if the priority is smaller than "medium". Î“ÏÎŹÏˆÏ„Î” <b>help</b> ÎłÎčα ÎŒÎčα ΔπÎčσÎșόπηση τωΜ ÎŽÎčαΞέσÎčΌωΜ Î”ÎœÏ„ÎżÎ»ÏŽÎœ - + %1 B %1 B @@ -1947,12 +1949,12 @@ This label turns red, if the priority is smaller than "medium". %1 GB - + Gridcoin - Debug Console - + Boost version @@ -2037,7 +2039,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2304,22 +2306,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Î ÎżÏƒÏŒ: - + Pay &To: Î Î»Î·ÏÏ‰ÎŒÎź &σΔ: - + &Label: &ΕπÎčÎłÏÎ±Ï†Îź - + Alt+A Alt+A @@ -2339,12 +2341,12 @@ This label turns red, if the priority is smaller than "medium". ÎœÎźÎœÏ…ÎŒÎ±: - + Form ΊόρΌα - + Enter a label for this address to add it to your address book @@ -2365,17 +2367,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2583,12 +2580,42 @@ This label turns red, if the priority is smaller than "medium". - + Source - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2636,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". - + conflicted @@ -2673,13 +2700,8 @@ This label turns red, if the priority is smaller than "medium". Generated in CoinBase - - - Generated, PoS - - - + matures in %n more block(s) @@ -2750,10 +2772,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Î Î»Î·ÏÎżÏ†ÎżÏÎŻÎ± - Amount @@ -2770,7 +2788,7 @@ This label turns red, if the priority is smaller than "medium". - + Open for %n more block(s) @@ -2791,12 +2809,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2805,21 +2818,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Κ&Î»Î”ÎŻÏƒÎčÎŒÎż - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Î—ÎŒÎ”ÏÎżÎŒÎ·ÎœÎŻÎ± @@ -2892,7 +2895,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2912,32 +2915,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3131,17 +3144,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - ΑπόÎșρυψη - - VotingChartDialog - + Poll Results @@ -3285,7 +3291,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3318,7 +3324,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3326,37 +3332,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ΕπÎčÎ»ÎżÎłÎ­Ï‚: - + Specify data directory ΟρÎčσΌός φαÎșÎ­Î»ÎżÏ… ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ - + Connect to a node to retrieve peer addresses, and disconnect ÎŁÏÎœÎŽÎ”ÏƒÎ· σΔ έΜαΜ ÎșόΌÎČÎż ÎłÎčα τηΜ Î±ÎœÎŹÎșτηση ÎŽÎčΔυΞύΜσΔωΜ από ÎżÎŒÎżÏ„ÎŻÎŒÎżÏ…Ï‚, ÎșαÎč Î±Ï€ÎżÏƒÏ…ÎœÎŽÎ­Ïƒh - + Specify your own public address ΔÎčΔυÎșρÎčÎœÎŻÏƒÏ„Î” τη ÎŽÎčÎșÎčÎŹ σας ΎηΌόσÎčα ÎŽÎčΔύΞυΜση. - + Accept command line and JSON-RPC commands Î‘Ï€ÎżÎŽÎżÏ‡Îź Î”ÎœÏ„ÎżÎ»ÏŽÎœ ÎșÎżÎœÏƒÏŒÎ»Î±Ï‚ ÎșαÎč JSON-RPC - + Run in the background as a daemon and accept commands ΕÎșτέλΔση ÏƒÏ„Îż παρασÎșÎźÎœÎčÎż ÎșÎč Î±Ï€ÎżÎŽÎżÏ‡Îź Î”ÎœÏ„ÎżÎ»ÏŽÎœ - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) ΕÎșτέλΔσΔ τηΜ Î”ÎœÏ„ÎżÎ»Îź όταΜ Ï„Îż ÎșÎ±Î»ÏÏ„Î”ÏÎż ÎŒÏ€Î»ÎżÎș Î±Î»Î»ÎŹÎŸÎ”Îč(%s στηΜ Î”ÎœÏ„ÎżÎ»Îź αΜτÎčÎșÎ±ÎžÎŻÏƒÏ„Î±Ï„Î±Îč από Ï„Îż hash Ï„ÎżÏ… ÎŒÏ€Î»ÎżÎș) @@ -3366,12 +3372,12 @@ This label turns red, if the priority is smaller than "medium". Î‘Ï€ÎżÎșλΔÎčσΌός ΔπÎčÎ»ÎżÎłÏ‰Îœ ΎηΌÎčÎżÏ…ÏÎłÎŻÎ±Ï‚: - + Failed to listen on any port. Use -listen=0 if you want this. ταλαÎčπωρηΞΔÎčτΔ ÎłÎčα Μα αÎșÎżÏÏƒÎ”Ï„Î” σΔ ÎżÏ€ÎżÎčÎ±ÎŽÎźÏ€ÎżÏ„Î” Ξύρα. Î§ÏÎźÏƒÎ· - αÎșÎżÏÏƒÏ„Î” = 0 , αΜ ΞέλΔτΔ αυτό. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3401,7 +3407,7 @@ This label turns red, if the priority is smaller than "medium". ΚωΎÎčÎșός ÎłÎčα τÎčς συΜΎέσΔÎčς JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) ΕÎșτέλΔσΔ τηΜ Î”ÎœÏ„ÎżÎ»Îź όταΜ Ï„Îż ÎșÎ±Î»ÏÏ„Î”ÏÎż ÎŒÏ€Î»ÎżÎș Î±Î»Î»ÎŹÎŸÎ”Îč(%s στηΜ Î”ÎœÏ„ÎżÎ»Îź αΜτÎčÎșÎ±ÎžÎŻÏƒÏ„Î±Ï„Î±Îč από Ï„Îż hash Ï„ÎżÏ… ÎŒÏ€Î»ÎżÎș) @@ -3411,7 +3417,7 @@ This label turns red, if the priority is smaller than "medium". Να ΔπÎčÏ„ÏÎ­Ï€ÎżÎœÏ„Î±Îč ÎżÎč Î­Î»Î”ÎłÏ‡ÎżÎč DNS ÎłÎčα Ï€ÏÎżÏƒÎžÎźÎșη ÎșαÎč σύΜΎΔση ÎșόΌÎČωΜ - + Loading addresses... Ίόρτωση ÎŽÎčΔυΞύΜσΔωΜ... @@ -3421,12 +3427,12 @@ This label turns red, if the priority is smaller than "medium". ΔΔΜ Î”ÎŻÎœÎ±Îč έγÎșυρη η ÎŽÎčΔύΞυΜση ÎŽÎčÎ±ÎŒÎ”ÏƒÎżÎ»Î±ÎČÎ·Ï„Îź: '%s' - + Unknown network specified in -onlynet: '%s' Î†ÎłÎœÏ‰ÏƒÏ„o ÎŽÎŻÎșÏ„Ï…Îż ÎżÏÎŻÎ¶Î”Ï„Î±Îč σΔ onlynet: '%s' - + Insufficient funds ΑΜΔπαρÎșές ÎșÎ”Ï†ÎŹÎ»Î±ÎčÎż @@ -3436,17 +3442,17 @@ This label turns red, if the priority is smaller than "medium". Ίόρτωση Î”Ï…ÏÎ”Ï„Î·ÏÎŻÎżÏ… ÎŒÏ€Î»ÎżÎș... - + Add a node to connect to and attempt to keep the connection open Î ÏÎżÏƒÎ­ÎžÎ”ÏƒÎ” έΜα ÎșόΌÎČÎż ÎłÎčα σύΜΎΔση ÎșαÎč Ï€ÏÎżÏƒÏ€ÎŹÎžÎ·ÏƒÎ” Μα ÎșÏÎ±Ï„ÎźÏƒÎ”Îčς τηΜ σύΜΎΔση Î±ÎœÎżÎčÏ‡Ï„Îź - + Loading wallet... Ίόρτωση Ï€ÎżÏÏ„ÎżÏ†ÎżÎ»ÎčÎżÏ... - + Cannot downgrade wallet ΔΔΜ ÎŒÏ€ÎżÏÏŽ Μα Ï…Ï€ÎżÎČÎ±ÎžÎŒÎŻÏƒÏ‰ Ï„Îż Ï€ÎżÏÏ„ÎżÏ†ÏŒÎ»Îč @@ -3456,22 +3462,22 @@ This label turns red, if the priority is smaller than "medium". ΔΔΜ ÎŒÏ€ÎżÏÏŽ Μα ÎłÏÎŹÏˆÏ‰ τηΜ Ï€ÏÎżÎ”Ï€ÎčÎ»Î”ÎłÎŒÎ­ÎœÎ· ÎŽÎčΔύΞυΜση - + Rescanning... Î‘ÎœÎŻÏ‡ÎœÎ”Ï…ÏƒÎ·... - + Done loading Η φόρτωση ολοÎșληρώΞηÎșΔ - + Error ÎŁÏ†ÎŹÎ»ÎŒÎ± - + This help message @@ -3496,12 +3502,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3511,7 +3517,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3521,22 +3527,22 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3546,22 +3552,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3656,6 +3662,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3716,6 +3732,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3781,11 +3802,6 @@ This label turns red, if the priority is smaller than "medium". Message - - - Messate Type - - Miner: @@ -3822,12 +3838,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3837,12 +3848,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3922,22 +3928,22 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3947,7 +3953,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3957,7 +3963,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3967,7 +3973,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3977,7 +3983,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3987,7 +3993,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -4002,7 +4008,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -4022,7 +4028,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -4032,7 +4038,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4082,12 +4088,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4102,12 +4128,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4127,17 +4153,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4147,22 +4173,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4172,10 +4198,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4192,17 +4223,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4212,7 +4243,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4227,22 +4258,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4262,17 +4293,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4282,47 +4313,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4354,12 +4385,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Î§ÏÎźÏƒÎ·: @@ -4369,7 +4400,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index 9c4b87b7c3..102f123a36 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Sign &message... - + &Overview &Overview @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O Quit application - + &Options... &Options... @@ -343,19 +343,11 @@ This product includes software developed by the OpenSSL Project for use in the O &Encrypt Wallet... &Encrypt Wallet... - - &Backup Wallet... - &Backup Wallet... - &Change Passphrase... &Change Passphrase... - - Backup wallet to another location - Backup wallet to another location - Change the passphrase used for wallet encryption @@ -377,12 +369,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Verify message... - + Wallet Wallet - + &Send &Send @@ -392,12 +384,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Receive - + &Show / Hide &Show / Hide - + &File &File @@ -407,12 +399,12 @@ This product includes software developed by the OpenSSL Project for use in the O &Settings - + &Help &Help - + Processed %n block(s) of transaction history. Processed %n block of transaction history. @@ -430,12 +422,12 @@ This product includes software developed by the OpenSSL Project for use in the O Up to date - + Gridcoin Gridcoin - + Send coins to a Gridcoin address Send coins to a Gridcoin address @@ -511,28 +503,42 @@ This product includes software developed by the OpenSSL Project for use in the O Show information about Gridcoin - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + %n second(s) ago %n second ago @@ -564,7 +570,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -579,7 +585,7 @@ Address: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -604,7 +610,7 @@ Address: %4 - + %n second(s) %n second @@ -636,7 +642,7 @@ Address: %4 - + &Voting @@ -646,7 +652,7 @@ Address: %4 - + &Diagnostics @@ -706,34 +712,29 @@ Address: %4 Export the data in the current tab to a file - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client Gridcoin client - + Catching up... Catching up... - + Last received block was generated %1. Last received block was generated %1. @@ -778,7 +779,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -788,19 +789,7 @@ Address: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -834,7 +823,7 @@ Address: %4 There was an error trying to save the wallet data to the new location. - + Sent transaction Sent transaction @@ -844,32 +833,12 @@ Address: %4 Incoming transaction - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Wallet is <b>encrypted</b> and currently <b>locked</b> - %1 second(s) ago - %1 second ago - - - %1 minute(s) ago - %1 minute ago - - - %1 hour(s) ago - %1 hour ago - - - %1 day(s) ago - %1 day ago - - - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -877,7 +846,7 @@ Address: %4 ClientModel - + Network Alert Network Alert @@ -1324,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1432,10 +1401,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Map port using &UPnP - - Proxy &IP: - Proxy &IP: - Pa&y transaction fee @@ -1774,6 +1739,14 @@ This label turns red, if the priority is smaller than "medium". out of sync + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1835,7 +1808,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1847,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1907,7 +1880,12 @@ This label turns red, if the priority is smaller than "medium". &Console - + + &Scraper + + + + &Network Traffic @@ -1962,7 +1940,7 @@ This label turns red, if the priority is smaller than "medium". Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - + %1 B @@ -1997,12 +1975,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2334,27 +2312,27 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: A&mount: - + Pay &To: Pay &To: - + &Label: &Label: - + Form Form - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2384,22 +2362,17 @@ This label turns red, if the priority is smaller than "medium". Remove this recipient - + Send Custom Message to a Gridcoin Recipient - + Message: Message: - - Add Attachment - - - - + Enter a label for this address to add it to your address book @@ -2654,22 +2627,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2788,10 +2786,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Information - Amount @@ -2821,12 +2815,7 @@ This label turns red, if the priority is smaller than "medium". This pane shows a detailed description of the transaction - - View Attachment - - - - + Execute Contract @@ -2835,21 +2824,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Date @@ -2897,7 +2876,37 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + Confirming (%1 of %2 recommended confirmations)<br> @@ -2922,7 +2931,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2942,32 +2951,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3164,7 +3153,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3308,7 +3297,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3341,7 +3330,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... Sending... @@ -3349,37 +3338,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Options: - + Specify data directory Specify data directory - + Connect to a node to retrieve peer addresses, and disconnect Connect to a node to retrieve peer addresses, and disconnect - + Specify your own public address Specify your own public address - + Accept command line and JSON-RPC commands Accept command line and JSON-RPC commands - + Run in the background as a daemon and accept commands Run in the background as a daemon and accept commands - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3389,12 +3378,12 @@ This label turns red, if the priority is smaller than "medium". - + Usage: Usage: - + List commands List commands @@ -3404,7 +3393,7 @@ This label turns red, if the priority is smaller than "medium". Get help for a command - + Set database cache size in megabytes (default: 25) Set database cache size in megabytes (default: 25) @@ -3414,12 +3403,12 @@ This label turns red, if the priority is smaller than "medium". Set database disk log size in megabytes (default: 100) - + Maintain at most <n> connections to peers (default: 125) Maintain at most <n> connections to peers (default: 125) - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -3518,6 +3507,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Mining @@ -3588,6 +3587,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Error obtaining next project. Error 06172014. @@ -3678,11 +3682,6 @@ This label turns red, if the priority is smaller than "medium". Message - - - Messate Type - - Miner: @@ -3724,12 +3723,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3739,12 +3733,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Please wait for new user wizard to start... @@ -3804,17 +3793,17 @@ This label turns red, if the priority is smaller than "medium". Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Use the test network Use the test network - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3839,12 +3828,12 @@ This label turns red, if the priority is smaller than "medium". Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error: Transaction creation failed - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. @@ -3854,12 +3843,12 @@ This label turns red, if the priority is smaller than "medium". Block creation options: - + Failed to listen on any port. Use -listen=0 if you want this. Failed to listen on any port. Use -listen=0 if you want this. - + Specify wallet file (within data directory) Specify wallet file (within data directory) @@ -3884,7 +3873,7 @@ This label turns red, if the priority is smaller than "medium". Password for JSON-RPC connections - + Execute command when the best block changes (%s in cmd is replaced by block hash) Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -3894,7 +3883,7 @@ This label turns red, if the priority is smaller than "medium". Allow DNS lookups for -addnode, -seednode and -connect - + Title @@ -3904,7 +3893,7 @@ This label turns red, if the priority is smaller than "medium". To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3928,22 +3917,22 @@ If the file does not exist, create it with owner-readable-only file permissions. If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version Gridcoin version - + Send command to -server or gridcoind - + Gridcoin Gridcoin - + This help message This help message @@ -3958,12 +3947,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Specify connection timeout in milliseconds (default: 5000) - + Connect through socks proxy Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Select the version of socks proxy to use (4-5, default: 5) @@ -3993,45 +3982,37 @@ If the file does not exist, create it with owner-readable-only file permissions. Use proxy to reach tor hidden services (default: same as -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Listen for connections on <port> (default: 15714 or testnet: 25714) {32749 ?} {32748)?} - + Connect only to the specified node(s) Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Discover own IP address (default: 1 when listening and no -externalip) - Find peers using internet relay chat (default: 0) - Find peers using internet relay chat (default: 1) {0)?} - - - + Find peers using DNS lookup (default: 1) Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - Sync checkpoints policy (default: strict) - Sync checkpoints policy (default: strict) - - - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -4041,7 +4022,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Use UPnP to map the listening port (default: 1 when listening) @@ -4051,12 +4032,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Use UPnP to map the listening port (default: 0) - + Fee per KB to add to transactions you send Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -4082,7 +4063,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + Output extra debugging information. Implies all other -debug* options Output extra debugging information. Implies all other -debug* options @@ -4091,6 +4087,11 @@ If the file does not exist, create it with owner-readable-only file permissions. Output extra network debugging information Output extra network debugging information + + + POR Blocks Verified + + Prepend debug output with timestamp @@ -4102,12 +4103,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Send trace/debug info to debugger - + Allow JSON-RPC connections from specified IP address Allow JSON-RPC connections from specified IP address - + Send commands to node running on <ip> (default: 127.0.0.1) Send commands to node running on <ip> (default: 127.0.0.1) @@ -4117,7 +4118,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4127,7 +4128,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format Upgrade wallet to latest format @@ -4142,7 +4143,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Rescan the block chain for missing wallet transactions - + How many blocks to check at startup (default: 2500, 0 = all) How many blocks to check at startup (default: 2500, 0 = all) @@ -4157,7 +4158,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Imports blocks from external blk000?.dat file - + Set minimum block size in bytes (default: 0) Set minimum block size in bytes (default: 0) @@ -4167,12 +4168,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Set maximum block size in bytes (default: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4192,11 +4193,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Server private key (default: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Invalid amount for -paytxfee=<amount>: '%s' @@ -4211,27 +4208,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. - + Weight @@ -4241,12 +4238,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i Unknown -socks proxy version requested: %i - + Invalid -proxy address: '%s' Invalid -proxy address: '%s' @@ -4256,7 +4253,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Cannot resolve -bind address: '%s' @@ -4266,7 +4263,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4286,10 +4283,15 @@ If the file does not exist, create it with owner-readable-only file permissions. Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4301,7 +4303,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Error loading wallet.dat @@ -4326,17 +4328,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Error: could not start node - + Unable to bind to %s on this computer. Gridcoin is probably already running. Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4346,41 +4348,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Sending... Sending... - + Invalid amount Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Warning: This version is obsolete, upgrade required! - - - + Warning: Disk space is low! Warning: Disk space is low! - + Unknown network specified in -onlynet: '%s' Unknown network specified in -onlynet: '%s' - + Insufficient funds Insufficient funds @@ -4390,17 +4388,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Loading block index... - + Add a node to connect to and attempt to keep the connection open Add a node to connect to and attempt to keep the connection open - + Loading wallet... Loading wallet... - + Cannot downgrade wallet Cannot downgrade wallet @@ -4410,17 +4408,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Cannot write default address - + Rescanning... Rescanning... - + Done loading Done loading - + Error Error diff --git a/src/qt/locale/bitcoin_eo.ts b/src/qt/locale/bitcoin_eo.ts index 01e6d201fc..dcbf579687 100644 --- a/src/qt/locale/bitcoin_eo.ts +++ b/src/qt/locale/bitcoin_eo.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Tio ?i estas eksperimenta programo. - -Eldonita la? la permesilo MIT/X11. Vidu la kunan dosieron COPYING a? http://www.opensource.org/licenses/mit-license.php. - -Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo en la "OpenSSL Toolkit" (http://www.openssl.org/) kaj ?ifrajn erojn kreitajn de Eric Young (eay@cryptsoft.com) kaj UPnP-erojn kreitajn de Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo BitcoinGUI - + Sign &message... Subskribi &mesaĝon... - + &Overview &Superrigardo @@ -414,7 +400,7 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo Eliri la aplikaÄ”on - + &Options... &Agordoj... @@ -428,19 +414,11 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo Encrypt or decrypt wallet - - &Backup Wallet... - &Krei sekurkopion de la monujo... - &Change Passphrase... Ŝanĝi &Pasfrazon... - - Backup wallet to another location - Krei alilokan sekurkopion de monujo - Change the passphrase used for wallet encryption @@ -492,7 +470,7 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo &Kontroli mesaĝon... - + Wallet Monujo @@ -502,7 +480,7 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo - + &Send &Sendi @@ -522,28 +500,12 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -553,7 +515,7 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo - + &Diagnostics @@ -583,14 +545,14 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo - + [testnet] [testnet] - + Gridcoin client @@ -608,7 +570,7 @@ Tiu ?i produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo - + Last received block was generated %1. @@ -668,7 +630,7 @@ Adreso: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -715,7 +677,7 @@ Adreso: %4 - + %n second(s) @@ -757,7 +719,37 @@ Adreso: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Dosiero @@ -772,17 +764,12 @@ Adreso: %4 - - &Advanced - - - - + &Help &Helpo - + %n second(s) ago @@ -819,12 +806,12 @@ Adreso: %4 Ĝisdata - + Catching up... Ĝisdatigante... - + Sent transaction Sendita transakcio @@ -834,19 +821,7 @@ Adreso: %4 Envenanta transakcio - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Dato: %1 -Sumo: %2 -Tipo: %3 -Adreso: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -857,17 +832,13 @@ Adreso: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Monujo estas <b>ĉifrita</b> kaj aktuale <b>malƝlosita</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Monujo estas <b>ĉifrita</b> kaj aktuale <b>Ɲlosita</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -875,7 +846,7 @@ Adreso: %4 ClientModel - + Network Alert Reta Averto @@ -957,10 +928,6 @@ Adreso: %4 (un)select all (mal)elekti ĉion - - List mode - Listreĝimo - Amount @@ -1326,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1539,10 +1506,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Mapigi pordon per &UPnP - - Proxy &IP: - Prokurila &IP: - &Port: @@ -1776,6 +1739,14 @@ This label turns red, if the priority is smaller than "medium". nesinkronigita + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1837,7 +1808,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1849,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A neaplikebla @@ -1929,7 +1900,12 @@ This label turns red, if the priority is smaller than "medium". El: - + + &Scraper + + + + Debug log file Sencimiga protokoldosiero @@ -1959,7 +1935,7 @@ This label turns red, if the priority is smaller than "medium". Tajpu <b>help</b> por superrigardo de la disponeblaj komandoj. - + %1 B %1 B @@ -1994,12 +1970,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2069,7 +2045,7 @@ This label turns red, if the priority is smaller than "medium". Nomo de kliento - + Welcome to the Gridcoin RPC console! @@ -2336,22 +2312,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Sumo: - + Pay &To: &Ricevonto: - + &Label: &Etikedo: - + Alt+A Alt+A @@ -2371,12 +2347,12 @@ This label turns red, if the priority is smaller than "medium". Mesaĝo: - + Form Formularo - + Enter a label for this address to add it to your address book Tajpu etikedon por tiu ?i adreso kaj aldonu ?in al via adresaro @@ -2397,17 +2373,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2656,26 +2627,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Fonto - Generated - Kreita + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De @@ -2789,27 +2781,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - Transakcia ID - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informoj - - - Transaction - Transakcio - - - Inputs - Enigoj - Amount @@ -2839,12 +2815,7 @@ This label turns red, if the priority is smaller than "medium". Tiu ĉi panelo montras detalan priskribon de la transakcio - - View Attachment - - - - + Execute Contract @@ -2853,21 +2824,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Fermi - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Dato @@ -2940,7 +2901,7 @@ This label turns red, if the priority is smaller than "medium". Kreita sed ne akceptita - + Received with Ricevita kun @@ -2960,32 +2921,42 @@ This label turns red, if the priority is smaller than "medium". Pago al vi mem - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) neaplikebla - + Transaction status. Hover over this field to show number of confirmations. Transakcia stato. ?vebi super tiu ?i kampo por montri la nombron de konfirmoj. @@ -3182,7 +3153,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3326,7 +3297,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3359,7 +3330,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3367,37 +3338,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Agordoj: - + Specify data directory Specifi dosieron por datumoj - + Connect to a node to retrieve peer addresses, and disconnect Konekti al nodo por ricevi adresojn de samtavolanoj, kaj malkonekti - + Specify your own public address Specifi vian propran publikan adreson - + Accept command line and JSON-RPC commands Akcepti komandojn JSON-RPC kaj el komandlinio - + Run in the background as a daemon and accept commands Ruli fone kiel demono kaj akcepti komandojn - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Plenumi komandon kiam monuja transakcio ŝanĝiĝas (%s en cmd anstataŭiĝas per TxID) @@ -3407,12 +3378,12 @@ This label turns red, if the priority is smaller than "medium". Blok-kreaj agordaĵoj: - + Failed to listen on any port. Use -listen=0 if you want this. Ne sukcesis aŭskulti ajnan pordon. Uzu -listen=0 se tion vi volas. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3442,7 +3413,7 @@ This label turns red, if the priority is smaller than "medium". Pasvorto por konektoj JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Plenumi komandon kiam plej bona bloko ŝanĝiĝas (%s en cmd anstataŭiĝas per bloka haketaĵo) @@ -3452,7 +3423,7 @@ This label turns red, if the priority is smaller than "medium". Permesi DNS-elserĉojn por -addnote, -seednote kaj -connect - + Loading addresses... Ɯarĝante adresojn... @@ -3462,12 +3433,12 @@ This label turns red, if the priority is smaller than "medium". Nevalid adreso -proxy: '%s' - + Unknown network specified in -onlynet: '%s' Nekonata reto specifita en -onlynet: '%s' - + Insufficient funds Nesufiĉa mono @@ -3477,17 +3448,17 @@ This label turns red, if the priority is smaller than "medium". Ɯarĝante blok-indekson... - + Add a node to connect to and attempt to keep the connection open Aldoni nodon por alkonekti kaj provi daŭrigi la malferman konekton - + Loading wallet... Ɯargado de monujo... - + Cannot downgrade wallet Ne eblas malpromocii monujon @@ -3497,27 +3468,27 @@ This label turns red, if the priority is smaller than "medium". Ne eblas skribi defaŭltan adreson - + Rescanning... Reskanado... - + Done loading Ɯargado finiĝis - + Error Eraro - + To use the %s option Por uzi la agordon %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3641,6 +3612,16 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3701,6 +3682,11 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& ERROR + + + Entire balance reserved + + Expires @@ -3761,11 +3747,6 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Message Mesa?o - - - Messate Type - - Miner: @@ -3802,12 +3783,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - - No coins; - - - - + Offline; @@ -3817,12 +3793,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3902,7 +3873,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + List commands Listigi komandojn @@ -3917,7 +3888,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + This help message Tiu ?i helpmesa?o @@ -3942,12 +3913,12 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Specifi konektan tempolimon je milisekundoj (defa?lte: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3957,7 +3928,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3967,22 +3938,22 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Subteni maksimume <n> konektojn al samtavolanoj (defa?lte: 125) - + Connect only to the specified node(s) Konekti nur al specifita(j) nodo(j) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Konekti nur la nodoj en la reto <net> (IPv4, IPv6 a? Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Malkovri la propran IP-adreson (defa?lte: 1 dum a?skultado sen -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Akcepti konektojn el ekstere (defa?lte: 1 se ne estas -proxy nek -connect) @@ -3992,27 +3963,27 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Sojlo por malkonekti misagantajn samtavolanojn (defa?lte: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Nombro da sekundoj por rifuzi rekonekton de misagantaj samtavolanoj (defa?lte: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksimuma po riceva bufro por konektoj, <n>*1000 bajtoj (defa?lte: 5000) @@ -4022,7 +3993,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Maksimuma po senda bufro por konektoj, <n>*1000 bajtoj (defa?lte: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Uzi UPnP por mapi la a?skultan pordon (defa?lte: 1 dum a?skultado) @@ -4032,22 +4003,22 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Uzi UPnP por mapi la a?skultan pordon (defa?lte: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Uzi la test-reton - + Output extra debugging information. Implies all other -debug* options @@ -4057,7 +4028,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Prepend debug output with timestamp @@ -4067,7 +4038,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4077,7 +4048,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Permesi konektojn JSON-RPC de specifa IP-adreso - + Send commands to node running on <ip> (default: 127.0.0.1) Sendi komandon al nodo ?e <ip> (defa?lte: 127.0.0.1) @@ -4087,7 +4058,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4097,7 +4068,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Upgrade wallet to latest format ?isdatigi monujon al plej lasta formato @@ -4112,7 +4083,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Reskani la blok?enon por mankantaj monujaj transakcioj - + Attempt to recover private keys from a corrupt wallet.dat Provo ripari privatajn ?losilojn el difektita wallet.dat @@ -4132,7 +4103,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Boinc Mining @@ -4142,7 +4113,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Error obtaining next project. Error 06172014. @@ -4192,12 +4163,32 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4212,12 +4203,12 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL-agorda?oj: (vidu la vikio de Bitmono por instrukcioj pri agordado de SSL) @@ -4237,17 +4228,17 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Dosiero de servila privata ?losilo (defa?lte: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Nevalida sumo por -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Averto: -paytxfee estas agordita per tre alta valoro! Tio estas la krompago, kion vi pagos se vi sendas la transakcion. - + Invalid amount for -mininput=<amount>: '%s' @@ -4257,22 +4248,22 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4282,10 +4273,15 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Averto: via wallet.dat estas difektita, sed la datumoj sukcese savi?is! La originala wallet.dat estas nun konservita kiel wallet.{timestamp}.bak en %s; se via saldo a? transakcioj estas mal?ustaj vi devus resta?ri per alia sekurkopio. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4302,17 +4298,17 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& wallet.dat estas difektita, riparo malsukcesis - + Unknown -socks proxy version requested: %i Nekonata versio de -socks petita: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Ne eblas trovi la adreson -bind: '%s' @@ -4322,7 +4318,7 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Ne eblas trovi la adreson -externalip: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4337,22 +4333,22 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& Eraro dum ?argado de wallet.dat: monujo difektita - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Averto: okazis eraro dum lego de wallet.dat! ?iuj ?losiloj sukcese legi?is, sed la transakciaj datumoj a? la adresaro eble mankas a? mal?ustas. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Eraro dum ?argado de wallet.dat @@ -4372,17 +4368,17 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Ne eblis bindi al %s en tiu ?i komputilo (bind resendis eraron %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4392,41 +4388,37 @@ Se la dosiero ne ekzistas, kreu ?in kun permeso "nur posedanto rajtas legi& - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Nevalida sumo - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Averto: tiu ?i versio estas eksdata. Vi bezonas ?isdatigon! - - - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index 73768ba89a..3381ad82c2 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -23,23 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Este es un software experimental. - -Distribuido bajo la licencia MIT/X11, vea el archivo adjunto -COPYING o http://www.opensource.org/licenses/mit-license.php. - -Este producto incluye software desarrollado por OpenSSL Project para su uso en -el OpenSSL Toolkit (http://www.openssl.org/) y software criptogrĂĄfico escrito por -Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - AddressBookPage @@ -316,12 +299,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. BitcoinGUI - + Sign &message... Firmar &mensaje... - + &Overview &Vista general @@ -418,7 +401,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Salir de la aplicaciĂłn - + &Options... &Opciones... @@ -433,7 +416,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Cifrar o descifrar el monedero - + %n second(s) ago hace %n segundo @@ -465,7 +448,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - + Date: %1 Amount: %2 Type: %3 @@ -480,7 +463,7 @@ DirecciĂłn: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -490,17 +473,39 @@ DirecciĂłn: %4 - &Backup Wallet... - &Guardar copia del monedero... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Cambiar la contraseña
 + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + - Backup wallet to another location - Copia de seguridad del monedero en otra ubicaciĂłn + + &Change Passphrase... + &Cambiar la contraseña
 @@ -553,7 +558,7 @@ DirecciĂłn: %4 &Verificar mensaje... - + Wallet Monedero @@ -563,7 +568,7 @@ DirecciĂłn: %4 Gridcoin - + &Send &Enviar @@ -572,30 +577,6 @@ DirecciĂłn: %4 &Receive &Recibir - - &Rebuild Block Chain - &Reconstruir la cadena de bloques - - - Rebuild Block Chain - Reconstruir la cadena de bloques - - - &Download Blocks - &Descargar Bloques - - - Download Blocks - Descargar Bloques - - - &Upgrade Client - &Actualizar cliente - - - Upgrade Client - Actualizar cliente - &About Gridcoin @@ -607,36 +588,12 @@ DirecciĂłn: %4 Mostrar informaciĂłn sobre Gridcoin - - &Neural Network - &Red Neural - - - - Neural Network - Neural Network - - - &Advanced Configuration - &Configuracion Avanzada - - - Advanced Configuration - Configuracion avanzada - - - - &New User Wizard - &Nuevo Asistente de Usuario - - - - + New User Wizard Nuevo Asistente de Usuario - + &Voting &VotaciĂłn @@ -646,15 +603,7 @@ DirecciĂłn: %4 VotaciĂłn - &Foundation - &FundaciĂłn - - - Foundation - FundaciĂłn - - - + &Diagnostics &DiagnĂłstico @@ -663,14 +612,6 @@ DirecciĂłn: %4 Diagnostics DiagnĂłstico - - FA&Q - &PREGUNTAS MÁS FRECUENTES - - - Interactive FAQ - Preguntas frecuentes interactivas - Modify configuration options for Gridcoin @@ -692,14 +633,14 @@ DirecciĂłn: %4 - + [testnet] [testnet] - + Gridcoin client Cliente Gridcoin @@ -709,23 +650,7 @@ DirecciĂłn: %4 %1 conexiĂłn activa a la red Gridcoin - %1 second(s) ago - hace %1 segundo - - - %1 minute(s) ago - hace %1 minuto - - - %1 hour(s) ago - hace %1 hora - - - %1 day(s) ago - hace %1 dia - - - + Last received block was generated %1. Último bloque recibido se generĂł en %1. @@ -772,19 +697,7 @@ DirecciĂłn: %4 ÂĄAtenciĂłn! - Error de ruta de Boinc! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Fecha: %1 -Cantidad: %2 -Tipo: %3 -DirecciĂłn: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI no se puede analizar! Esto puede ser causado por una direcciĂłn de Gridcoin no vĂĄlida o parĂĄmetros de URI malformados. @@ -843,7 +756,7 @@ DirecciĂłn: %4 - + %n second(s) %n segundo @@ -875,39 +788,7 @@ DirecciĂłn: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - Staking.<br>Su peso es %1<br>El peso de la red es %2<br><b>Estimado</b> tiempo para ganar recompensa es %3. %4 - - - Not staking because wallet is locked - No esta "Staking" porque monedera estĂĄ bloqueada - - - Not staking because wallet is offline - No esta "Staking" porque monedera estĂĄ desconectada - - - Not staking because wallet is syncing - No esta "Staking" porque monedera estĂĄ sincronizando - - - Not staking because you don't have mature coins and stake weight is too low. - No apostar porque no tienes monedas maduras y el peso de estaca es demasiado bajo. - - - Not staking because you don't have mature coins - No esta "Staking" ya que no tiene monedas maduras - - - Searching for mature coins... Please wait - Buscando monedas maduras ... Por favor, espere - - - Not staking - No estĂĄs "Staking" - - - + &File &Archivo @@ -922,17 +803,12 @@ DirecciĂłn: %4 - - &Advanced - &Avanzado - - - + &Help &Ayuda - + Processed %n block(s) of transaction history. %n bloque procesado del historial de transacciones. @@ -945,12 +821,12 @@ DirecciĂłn: %4 Actualizado - + Catching up... Actualizando... - + Sent transaction TransacciĂłn enviada @@ -960,16 +836,12 @@ DirecciĂłn: %4 TransacciĂłn entrante - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - El monedero estĂĄ <b>cifrado</b> y actualmente <b>desbloqueado</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> El monedero estĂĄ <b>cifrado</b> y actualmente <b>bloqueado</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Se ha producido un error fatal. Gridcoin ya no puede continuar de forma segura y cerrarĂĄ. @@ -977,7 +849,7 @@ DirecciĂłn: %4 ClientModel - + Network Alert Alerta de red @@ -1059,10 +931,6 @@ DirecciĂłn: %4 (un)select all (des)marcar todos - - List mode - Modo lista - Amount @@ -1442,7 +1310,7 @@ Esto significa que se requiere una cuota de al menos %2. NewPollDialog - + Create Poll Crear encuesta @@ -1655,10 +1523,6 @@ Esto significa que se requiere una cuota de al menos %2. Map port using &UPnP Mapear el puerto mediante &UPnP - - Proxy &IP: - DirecciĂłn &IP del proxy: - &Port: @@ -1892,6 +1756,14 @@ Esto significa que se requiere una cuota de al menos %2. desincronizado + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1953,7 +1825,7 @@ Esto significa que se requiere una cuota de al menos %2. RPCConsole - + @@ -1965,7 +1837,7 @@ Esto significa que se requiere una cuota de al menos %2. - + N/A N/D @@ -2045,7 +1917,12 @@ Esto significa que se requiere una cuota de al menos %2. Saliente: - + + &Scraper + + + + Debug log file Archivo de registro de depuraciĂłn @@ -2080,7 +1957,7 @@ Esto significa que se requiere una cuota de al menos %2. Escriba <b>help</b> para ver un resumen de los comandos disponibles. - + %1 B %1 B @@ -2115,12 +1992,12 @@ Esto significa que se requiere una cuota de al menos %2. %1 h %2 m - + Gridcoin - Debug Console Gridcoin - Consola de depuraciĂłn - + Boost version VersiĂłn de Boost @@ -2452,22 +2329,22 @@ Esto significa que se requiere una cuota de al menos %2. SendCoinsEntry - + A&mount: Ca&ntidad: - + Pay &To: &Pagar a: - + &Label: &Etiqueta: - + Alt+A Alt+A @@ -2493,12 +2370,12 @@ Esto significa que se requiere una cuota de al menos %2. Introduzca una etiqueta para esta direcciĂłn para añadirla a su lista de direcciones. - + Form Formulario - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) La direcciĂłn a la que se quiere enviar el pago (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2513,22 +2390,12 @@ Esto significa que se requiere una cuota de al menos %2. Elimina este beneficiario - + Send Custom Message to a Gridcoin Recipient Enviar mensaje personalizado a un destinatario de Gridcoin - Track Coins - Rastrear monedas - - - - - Add Attachment - Añadir archivo adjunto - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Introduzca una direcciĂłn de Gridcoin (p. ej. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2738,25 +2605,13 @@ Esto significa que se requiere una cuota de al menos %2. en conflicto - Block Type - Tipo de bloque - - - Block Number - NĂșmero de bloque - - - + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. Gridcoin generada monedas deben madurar 110 bloques antes de que se pueden gastar. Cuando se genera este bloque, se transmitiĂł a la red para ser añadido a la cadena de bloque. Si no consigue entrar en la cadena, su estado cambia a "no aceptado" y no es gastar. Ocasionalmente esto puede ocurrir si otro nodo genera un bloque en unos segundos del tuyo. - Information - InformaciĂłn - - - + %1/offline %1/sin conexiĂłn @@ -2795,26 +2650,47 @@ Esto significa que se requiere una cuota de al menos %2. - + Source Fuente - Generated - Generado + + Generated in CoinBase + + + + + MINED - POS + - - Generated in CoinBase + + MINED - POR - - Generated, PoS + + MINED - ORPHANED - + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Desde @@ -2928,18 +2804,6 @@ Esto significa que se requiere una cuota de al menos %2. Transaction Inputs - - Transaction ID - Identificador de transacciĂłn (ID) - - - Transaction - TransacciĂłn - - - Inputs - entradas - Amount @@ -2969,12 +2833,7 @@ Esto significa que se requiere una cuota de al menos %2. Esta ventana muestra informaciĂłn detallada sobre la transacciĂłn - - View Attachment - Ver adjunto - - - + Execute Contract Ejecutar contrato @@ -2983,21 +2842,11 @@ Esto significa que se requiere una cuota de al menos %2. C&lose C&errar - - - Gridcoin Documents - Gridcoin Documentos - - - - Document cannot be found on P2P server. - No se puede encontrar el documento en el servidor P2P. - TransactionTableModel - + Date Fecha @@ -3032,32 +2881,12 @@ Esto significa que se requiere una cuota de al menos %2. Este bloque no fue recibido por otros nodos<br>y probablemente no serĂĄ aceptada! - - Mined - DPOR - Minado - DPOR - - - - Minted - (Local) DPOR - Picado - (Local) DPOR - - - - Mined - PoR - Minado - PoR - - - - Mined - Interest - Mined - InterĂ©s - - - + Destination address of transaction. DirecciĂłn de destino de la transacciĂłn. - + Open for %n more block(s) Abrir para %n bloque mĂĄs @@ -3095,7 +2924,7 @@ Esto significa que se requiere una cuota de al menos %2. Generado pero no aceptado - + Received with Recibido con @@ -3115,12 +2944,42 @@ Esto significa que se requiere una cuota de al menos %2. Pago proprio - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (nd) - + Transaction status. Hover over this field to show number of confirmations. Estado de transacciĂłn. Pasa el ratĂłn sobre este campo para ver el nĂșmero de confirmaciones. @@ -3309,29 +3168,10 @@ Esto significa que se requiere una cuota de al menos %2. para - - UpgradeDialog - - Gridcoin Upgrading Facility - InstalaciĂłn de mejora de Gridcoin - - - Retry Download - Retry Descargar - - - Upgrade - Mejorar - - - Hide - Esconder - - VotingChartDialog - + Poll Results Resultados de la Encuesta @@ -3422,15 +3262,6 @@ Esto significa que se requiere una cuota de al menos %2. Share Type Tipo de la parte - - Question - Crear encuesta - Create Poll - - - Answers - Respuestas - # Voters @@ -3441,10 +3272,6 @@ Esto significa que se requiere una cuota de al menos %2. Total Shares Total acciones - - URL - URL - Best Answer @@ -3470,10 +3297,6 @@ Esto significa que se requiere una cuota de al menos %2. Share Type. Tipo de participaciĂłn. - - Question. - Pregunta. - Total Participants. @@ -3484,10 +3307,6 @@ Esto significa que se requiere una cuota de al menos %2. Total Shares. Total acciones. - - URL. - URL. - Best Answer. @@ -3497,7 +3316,7 @@ Esto significa que se requiere una cuota de al menos %2. VotingVoteDialog - + PlaceVote PlaceVote @@ -3530,7 +3349,7 @@ Esto significa que se requiere una cuota de al menos %2. WalletModel - + Sending... Enviando... @@ -3538,21 +3357,17 @@ Esto significa que se requiere una cuota de al menos %2. bitcoin-core - + Options: Opciones: - + This help message Este mensaje de ayuda - - Specify configuration file (default: gridcoin.conf) - Especifica un archivo de configuraciĂłn (por defecto: Gridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -3584,12 +3399,12 @@ Esto significa que se requiere una cuota de al menos %2. Especificar el tiempo mĂĄximo de conexiĂłn en milisegundos (predeterminado: 5000) - + Connect through socks proxy Conecte a travĂ©s del socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Selecciona la versiĂłn de socks proxy a usar (4-5, por defecto: 5) @@ -3599,7 +3414,7 @@ Esto significa que se requiere una cuota de al menos %2. Usar proxy para alcanzar a ver los servicios ocultos (por defecto: los mismos que -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Escuche las conexiones en <puerto> (por defecto: 32749 o testnet: 32748) @@ -3610,7 +3425,7 @@ Esto significa que se requiere una cuota de al menos %2. Mantener como mĂĄximo <n> conexiones a pares (predeterminado: 125) - + Connect only to the specified node(s) Conectar sĂłlo a los nodos (o nodo) especificados @@ -3620,26 +3435,22 @@ Esto significa que se requiere una cuota de al menos %2. Conectar a un nodo para obtener direcciones de pares y desconectar - + Specify your own public address Especifique su propia direcciĂłn pĂșblica - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Conectarse solo a nodos de la red <net> (IPv4, IPv6 o Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descubrir direcciĂłn IP propia (predeterminado: 1 al escuchar sin -externalip) - Find peers using internet relay chat (default: 0) - Encontrar pares usando IRC (por defecto:1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect) @@ -3649,26 +3460,22 @@ Esto significa que se requiere una cuota de al menos %2. Enlazar a la direcciĂłn dada. Utilice la notaciĂłn [host]:puerto para IPv6 - + Find peers using DNS lookup (default: 1) Encontrar pares usando la bĂșsqueda de DNS (por defecto: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sincronizar el tiempo con otros nodos. Desactivar si el tiempo en su sistema es preciso, por ejemplo si usa sincronizaciĂłn con NTP (por defecto: 1) - Sync checkpoints policy (default: strict) - PolĂ­tica de puntos de control de sincronizaciĂłn (por defecto: estricta) - - - + Threshold for disconnecting misbehaving peers (default: 100) Umbral para la desconexiĂłn de pares con mal comportamiento (predeterminado: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) NĂșmero de segundos en que se evita la reconexiĂłn de pares con mal comportamiento (predeterminado: 86400) @@ -3763,6 +3570,16 @@ Esto significa que se requiere una cuota de al menos %2. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3823,6 +3640,11 @@ Esto significa que se requiere una cuota de al menos %2. ERROR + + + Entire balance reserved + + Expires @@ -3888,11 +3710,6 @@ Esto significa que se requiere una cuota de al menos %2. Message Mensaje - - - Messate Type - - Miner: @@ -3929,12 +3746,7 @@ Esto significa que se requiere una cuota de al menos %2. - - No coins; - - - - + Offline; @@ -3944,12 +3756,7 @@ Esto significa que se requiere una cuota de al menos %2. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4029,12 +3836,12 @@ Esto significa que se requiere una cuota de al menos %2. Usar UPnP para asignar el puerto de escucha (predeterminado: 0) - + Fee per KB to add to transactions you send ComisiĂłn por KB a añadir a las transacciones que envĂ­a - + When creating transactions, ignore inputs with value less than this (default: 0.01) Al crear transacciones, ignorar las entradas con valor inferior a esta (por defecto: 0.01) @@ -4045,13 +3852,13 @@ Esto significa que se requiere una cuota de al menos %2. - + Use the test network Usar la red de pruebas - + Output extra debugging information. Implies all other -debug* options Salida de informaciĂłn de depuraciĂłn extra. Implica todas las opciones -debug* de depuraciĂłn @@ -4061,7 +3868,7 @@ Esto significa que se requiere una cuota de al menos %2. Salida extra de informaciĂłn de depuraciĂłn de red - + Prepend debug output with timestamp Prefijar salida de depuraciĂłn con marca de tiempo @@ -4071,7 +3878,7 @@ Esto significa que se requiere una cuota de al menos %2. Enviar informaciĂłn de rastreo / depurado al depurador - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Escuchar conexiones JSON-RPC en <port> (predeterminado: 15715 o testnet: 25715) @@ -4082,7 +3889,7 @@ Esto significa que se requiere una cuota de al menos %2. - + Send commands to node running on <ip> (default: 127.0.0.1) Enviar comando al nodo situado en <ip> (predeterminado: 127.0.0.1) @@ -4093,7 +3900,7 @@ Esto significa que se requiere una cuota de al menos %2. Requerir confirmaciones para cambio (por defecto: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Exigir a los scripts de transacciĂłn que usen los operadores PUSH canĂłnicos (por defecto: 1) @@ -4103,7 +3910,7 @@ Esto significa que se requiere una cuota de al menos %2. Ejecutar comando cuando una alerta relevante sea recibida (%s en la linea de comandos es reemplazado por un mensaje) - + Upgrade wallet to latest format Actualizar el monedero al Ășltimo formato @@ -4119,7 +3926,7 @@ Esto significa que se requiere una cuota de al menos %2. Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas - + Attempt to recover private keys from a corrupt wallet.dat Intento de recuperar claves privadas de un wallet.dat corrupto @@ -4139,7 +3946,7 @@ Esto significa que se requiere una cuota de al menos %2. - + Boinc Mining @@ -4149,7 +3956,7 @@ Esto significa que se requiere una cuota de al menos %2. - + Error obtaining next project. Error 06172014. @@ -4199,12 +4006,32 @@ Esto significa que se requiere una cuota de al menos %2. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4219,12 +4046,12 @@ Esto significa que se requiere una cuota de al menos %2. Establecer el tamaño mĂĄximo de bloque en bytes (por defecto: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Establecer el tamaño mĂĄximo de las transacciones alta-prioridad/baja-comisiĂłn en bytes (por defecto: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuraciĂłn SSL) @@ -4247,21 +4074,17 @@ Esto significa que se requiere una cuota de al menos %2. - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifras aceptables: (por defecto: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Cantidad invĂĄlida para -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Aviso: ÂĄ-paytxfee tiene un valor muy alto! Esta es la comisiĂłn que pagarĂĄ si envĂ­a una transacciĂłn. - + Invalid amount for -mininput=<amount>: '%s' Cantidad no vĂĄlida para -mininput=<amount>: '%s' @@ -4271,22 +4094,22 @@ Esto significa que se requiere una cuota de al menos %2. Error al comprobar la sanidad de inicializaciĂłn. Gridcoin se estĂĄ cerrando. - + Wallet %s resides outside data directory %s. El monedero %s reside fuera del directorio de datos %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. No se puede obtener un bloqueo en el directorio de datos %s. Gridcoin probablemente ya estĂ© en funcionamiento. - + Verifying database integrity... Verificando la integridad de la base de datos... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Error al inicializar el entorno de base de datos %s! Para recuperar, HAGA UNA COPIA DE SEGURIDAD DEL DIRECTORIO, a continuaciĂłn, elimine todo de ella excepto el archivo wallet.dat. @@ -4296,10 +4119,15 @@ Esto significa que se requiere una cuota de al menos %2. Aviso: ÂĄRecuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberĂĄ restaurar una copia de seguridad. - + Vote Votar + + + Waiting for coins to mature + + Wallet locked; @@ -4316,17 +4144,17 @@ Esto significa que se requiere una cuota de al menos %2. wallet.dat corrupto, ha fallado la recuperaciĂłn - + Unknown -socks proxy version requested: %i Solicitada versiĂłn de proxy -socks desconocida: %i - + Invalid -tor address: '%s' DirecciĂłn -tor invĂĄlida: '%s' - + Cannot resolve -bind address: '%s' No se puede resolver la direcciĂłn de -bind: '%s' @@ -4336,15 +4164,10 @@ Esto significa que se requiere una cuota de al menos %2. No se puede resolver la direcciĂłn de -externalip: '%s' - + Invalid amount for -reservebalance=<amount> Cantidad no vĂĄlida para -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - ÂżNo se puede firmar el punto de control? - Error loading blkindex.dat @@ -4356,22 +4179,22 @@ Esto significa que se requiere una cuota de al menos %2. Error al cargar wallet.dat: el monedero estĂĄ dañado - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Aviso: ÂĄError al leer wallet.dat! Todas las claves se han leĂ­do correctamente, pero podrĂ­an faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Error cargando wallet.dat: El monedero requiere una nueva versiĂłn de Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete El monedero necesita ser reescrito: reinicie Gridcoin para completar - + Error loading wallet.dat Error al cargar wallet.dat @@ -4391,17 +4214,17 @@ Esto significa que se requiere una cuota de al menos %2. Error: no se pudo iniciar el nodo - + Unable to bind to %s on this computer. Gridcoin is probably already running. No se puede enlazar a %s en este equipo. Gridcoin probablemente ya estĂ© en funcionamiento. - + Unable to bind to %s on this computer (bind returned error %d, %s) No es posible conectar con %s en este sistema (bind ha dado el error %d, %s) - + Error: Wallet locked, unable to create transaction Error: Monedero bloqueado, no es posible crear una transacciĂłn @@ -4411,60 +4234,48 @@ Esto significa que se requiere una cuota de al menos %2. Error: Monedero desbloqueado sĂłlo para hacer "stake", no es posible crear una transacciĂłn. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Error: Esta transacciĂłn requiere una tarifa de transacciĂłn de al menos% s debido a su cantidad, complejidad o uso de los fondos recibidos recientemente - + Error: Transaction creation failed Error: Error en la creaciĂłn de la transacciĂłn - + Sending... Enviando... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Error: La transacciĂłn ha sido rechazada. Esto puede ocurrir si algunas de sus monedas en el monedero ya se gastaron, por ejemplo, si se usa una copia del wallet.dat y se gastaron las monedas de la copia pero no se han marcado como gastadas aquĂ­. - + Invalid amount CuantĂ­a no vĂĄlida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Advertencia: Verifique que la fecha y hora del equipo sean correctas! Si su reloj es errĂłneo Gridcoin no funcionarĂĄ correctamente. - Warning: This version is obsolete, upgrade required! - Aviso: Esta versiĂłn es obsoleta, actualizaciĂłn necesaria! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ADVERTENCIA: violaciĂłn de un punto de control sincronizado detectada, se saltara! - - - + Warning: Disk space is low! Advertencia: Espacio en disco bajo! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ADVERTENCIA: Punto de control no vĂĄlido encontrado! Las transacciones que se muestran pueden no ser correctas! Puede que tenga que actualizar o notificar a los desarrolladores. - - - + Run in the background as a daemon and accept commands Ejecutar en segundo plano como daemon y aceptar comandos - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Ejecutar comando cuando una transacciĂłn del monedero cambia (%s en cmd se remplazarĂĄ por TxID) @@ -4474,12 +4285,12 @@ Esto significa que se requiere una cuota de al menos %2. Opciones de creaciĂłn de bloques: - + Failed to listen on any port. Use -listen=0 if you want this. Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. - + Specify wallet file (within data directory) Especificar archivo de monedero (dentro del directorio de datos) @@ -4506,7 +4317,7 @@ Esto significa que se requiere una cuota de al menos %2. - + Execute command when the best block changes (%s in cmd is replaced by block hash) Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque) @@ -4516,12 +4327,12 @@ Esto significa que se requiere una cuota de al menos %2. Permitir bĂșsquedas DNS para -addnode, -seednode y -connect - + To use the %s option Para utilizar la opciĂłn %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4564,12 +4375,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietario. - + Gridcoin version versiĂłn Gridcoin - + Usage: Uso: @@ -4579,7 +4390,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Enviar comando a -server or gridcoind - + List commands Muestra comandos @@ -4606,12 +4417,12 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari DirecciĂłn -proxy invĂĄlida: '%s' - + Unknown network specified in -onlynet: '%s' La red especificada en -onlynet '%s' es desconocida - + Insufficient funds Fondos insuficientes @@ -4621,17 +4432,17 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Cargando el Ă­ndice de bloques... - + Add a node to connect to and attempt to keep the connection open Añadir un nodo al que conectarse y tratar de mantener la conexiĂłn abierta - + Loading wallet... Cargando monedero... - + Cannot downgrade wallet No se puede cambiar a una versiĂłn mas antigua el monedero @@ -4641,17 +4452,17 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari No se puede escribir la direcciĂłn predeterminada - + Rescanning... Reexplorando... - + Done loading Se terminĂł de cargar - + Error Error diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts index a8fe25bb31..d2ba050cb0 100644 --- a/src/qt/locale/bitcoin_es_CL.ts +++ b/src/qt/locale/bitcoin_es_CL.ts @@ -23,23 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Este es un software experimental. - -Distribuido bajo la licencia MIT/X11, vea el archivo adjunto -COPYING o http://www.opensource.org/licenses/mit-license.php. - -Este producto incluye software desarrollado por OpenSSL Project para su uso en -el OpenSSL Toolkit (http://www.openssl.org/), software criptogrĂĄfico escrito por -Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - AddressBookPage @@ -316,12 +299,12 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. BitcoinGUI - + Gridcoin - + Send coins to a Gridcoin address @@ -397,28 +380,42 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -428,7 +425,7 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - + &Diagnostics @@ -493,24 +490,19 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.Exportar los datos de la pestaña actual a un archivo - + &Community - - &Advanced - - - - + [testnet] [red-de-pruebas] - + Gridcoin client @@ -528,7 +520,7 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - + Last received block was generated %1. @@ -587,7 +579,7 @@ DirecciĂłn: %4 {1 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -597,18 +589,7 @@ DirecciĂłn: %4 {1 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Fecha: %1 -Cantidad: %2 -Tipo: %3 -DirecciĂłn: %4 - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -667,7 +648,7 @@ DirecciĂłn: %4 - + %n second(s) @@ -699,7 +680,7 @@ DirecciĂłn: %4 - + &Overview &Vista general @@ -729,7 +710,7 @@ DirecciĂłn: %4 Salir del programa - + &Options... &Opciones @@ -738,19 +719,11 @@ DirecciĂłn: %4 &Encrypt Wallet... &Codificar la billetera... - - &Backup Wallet... - &Respaldar billetera... - &Change Passphrase... &Cambiar la contraseña... - - Backup wallet to another location - Respaldar billetera en otra ubicaciĂłn - Change the passphrase used for wallet encryption @@ -772,12 +745,12 @@ DirecciĂłn: %4 Verificar mensaje.... - + Wallet Cartera - + &Send &EnvĂ­a @@ -787,12 +760,12 @@ DirecciĂłn: %4 y recibir - + &Show / Hide &Mostrar/Ocultar - + &File &Archivo @@ -802,12 +775,12 @@ DirecciĂłn: %4 &ConfiguraciĂłn - + &Help &Ayuda - + %n second(s) ago @@ -844,12 +817,12 @@ DirecciĂłn: %4 Actualizado - + Catching up... Recuperando... - + Sent transaction TransacciĂłn enviada @@ -859,16 +832,12 @@ DirecciĂłn: %4 TransacciĂłn entrante - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La billetera esta <b>codificada</b> y actualmente <b>desbloqueda</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> La billetera esta <b>codificada</b> y actualmente <b>bloqueda</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -876,7 +845,7 @@ DirecciĂłn: %4 ClientModel - + Network Alert Alerta de Red @@ -1324,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1547,10 +1516,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Direcciona el puerto usando &UPnP - - Proxy &IP: - &IP Proxy: - &Port: @@ -1775,6 +1740,14 @@ This label turns red, if the priority is smaller than "medium". desincronizado + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1841,7 +1814,7 @@ This label turns red, if the priority is smaller than "medium". - + Boost version @@ -1858,7 +1831,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -2003,7 +1976,12 @@ This label turns red, if the priority is smaller than "medium". &Consola - + + &Scraper + + + + Totals Total: @@ -2038,7 +2016,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2336,22 +2314,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Cantidad: - + Pay &To: &Pagar a: - + &Label: &Etiqueta: - + Alt+A Alt+A @@ -2371,12 +2349,12 @@ This label turns red, if the priority is smaller than "medium". Mensaje: - + Form Formulario - + Enter a label for this address to add it to your address book Introduce una etiqueta a esta direcciĂłn para añadirla a tu guia @@ -2397,17 +2375,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2656,26 +2629,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - Generated - Generado + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De @@ -2789,23 +2783,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID de TransacciĂłn - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂłn - - - Transaction - TransacciĂłn - Amount @@ -2835,12 +2817,7 @@ This label turns red, if the priority is smaller than "medium". Esta ventana muestra informaciĂłn detallada sobre la transacciĂłn - - View Attachment - - - - + Execute Contract @@ -2849,21 +2826,11 @@ This label turns red, if the priority is smaller than "medium". C&lose C y perder - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Fecha @@ -2936,7 +2903,7 @@ This label turns red, if the priority is smaller than "medium". Generado pero no acceptado - + Received with Recibido con @@ -2956,32 +2923,42 @@ This label turns red, if the priority is smaller than "medium". Pagar a usted mismo - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Estado de transacciĂłn. Pasa el raton sobre este campo para ver el numero de confirmaciĂłnes. @@ -3178,7 +3155,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3322,7 +3299,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3355,7 +3332,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3363,13 +3340,13 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opciones: - + This help message Este mensaje de ayuda @@ -3406,12 +3383,12 @@ This label turns red, if the priority is smaller than "medium". Especifica tiempo de espera para conexion en milisegundos (predeterminado: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3421,7 +3398,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3431,7 +3408,7 @@ This label turns red, if the priority is smaller than "medium". Mantener al menos <n> conecciones por cliente (por defecto: 125) - + Connect only to the specified node(s) Conecta solo al nodo especificado @@ -3442,22 +3419,22 @@ This label turns red, if the priority is smaller than "medium". - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3467,22 +3444,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Umbral de desconecciĂłn de clientes con mal comportamiento (por defecto: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3502,7 +3479,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3512,7 +3489,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3557,12 +3534,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3592,12 +3589,12 @@ This label turns red, if the priority is smaller than "medium". Intenta usar UPnP para mapear el puerto de escucha (default: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3698,6 +3695,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3758,6 +3765,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3813,11 +3825,6 @@ This label turns red, if the priority is smaller than "medium". Message Mensaje - - - Messate Type - - Miner: @@ -3854,12 +3861,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3869,12 +3871,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3946,7 +3943,7 @@ This label turns red, if the priority is smaller than "medium". - + Output extra debugging information. Implies all other -debug* options @@ -3956,7 +3953,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3971,7 +3968,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3982,13 +3979,13 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) Envia comando al nodo situado en <ip> (predeterminado: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -3998,12 +3995,12 @@ This label turns red, if the priority is smaller than "medium". - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4013,7 +4010,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format Actualizar billetera al formato actual @@ -4030,12 +4027,12 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4050,12 +4047,12 @@ This label turns red, if the priority is smaller than "medium". - + Block creation options: - + Set minimum block size in bytes (default: 0) Establezca el tamaño mĂ­nimo del bloque en bytes (por defecto: 0) @@ -4065,12 +4062,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuraciĂłn SSL) @@ -4093,17 +4090,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' Cantidad invĂĄlida para -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. PrecauciĂłn: -paytxfee es muy alta. Esta es la comisiĂłn que pagarĂĄs si envias una transacciĂłn. - + Invalid amount for -mininput=<amount>: '%s' @@ -4113,22 +4110,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4138,10 +4135,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4158,7 +4160,7 @@ This label turns red, if the priority is smaller than "medium". wallet.dat corrompiĂł, guardado fallido - + Unknown -socks proxy version requested: %i @@ -4168,27 +4170,27 @@ This label turns red, if the priority is smaller than "medium". - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4203,22 +4205,22 @@ This label turns red, if the priority is smaller than "medium". Error cargando wallet.dat: Billetera corrupta - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Error cargando wallet.dat @@ -4238,17 +4240,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) No es posible escuchar en el %s en este ordenador (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4258,46 +4260,42 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Cantidad invĂĄlida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Advertencia: Esta versiĂłn estĂĄ obsoleta, se necesita actualizar! - - - + Warning: Disk space is low! - + Send trace/debug info to console instead of debug.log file Enviar informacion de seguimiento a la consola en vez del archivo debug.log @@ -4314,18 +4312,18 @@ This label turns red, if the priority is smaller than "medium". - + Allow DNS lookups for -addnode, -seednode and -connect Permite bĂșsqueda DNS para addnode y connect - + To use the %s option Para utilizar la opciĂłn %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4357,12 +4355,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Uso: @@ -4372,7 +4370,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands Muestra comandos @@ -4409,17 +4407,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Cargando el index de bloques... - + Add a node to connect to and attempt to keep the connection open Agrega un nodo para conectarse and attempt to keep the connection open - + Loading wallet... Cargando cartera... - + Cannot downgrade wallet No es posible desactualizar la billetera @@ -4429,17 +4427,17 @@ If the file does not exist, create it with owner-readable-only file permissions. No se pudo escribir la direcciĂłn por defecto - + Rescanning... Rescaneando... - + Done loading Carga completa - + Error Error diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts index c4d5d76409..d8fe6a179e 100644 --- a/src/qt/locale/bitcoin_es_DO.ts +++ b/src/qt/locale/bitcoin_es_DO.ts @@ -23,23 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Este es un software experimental. - -Distribuido bajo la licencia MIT/X11, vea el archivo adjunto -COPYING o http://www.opensource.org/licenses/mit-license.php. - -Este producto incluye software desarrollado por OpenSSL Project para su uso en -el OpenSSL Toolkit (http://www.openssl.org/) y software criptogrĂĄfico escrito por -Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - AddressBookPage @@ -316,12 +299,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. BitcoinGUI - + Sign &message... Firmar &mensaje... - + &Overview &Vista general @@ -417,7 +400,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Salir de la aplicaciĂłn - + &Options... &Opciones... @@ -431,19 +414,11 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Encrypt or decrypt wallet - - &Backup Wallet... - Copia de &respaldo del monedero... - &Change Passphrase... &Cambiar la contraseña
 - - Backup wallet to another location - Copia de seguridad del monedero en otra ubicaciĂłn - Change the passphrase used for wallet encryption @@ -495,7 +470,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.&Verificar mensaje... - + Wallet Monedero @@ -505,7 +480,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - + &Send &Enviar @@ -525,28 +500,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -556,7 +515,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - + &Diagnostics @@ -586,14 +545,14 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - + [testnet] [testnet] - + Gridcoin client @@ -611,7 +570,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - + Date: %1 Amount: %2 Type: %3 @@ -626,7 +585,7 @@ DirecciĂłn: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -673,7 +632,7 @@ DirecciĂłn: %4 - + %n second(s) @@ -715,7 +674,37 @@ DirecciĂłn: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Archivo @@ -730,17 +719,12 @@ DirecciĂłn: %4 - - &Advanced - - - - + &Help A&yuda - + %n second(s) ago @@ -777,12 +761,12 @@ DirecciĂłn: %4 Actualizado - + Catching up... Actualizando... - + Last received block was generated %1. @@ -837,19 +821,7 @@ DirecciĂłn: %4 TransacciĂłn entrante - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Fecha: %1 -Cantidad: %2 -Tipo: %3 -DirecciĂłn: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -860,17 +832,13 @@ DirecciĂłn: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - El monedero estĂĄ <b>cifrado</b> y actualmente <b>desbloqueado</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> El monedero estĂĄ <b>cifrado</b> y actualmente <b>bloqueado</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -878,7 +846,7 @@ DirecciĂłn: %4 ClientModel - + Network Alert Alerta de red @@ -960,10 +928,6 @@ DirecciĂłn: %4 Priority Prioridad - - List mode - Modo lista - Amount @@ -1329,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1542,10 +1506,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Mapear el puerto usando &UPnP - - Proxy &IP: - DirecciĂłn &IP del proxy: - &Port: @@ -1779,6 +1739,14 @@ This label turns red, if the priority is smaller than "medium". desincronizado + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1840,7 +1808,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1852,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/D @@ -1872,12 +1840,12 @@ This label turns red, if the priority is smaller than "medium". Hora de inicio - + Gridcoin - Debug Console - + Boost version @@ -1982,7 +1950,12 @@ This label turns red, if the priority is smaller than "medium". &Consola - + + &Scraper + + + + &Network Traffic &TrĂĄfico de Red @@ -2037,7 +2010,7 @@ This label turns red, if the priority is smaller than "medium". Escriba <b>help</b> para ver un resumen de los comandos disponibles. - + %1 B %1 B @@ -2072,7 +2045,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2339,22 +2312,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Ca&ntidad: - + Pay &To: &Pagar a: - + &Label: &Etiqueta: - + Alt+A Alt+A @@ -2374,12 +2347,12 @@ This label turns red, if the priority is smaller than "medium". Mensaje: - + Form Desde - + Enter a label for this address to add it to your address book Etiquete esta direcciĂłn para añadirla a la libreta @@ -2400,17 +2373,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2659,26 +2627,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Fuente - Generated - Generado + + Generated in CoinBase + + + + + MINED - POS + - - Generated in CoinBase + + MINED - POR - - Generated, PoS + + MINED - ORPHANED - + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De @@ -2792,27 +2781,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - Identificador de transacciĂłn - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂłn - - - Transaction - TransacciĂłn - - - Inputs - entradas - Amount @@ -2842,12 +2815,7 @@ This label turns red, if the priority is smaller than "medium". Esta ventana muestra informaciĂłn detallada sobre la transacciĂłn - - View Attachment - - - - + Execute Contract @@ -2856,21 +2824,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Cerrar - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Fecha @@ -2943,7 +2901,7 @@ This label turns red, if the priority is smaller than "medium". Generado pero no aceptado - + Received with Recibido con @@ -2963,32 +2921,42 @@ This label turns red, if the priority is smaller than "medium". Pago propio - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (nd) - + Transaction status. Hover over this field to show number of confirmations. Estado de transacciĂłn. Pasa el ratĂłn sobre este campo para ver el nĂșmero de confirmaciones. @@ -3185,7 +3153,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3329,7 +3297,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3362,7 +3330,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3370,40 +3338,40 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opciones: - + Specify data directory Especificar directorio para los datos - + Connect to a node to retrieve peer addresses, and disconnect Conectar a un nodo para obtener direcciones de pares y desconectar - + Specify your own public address Especifique su propia direcciĂłn pĂșblica - + Accept command line and JSON-RPC commands Aceptar comandos consola y JSON-RPC - + Run in the background as a daemon and accept commands Ejecutar en segundo plano como daemon y aceptar comandos - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Ejecutar comando cuando una transacciĂłn del monedero cambia (%s en cmd se remplazarĂĄ por TxID) @@ -3413,12 +3381,12 @@ This label turns red, if the priority is smaller than "medium". Opciones de creaciĂłn de bloques: - + Failed to listen on any port. Use -listen=0 if you want this. Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3450,7 +3418,7 @@ This label turns red, if the priority is smaller than "medium". - + Execute command when the best block changes (%s in cmd is replaced by block hash) Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque) @@ -3460,7 +3428,7 @@ This label turns red, if the priority is smaller than "medium". Permitir bĂșsquedas DNS para -addnode, -seednode y -connect - + Loading addresses... Cargando direcciones... @@ -3470,12 +3438,12 @@ This label turns red, if the priority is smaller than "medium". DirecciĂłn -proxy invĂĄlida: '%s' - + Unknown network specified in -onlynet: '%s' La red especificada en -onlynet '%s' es desconocida - + Insufficient funds Fondos insuficientes @@ -3485,17 +3453,17 @@ This label turns red, if the priority is smaller than "medium". Cargando el Ă­ndice de bloques... - + Add a node to connect to and attempt to keep the connection open Añadir un nodo al que conectarse y tratar de mantener la conexiĂłn abierta - + Loading wallet... Cargando monedero... - + Cannot downgrade wallet No se puede rebajar el monedero @@ -3505,27 +3473,27 @@ This label turns red, if the priority is smaller than "medium". No se puede escribir la direcciĂłn predeterminada - + Rescanning... Reexplorando... - + Done loading Generado pero no aceptado - + Error Error - + To use the %s option Para utilizar la opciĂłn %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3649,6 +3617,16 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3709,6 +3687,11 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari ERROR + + + Entire balance reserved + + Expires @@ -3769,11 +3752,6 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Message Mensaje - - - Messate Type - - Miner: @@ -3810,12 +3788,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - - No coins; - - - - + Offline; @@ -3825,12 +3798,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3910,7 +3878,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + List commands Muestra comandos @@ -3927,7 +3895,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + This help message Este mensaje de ayuda @@ -3953,12 +3921,12 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Especificar el tiempo mĂĄximo de conexiĂłn en milisegundos (predeterminado: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3968,7 +3936,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3978,22 +3946,22 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Mantener como mĂĄximo <n> conexiones a pares (predeterminado: 125) - + Connect only to the specified node(s) Conectar sĂłlo a los nodos (o nodo) especificados - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Conectarse solo a nodos de la red <net> (IPv4, IPv6 o Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descubrir direcciĂłn IP propia (predeterminado: 1 al escuchar sin -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect) @@ -4003,27 +3971,27 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Umbral para la desconexiĂłn de pares con mal comportamiento (predeterminado: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) NĂșmero de segundos en que se evita la reconexiĂłn de pares con mal comportamiento (predeterminado: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) BĂșfer de recepciĂłn mĂĄximo por conexiĂłn, <n>*1000 bytes (predeterminado: 5000) @@ -4033,7 +4001,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari BĂșfer de recepciĂłn mĂĄximo por conexiĂłn, , <n>*1000 bytes (predeterminado: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Usar UPnP para asignar el puerto de escucha (predeterminado: 1 al escuchar) @@ -4043,23 +4011,23 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Usar UPnP para asignar el puerto de escucha (predeterminado: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Usar la red de pruebas - + Output extra debugging information. Implies all other -debug* options @@ -4069,7 +4037,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Prepend debug output with timestamp @@ -4079,7 +4047,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4090,7 +4058,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Send commands to node running on <ip> (default: 127.0.0.1) Enviar comando al nodo situado en <ip> (predeterminado: 127.0.0.1) @@ -4101,7 +4069,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4111,7 +4079,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Upgrade wallet to latest format Actualizar el monedero al Ășltimo formato @@ -4127,7 +4095,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas - + Attempt to recover private keys from a corrupt wallet.dat Intento de recuperar claves privadas de un wallet.dat corrupto @@ -4147,7 +4115,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Boinc Mining @@ -4157,7 +4125,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Error obtaining next project. Error 06172014. @@ -4207,12 +4175,32 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4227,12 +4215,12 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuraciĂłn SSL) @@ -4255,17 +4243,17 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Invalid amount for -paytxfee=<amount>: '%s' Cantidad invĂĄlida para -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Aviso: ÂĄ-paytxfee tiene un valor muy alto! Esta es la comisiĂłn que pagarĂĄ si envĂ­a una transacciĂłn. - + Invalid amount for -mininput=<amount>: '%s' @@ -4275,22 +4263,22 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4300,10 +4288,15 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Aviso: ÂĄRecuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberĂĄ restaurar una copia de seguridad. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4320,17 +4313,17 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari wallet.dat corrupto. Ha fallado la recuperaciĂłn. - + Unknown -socks proxy version requested: %i Solicitada versiĂłn de proxy -socks desconocida: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' No se puede resolver la direcciĂłn de -bind: '%s' @@ -4340,7 +4333,7 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari No se puede resolver la direcciĂłn de -externalip: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4355,22 +4348,22 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari Error al cargar wallet.dat: el monedero estĂĄ dañado - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Aviso: ÂĄError al leer wallet.dat! Todas las claves se han leĂ­do correctamente, pero podrĂ­an faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Error al cargar wallet.dat @@ -4390,17 +4383,17 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) No es posible conectar con %s en este sistema (bind ha dado el error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4410,41 +4403,37 @@ Si el archivo no existe, crĂ©elo con permiso de lectura solamente del propietari - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount CuantĂ­a no vĂĄlida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Aviso: Esta versiĂłn es obsoleta, actualizaciĂłn necesaria! - - - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_es_MX.ts b/src/qt/locale/bitcoin_es_MX.ts index 38e074a98a..b511612357 100644 --- a/src/qt/locale/bitcoin_es_MX.ts +++ b/src/qt/locale/bitcoin_es_MX.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Gridcoin - + Send coins to a Gridcoin address @@ -380,28 +380,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -411,7 +395,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -476,24 +460,19 @@ This product includes software developed by the OpenSSL Project for use in the O Exportar la informaciĂłn en la tabla actual a un archivo - + &Community - - &Advanced - - - - + [testnet] - + Gridcoin client @@ -511,7 +490,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -564,7 +543,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -574,13 +553,13 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -612,7 +591,7 @@ Address: %4 - + URI handling @@ -665,7 +644,7 @@ Address: %4 - + %n second(s) @@ -697,7 +676,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &Overview &Vista previa @@ -727,7 +736,7 @@ Address: %4 Salir de la aplicaciĂłn - + &Options... &Opciones @@ -736,19 +745,11 @@ Address: %4 &Encrypt Wallet... &Encriptar cartera - - &Backup Wallet... - &Respaldar cartera - &Change Passphrase... &Cambiar contraseña... - - Backup wallet to another location - Respaldar cartera en otra ubicaciĂłn - Change the passphrase used for wallet encryption @@ -770,12 +771,12 @@ Address: %4 &Verificar mensaje... - + Wallet Cartera - + &Send &Enviar @@ -785,12 +786,12 @@ Address: %4 &Recibir - + &Show / Hide &Mostrar / Ocultar - + &File &Archivo @@ -800,22 +801,22 @@ Address: %4 &Configuraciones - + &Help &Ayuda - + Up to date Actualizado al dia - + Catching up... Recibiendo... - + Sent transaction Enviar TransacciĂłn @@ -825,16 +826,12 @@ Address: %4 TransacciĂłn entrante - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - La cartera esta <b>encriptada</b> y <b>desbloqueada</b> actualmente - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> La cartera esta <b>encriptada</b> y <b>bloqueada</b> actualmente - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1289,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1735,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1801,7 +1806,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1823,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1972,6 +1977,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1998,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2295,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: M&onto - + Pay &To: Pagar &a: - + &Label: &Etiqueta - + Alt+A Alt+A @@ -2330,12 +2340,12 @@ This label turns red, if the priority is smaller than "medium". Mensaje: - + Form Formulario - + Enter a label for this address to add it to your address book Ingrese una etiqueta para esta direcciĂłn para agregarlo en su libreta de direcciones. @@ -2356,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2615,22 +2620,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2749,10 +2779,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂłn - Amount @@ -2782,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". Este panel muestras una descripciĂłn detallada de la transacciĂłn - - View Attachment - - - - + Execute Contract @@ -2796,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Cerrar - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Fecha @@ -2883,7 +2894,7 @@ This label turns red, if the priority is smaller than "medium". Generado pero no aprovado - + Received with Recivido con @@ -2903,32 +2914,42 @@ This label turns red, if the priority is smaller than "medium". Pagar a si mismo - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3125,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3269,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3302,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3310,7 +3331,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opciones: @@ -3325,27 +3346,27 @@ This label turns red, if the priority is smaller than "medium". Cargando indice de bloques... - + To use the %s option - + Loading wallet... Cargando billetera... - + Done loading Carga completa - + Error Error - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3392,7 +3413,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3402,7 +3423,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3442,12 +3463,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3507,7 +3548,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands Lista de comandos @@ -3522,7 +3563,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3557,12 +3598,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3572,12 +3613,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3587,7 +3628,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open @@ -3682,6 +3723,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3752,6 +3803,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3807,11 +3863,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3848,12 +3899,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3863,12 +3909,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3903,17 +3944,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3923,27 +3964,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3953,7 +3994,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3963,12 +4004,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3978,7 +4019,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3988,7 +4029,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3998,7 +4039,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4028,7 +4069,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4038,12 +4079,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4053,12 +4094,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4068,7 +4109,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4083,12 +4124,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4103,12 +4144,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4118,12 +4159,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4143,17 +4184,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4163,22 +4204,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4188,10 +4229,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4208,7 +4254,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4218,7 +4264,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4228,22 +4274,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4258,27 +4304,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4288,12 +4334,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4308,17 +4354,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4328,27 +4374,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4358,12 +4404,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_es_UY.ts b/src/qt/locale/bitcoin_es_UY.ts index 3ebff6d1a7..5ca3c48f80 100644 --- a/src/qt/locale/bitcoin_es_UY.ts +++ b/src/qt/locale/bitcoin_es_UY.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Overview &Vista previa @@ -415,28 +415,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -446,7 +460,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -521,24 +535,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [prueba_de_red] - + Gridcoin client @@ -556,7 +565,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -609,7 +618,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -619,13 +628,13 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -657,7 +666,7 @@ Address: %4 - + URI handling @@ -710,7 +719,7 @@ Address: %4 - + %n second(s) @@ -742,14 +751,10 @@ Address: %4 - + &Options... &Opciones... - - &Backup Wallet... - Respaldar Billetera - &Change Passphrase... @@ -761,7 +766,7 @@ Address: %4 Cambie la clave utilizada para el cifrado del monedero - + Wallet Billetera @@ -771,7 +776,7 @@ Address: %4 - + &Show / Hide Mostrar / Ocultar @@ -786,7 +791,7 @@ Address: %4 - + &File &Archivo @@ -796,22 +801,22 @@ Address: %4 &Configuracion - + &Help &Ayuda - + Up to date A la fecha - + Catching up... Ponerse al dia... - + Sent transaction Transaccion enviada @@ -821,16 +826,12 @@ Address: %4 TransacciĂłn entrante - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - El Monedero esta <b>cifrado</b> y actualmente <b>desbloqueado</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> El Monedero esta <b>cifrado</b> y actualmente <b>bloqueado</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -838,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1285,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1731,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1797,7 +1806,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information InformaciĂłn @@ -1819,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1968,6 +1977,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1994,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2291,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: A&Monto: - + Pay &To: Pagar &A: - + &Label: &Etiqueta: - + Alt+A Alt+A @@ -2321,12 +2335,12 @@ This label turns red, if the priority is smaller than "medium". Alt+P - + Form Formulario - + Enter a label for this address to add it to your address book Introduzca una etiqueta para esta direcciĂłn para añadirla a su libreta de direcciones @@ -2352,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2611,22 +2620,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2745,10 +2779,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂłn - Amount @@ -2778,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2792,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Cerrar - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Fecha @@ -2879,7 +2894,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2899,32 +2914,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3121,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3265,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3298,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3306,12 +3331,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3358,7 +3383,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3368,7 +3393,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3408,12 +3433,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3463,7 +3508,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3473,7 +3518,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3563,6 +3608,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3623,6 +3678,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3683,11 +3743,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3724,12 +3779,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3744,12 +3794,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3824,12 +3869,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3839,12 +3884,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3854,12 +3899,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3869,22 +3914,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3894,27 +3939,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3924,7 +3969,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3934,12 +3979,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3949,7 +3994,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3959,7 +4004,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3969,7 +4014,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3999,7 +4044,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4009,12 +4054,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4024,12 +4069,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4039,7 +4084,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4054,12 +4099,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4074,12 +4119,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4089,12 +4134,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4114,17 +4159,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4134,22 +4179,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4159,7 +4204,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4169,7 +4214,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4179,7 +4224,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4189,22 +4234,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4229,20 +4274,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4254,12 +4304,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4269,12 +4319,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4294,22 +4344,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4319,27 +4369,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4349,17 +4399,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Error Error diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts index 4a28011d42..a6f8da77f3 100644 --- a/src/qt/locale/bitcoin_et.ts +++ b/src/qt/locale/bitcoin_et.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - ? -See on eksperimentaalne tarkvara.? -? -Levitatud MIT/X11 tarkvara litsentsi all, vaata kaasasolevat faili COPYING vĂ”i http://www.opensource.org/licenses/mit-license.php? -? -Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenSSL Toolkitis (http://www.openssl.org/) ja Eric Young'i poolt loodud krĂŒptograafilist tarkvara (eay@cryptsoft.com) ning Thomas Bernard'i loodud UPnP tarkvara. - AddressBookPage @@ -313,12 +299,12 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS BitcoinGUI - + Gridcoin Gridcoin - + Send coins to a Gridcoin address @@ -394,28 +380,12 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -425,7 +395,7 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS - + &Diagnostics @@ -490,24 +460,19 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS Ekspordi kuvatava vahelehe sisu faili - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -517,7 +482,7 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS - + Last received block was generated %1. @@ -576,7 +541,7 @@ Aadress: %4? {1 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -586,18 +551,7 @@ Aadress: %4? {1 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - KuupĂ€ev: %1? -Summa: %2? -TĂŒĂŒp: %3? -Aadress: %4? - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -656,7 +610,7 @@ Aadress: %4? - + %n second(s) @@ -688,7 +642,7 @@ Aadress: %4? - + &Overview &Ülevaade @@ -718,7 +672,7 @@ Aadress: %4? VĂ€ljumine - + &Options... &Valikud... @@ -727,19 +681,11 @@ Aadress: %4? &Encrypt Wallet... &KrĂŒpteeri Rahakott - - &Backup Wallet... - &Varunda Rahakott - &Change Passphrase... &Salafraasi muutmine - - Backup wallet to another location - Varunda rahakott teise asukohta - Change the passphrase used for wallet encryption @@ -761,12 +707,12 @@ Aadress: %4? &Kontrolli sĂ”numit... - + Wallet Rahakott - + &Send &Saada @@ -776,12 +722,12 @@ Aadress: %4? &VĂ”ta vastu - + &Show / Hide &NĂ€ita / Peida - + &File &Fail @@ -791,12 +737,12 @@ Aadress: %4? &Seaded - + &Help &Abi - + Processed %n block(s) of transaction history. Töödeldud %n plokk transaktsioonide ajaloost. @@ -841,12 +787,12 @@ Aadress: %4? Ajakohane - + Catching up... JĂ”uan jĂ€rgi... - + Sent transaction Saadetud tehing @@ -856,16 +802,42 @@ Aadress: %4? Sisenev tehing - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Rahakott on <b>krĂŒpteeritud</b> ning hetkel <b>avatud</b> + + Scraper: waiting on wallet to sync. + - + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> Rahakott on <b>krĂŒpteeritud</b> ning hetkel <b>suletud</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -873,7 +845,7 @@ Aadress: %4? ClientModel - + Network Alert VĂ”rgu HĂ€ire @@ -955,10 +927,6 @@ Aadress: %4? Change: Vahetusraha: - - List mode - Loetelu reĆŸiim - Amount @@ -1324,7 +1292,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1542,10 +1510,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Suuna port &UPnP kaudu - - Proxy &IP: - Proxi &IP: - &Port: @@ -1774,6 +1738,14 @@ This label turns red, if the priority is smaller than "medium". sĂŒnkimata + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1835,7 +1807,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1847,7 +1819,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1927,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". Ülevaateks vĂ”imalikest kĂ€sklustest trĂŒki <b>help</b>. - + %1 B %1 B @@ -1962,12 +1934,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2067,7 +2039,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + Welcome to the Gridcoin RPC console! @@ -2334,22 +2311,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: S&umma: - + Pay &To: Maksa &: - + &Label: &MĂ€rgis - + Alt+A Alt+A @@ -2369,12 +2346,12 @@ This label turns red, if the priority is smaller than "medium". SĂ”num: - + Form Vorm - + Enter a label for this address to add it to your address book Aadressiraamatusse sisestamiseks mĂ€rgista aadress @@ -2395,17 +2372,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2646,26 +2618,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Allikas - Generated - Genereeritud + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Saatja @@ -2779,27 +2772,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - Tehingu ID - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informatsioon - - - Transaction - Tehing - - - Inputs - Sisendid - Amount @@ -2816,7 +2793,7 @@ This label turns red, if the priority is smaller than "medium". vÀÀr - + Open for %n more block(s) Avaneb %n bloki pĂ€rast @@ -2837,12 +2814,7 @@ This label turns red, if the priority is smaller than "medium". Paan kuvab tehingu detailid - - View Attachment - - - - + Execute Contract @@ -2851,21 +2823,11 @@ This label turns red, if the priority is smaller than "medium". C&lose S&ulge - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date KuupĂ€ev @@ -2933,7 +2895,7 @@ This label turns red, if the priority is smaller than "medium". Loodud, kuid aktsepteerimata - + Received with Saadud koos @@ -2953,32 +2915,42 @@ This label turns red, if the priority is smaller than "medium". Makse iseendale - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Tehingu staatus. Kinnituste arvu kuvamiseks liigu hiire noolega selle peale. @@ -3003,7 +2975,7 @@ This label turns red, if the priority is smaller than "medium". JÀÀgile lisatud vĂ”i eemaldatud summa. - + Unconfirmed Kinnitamata @@ -3177,17 +3149,10 @@ This label turns red, if the priority is smaller than "medium". saaja - - UpgradeDialog - - Hide - Peida - - VotingChartDialog - + Poll Results @@ -3331,7 +3296,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3364,7 +3329,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... Saatmine... @@ -3372,12 +3337,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Valikud: - + This help message KĂ€esolev abitekst @@ -3412,12 +3377,12 @@ This label turns red, if the priority is smaller than "medium". Sea ĂŒhenduse timeout millisekundites (vaikevÀÀrtus: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3427,7 +3392,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3437,7 +3402,7 @@ This label turns red, if the priority is smaller than "medium". SĂ€ilita vĂ€hemalt <n> ĂŒhendust peeridega (vaikevÀÀrtus: 125) - + Connect only to the specified node(s) Ühendu ainult mÀÀratud node'i(de)ga @@ -3447,22 +3412,22 @@ This label turns red, if the priority is smaller than "medium". Peeri aadressi saamiseks ĂŒhendu korraks node'iga - + Specify your own public address TĂ€psusta enda avalik aadress - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Ühenda ainult node'idega <net> vĂ”rgus (IPv4, IPv6 vĂ”i Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Leia oma IP aadress (vaikevÀÀrtus: 1, kui kuulatakse ning puudub -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Luba vĂ€lisĂŒhendusi (vaikevÀÀrtus: 1 kui puudub -proxy vĂ”i -connect) @@ -3472,27 +3437,27 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Ulakate peeride valulĂ€vi (vaikevÀÀrtus: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Mitme sekundi pĂ€rast ulakad peerid tagasi vĂ”ivad tulla (vaikevÀÀrtus: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksimaalne saamise puhver -connection kohta , <n>*1000 baiti (vaikevÀÀrtus: 5000) @@ -3502,7 +3467,7 @@ This label turns red, if the priority is smaller than "medium". Maksimaalne saatmise puhver -connection kohta , <n>*1000 baiti (vaikevÀÀrtus: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Kasuta kuulatava pordi mÀÀramiseks UPnP ĂŒhendust (vaikevÀÀrtus: 1, kui kuulatakse) @@ -3512,12 +3477,12 @@ This label turns red, if the priority is smaller than "medium". Kasuta kuulatava pordi mÀÀramiseks UPnP ĂŒhendust (vaikevÀÀrtus: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3527,7 +3492,7 @@ This label turns red, if the priority is smaller than "medium". Luba kĂ€surea ning JSON-RPC kĂ€sklusi - + Run in the background as a daemon and accept commands Tööta taustal ning aktsepteeri kĂ€sklusi @@ -3537,7 +3502,7 @@ This label turns red, if the priority is smaller than "medium". TestvĂ”rgu kasutamine - + Output extra debugging information. Implies all other -debug* options @@ -3547,7 +3512,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3557,7 +3522,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3567,7 +3532,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC ĂŒhenduste lubamine kindla IP pealt - + Send commands to node running on <ip> (default: 127.0.0.1) Saada kĂ€sklusi node'ile IP'ga <ip> (vaikevÀÀrtus: 127.0.0.1) @@ -3577,7 +3542,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3587,7 +3552,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format Uuenda rahakott uusimasse vormingusse @@ -3602,7 +3567,7 @@ This label turns red, if the priority is smaller than "medium". Otsi ploki jadast rahakoti kadunud tehinguid - + Attempt to recover private keys from a corrupt wallet.dat PĂŒĂŒa vigasest wallet.dat failist taastada turvavĂ”tmed @@ -3697,6 +3662,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3757,6 +3732,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3827,11 +3807,6 @@ This label turns red, if the priority is smaller than "medium". Message SĂ”num - - - Messate Type - - Miner: @@ -3868,12 +3843,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3883,12 +3853,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3913,12 +3878,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL valikud: (vaata Bitcoini Wikist vĂ”i SSL sĂ€tete juhendist) @@ -3938,17 +3903,17 @@ This label turns red, if the priority is smaller than "medium". Serveri privaatvĂ”ti (vaikevÀÀrtus: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' -paytxfee=<amount> jaoks vigane kogus: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Hoiatus: -paytxfee on seatud vĂ€ga kĂ”rgeks! See on sinu poolt makstav tehingu lisatasu. - + Invalid amount for -mininput=<amount>: '%s' @@ -3958,22 +3923,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. Rahakott %s paikenb vĂ€ljaspool kataloogi %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -3983,10 +3948,15 @@ This label turns red, if the priority is smaller than "medium". Hoiatus: toimus wallet.dat faili andmete pÀÀstmine! Originaal wallet.dat nimetati kaustas %s ĂŒmber wallet.{ajatempel}.bak'iks, jÀÀgi vĂ”i tehingute ebakĂ”lade puhul tuleks teha backup'ist taastamine. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4003,17 +3973,17 @@ This label turns red, if the priority is smaller than "medium". wallet.dat fail on katki, pÀÀstmine ebaĂ”nnestus - + Unknown -socks proxy version requested: %i KĂŒsitud tundmatu -socks proxi versioon: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Tundmatu -bind aadress: '%s' @@ -4023,7 +3993,7 @@ This label turns red, if the priority is smaller than "medium". Tundmatu -externalip aadress: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4038,22 +4008,22 @@ This label turns red, if the priority is smaller than "medium". Viga wallet.dat kĂ€ivitamisel. Vigane rahakkott - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Hoiatus: ilmnes tĂ”rge wallet.dat faili lugemisel! VĂ”tmed on terved, kuid tehingu andmed vĂ”i aadressiraamatu kirjed vĂ”ivad olla kadunud vĂ”i vigased. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Viga faili wallet.dat laadimisel: rahakott vajab Gridcoin'i uuemat versiooni. - + Wallet needed to be rewritten: restart Gridcoin to complete Rahakott on vaja ĂŒle kirjutada: kĂ€ivita Gridcoin uuesti toimingu lĂ”petamiseks - + Error loading wallet.dat Viga wallet.dat kĂ€ivitamisel @@ -4073,17 +4043,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Selle arvutiga ei ole vĂ”imalik siduda %s kĂŒlge (katse nurjus %d, %s tĂ”ttu) - + Error: Wallet locked, unable to create transaction @@ -4093,46 +4063,42 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... Saatmine... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Kehtetu summa - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Hoiatus: versioon on aegunud, uuendus on nĂ”utav! - - - + Warning: Disk space is low! - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -4157,7 +4123,7 @@ This label turns red, if the priority is smaller than "medium". Blokeeri loomise valikud: - + Boinc Mining @@ -4167,7 +4133,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4207,12 +4173,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4297,7 +4283,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC ĂŒhenduste salasĂ”na - + Execute command when the best block changes (%s in cmd is replaced by block hash) KĂ€ivita kĂ€sklus, kui parim plokk muutub (kĂ€skluse %s asendatakse ploki hash'iga) @@ -4307,12 +4293,12 @@ This label turns red, if the priority is smaller than "medium". -addnode, -seednode ja -connect tohivad kasutada DNS lookup'i - + To use the %s option %s valiku kasutamine - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4346,12 +4332,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili Ă”igustes. - + Gridcoin version - + Usage: Kasutus: @@ -4361,7 +4347,7 @@ Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili Ă”igustes. - + List commands KĂ€skluste loetelu @@ -4386,12 +4372,12 @@ Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili Ă”igustes.Vigane -proxi aadress: '%s' - + Unknown network specified in -onlynet: '%s' Kirjeldatud tundmatu vĂ”rgustik -onlynet'is: '%s' - + Insufficient funds Liiga suur summa @@ -4401,17 +4387,17 @@ Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili Ă”igustes.Klotside indeksi laadimine... - + Add a node to connect to and attempt to keep the connection open Lisa node ning hoia ĂŒhendus avatud - + Loading wallet... Rahakoti laadimine... - + Cannot downgrade wallet Rahakoti vanandamine ebaĂ”nnestus @@ -4421,17 +4407,17 @@ Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili Ă”igustes.TĂ”rge vaikimisi aadressi kirjutamisel - + Rescanning... Üleskaneerimine... - + Done loading Laetud - + Error TĂ”rge diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts index 6355b9c507..6b66401b7b 100644 --- a/src/qt/locale/bitcoin_eu_ES.ts +++ b/src/qt/locale/bitcoin_eu_ES.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Wallet @@ -309,7 +309,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Overview &Gainbegiratu @@ -425,28 +425,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -456,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -541,24 +555,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -576,7 +585,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -629,7 +638,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -639,13 +648,13 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -677,7 +686,7 @@ Address: %4 - + URI handling @@ -730,7 +739,7 @@ Address: %4 - + %n second(s) @@ -762,7 +771,7 @@ Address: %4 - + &Options... &Aukerak... @@ -782,7 +791,7 @@ Address: %4 Aldatu zorroa enkriptatzeko erabilitako pasahitza - + &File &Artxiboa @@ -792,22 +801,22 @@ Address: %4 &Ezarpenak - + &Help &Laguntza - + Up to date Egunean - + Catching up... Eguneratzen... - + Sent transaction Bidalitako transakzioa @@ -817,16 +826,12 @@ Address: %4 Sarrerako transakzioa - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Zorroa <b>enkriptatuta</b> eta <b>desblokeatuta</b> dago une honetan - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Zorroa <b>enkriptatuta</b> eta <b>blokeatuta</b> dago une honetan - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -834,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1281,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1727,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1793,7 +1806,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1815,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1964,6 +1977,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1990,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2287,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: K&opurua: - + Pay &To: Ordaindu &honi: - + &Label: &Etiketa: - + Alt+A Alt+A @@ -2328,12 +2346,12 @@ This label turns red, if the priority is smaller than "medium". Sartu etiketa bat helbide honetarako, eta gehitu zure helbide-liburuan - + Form Inprimakia - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2348,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2589,12 +2602,42 @@ This label turns red, if the priority is smaller than "medium". - + Source - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2714,7 +2757,7 @@ This label turns red, if the priority is smaller than "medium". - + , has not been successfully broadcast yet , ez da arrakastaz emititu oraindik @@ -2737,12 +2780,7 @@ This label turns red, if the priority is smaller than "medium". - - Generated, PoS - - - - + unknown ezezaguna @@ -2751,10 +2789,6 @@ This label turns red, if the priority is smaller than "medium". Message Mezua - - Transaction - Transakzioaren - Amount @@ -2774,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". Panel honek transakzioaren deskribapen xehea erakusten du - - View Attachment - - - - + Execute Contract @@ -2788,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Itxi - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2860,37 +2879,17 @@ This label turns red, if the priority is smaller than "medium". - + Received from - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Transakzioaren xede-helbidea. - + Open until %1 Zabalik %1 arte @@ -2905,7 +2904,7 @@ This label turns red, if the priority is smaller than "medium". Sortua, baina ez onartua - + Received with Jasota honekin: @@ -2920,12 +2919,42 @@ This label turns red, if the priority is smaller than "medium". Ordainketa zeure buruari - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Transakzioaren egoera. Pasatu sagua gainetik konfirmazio kopurua ikusteko. @@ -3117,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3261,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3294,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3302,12 +3331,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3322,12 +3351,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3359,7 +3388,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3369,7 +3398,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3409,12 +3438,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3464,7 +3513,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands Komandoen lista @@ -3474,7 +3523,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Laguntza komando batean - + None @@ -3564,6 +3613,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3624,6 +3683,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3684,11 +3748,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message Mezua - - - Messate Type - - Miner: @@ -3725,12 +3784,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3745,12 +3799,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3825,12 +3874,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3840,12 +3889,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3855,12 +3904,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3870,22 +3919,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3895,27 +3944,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3925,7 +3974,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3935,12 +3984,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3950,7 +3999,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3960,7 +4009,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3970,7 +4019,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4000,7 +4049,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4010,12 +4059,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4025,12 +4074,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4040,7 +4089,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4055,12 +4104,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4075,12 +4124,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4090,12 +4139,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4115,17 +4164,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4135,22 +4184,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4160,7 +4209,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4170,7 +4219,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4180,7 +4229,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4190,22 +4239,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4230,20 +4279,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4255,12 +4309,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4270,12 +4324,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... Birbilatzen... - + Importing blockchain data file. @@ -4295,22 +4349,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading Zamaketa amaitua - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4320,27 +4374,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4350,12 +4404,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index 5653c1c8ca..f43b609c65 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... &Ű§Ù…Ű¶Ű§ÛŒ ÙŸÛŒŰ§Ù…... - + &Overview &ŰšŰ±Ű±ŰłÛŒ Ű§ŰŹÙ…Ű§Ù„ÛŒ @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O ŰźŰ±ÙˆŰŹ ۧŰČ ŰšŰ±Ù†Ű§Ù…Ù‡ - + &Options... &ŰȘÙ†ŰžÛŒÙ…Ű§ŰȘ... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &ÙŸÛŒŰŽŰȘÛŒŰšŰ§Ù†â€ŒÚŻÛŒŰ±ÛŒ ۧŰČ Ú©ÛŒÙ ٟول... - &Change Passphrase... &ŰȘŰșÛŒÛŒŰ± ÚŻŰ°Ű±ÙˆŰ§Ú˜Ù‡... - - Backup wallet to another location - ŰȘهیهٔ ÙŸŰŽŰȘÛŒŰšŰ§Ù† ۧŰČ Ú©ÛŒÙ ٟول ۯ۱ یک Ù…Ú©Ű§Ù† ŰŻÛŒÚŻŰ± - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O ۚۧ&ŰČŰšÛŒÙ†ÛŒ ÙŸÛŒŰ§Ù…... - + Wallet کیف ٟول @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &Ű§Ű±ŰłŰ§Ù„ @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] ŰąŰČÙ…Ű§ÛŒŰŽ ŰŽŰšÚ©Ù‡ - + Gridcoin client @@ -586,7 +562,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -639,7 +615,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -686,7 +662,7 @@ Address: %4 - + %n second(s) @@ -724,7 +700,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &ÙŰ§ÛŒÙ„ @@ -739,17 +745,12 @@ Address: %4 - - &Advanced - - - - + &Help &Ú©Ù…Ú©â€ŒŰ±ŰłŰ§Ù†ÛŒ - + Processed %n block(s) of transaction history. ÙŸŰ±ŰŻŰ§ŰČŰŽ %n ŰšÙ„Ű§Ú© ۧŰČ ŰȘŰ§Ű±ÛŒŰźÚ†Ù‡ ی ŰȘŰ±Ű§Ú©Ù†ŰŽ Ù‡Ű§ @@ -789,12 +790,12 @@ Address: %4 ÙˆŰ¶ŰčیŰȘ ŰšÙ‡â€ŒŰ±ÙˆŰČ - + Catching up... ŰšÙ‡â€ŒŰ±ÙˆŰČ Ű±ŰłŰ§Ù†ÛŒ... - + Sent transaction ŰȘŰ±Ű§Ú©Ù†ŰŽ Ű§Ű±ŰłŰ§Ù„ ŰŽŰŻ @@ -804,7 +805,7 @@ Address: %4 ŰȘŰ±Ű§Ú©Ù†ŰŽ ŰŻŰ±ÛŒŰ§ÙŰȘ ŰŽŰŻ - + URI handling @@ -815,17 +816,13 @@ Address: %4 URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - کیف ٟول <b>Ű±Ù…ŰČÙ†ÚŻŰ§Ű±ÛŒ ŰŽŰŻÙ‡</b> ۧ۳ŰȘ و Ù‡Ù…â€ŒŰ§Ú©Ù†ÙˆÙ† <b>ۚۧŰČ</b> ۧ۳ŰȘ - Wallet is <b>encrypted</b> and currently <b>locked</b> کیف ٟول <b>Ű±Ù…ŰČÙ†ÚŻŰ§Ű±ÛŒ ŰŽŰŻÙ‡</b> ۧ۳ŰȘ و Ù‡Ù…â€ŒŰ§Ú©Ù†ÙˆÙ† <b>قفل</b> ۧ۳ŰȘ - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -915,10 +912,6 @@ Address: %4 Priority - - List mode - Ù…ŰŻÙ„ Ù„ÛŒŰłŰȘ - Amount @@ -1284,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1502,10 +1495,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Ù†ÚŻŰ§ŰŽŰȘ ŰŻŰ±ÚŻŰ§Ù‡ ŰŽŰšÚ©Ù‡ ۚۧ ۧ۳ŰȘÙŰ§ŰŻÙ‡ ۧŰČ ÙŸŰ±ÙˆŰȘکل &UPnP - - Proxy &IP: - Űą&ی‌ٟی ÙŸŰ±Ű§Ú©ŰłÛŒ: - &Port: @@ -1734,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1800,7 +1797,7 @@ This label turns red, if the priority is smaller than "medium". - + Boost version @@ -1817,7 +1814,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A Ù†Ű§Ù…ÙˆŰŹÙˆŰŻ @@ -1907,7 +1904,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + &Information &Ű§Ű·Ù„Ű§ŰčۧŰȘ @@ -1992,7 +1994,7 @@ This label turns red, if the priority is smaller than "medium". ŰšŰ±Ű§ÛŒ Ù†Ù…Ű§ÛŒŰŽ یک Ù…Ű±ÙˆŰ± کلی ۧŰČ ŰŻŰłŰȘÙˆŰ±Ű§ŰȘ Ù…Ù…Ú©Ù†ŰŒ Űčۚۧ۱ŰȘ <b>help</b> ۱ۧ ŰšÙ†ÙˆÛŒŰłÛŒŰŻ. - + %1 B %1 ŰšŰ§ÛŒŰȘ @@ -2027,7 +2029,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2294,22 +2296,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: A&Ù…ŰšÙ„Űș : - + Pay &To: ÙŸŰ±ŰŻŰ§Űź&ŰȘ ŰšÙ‡: - + &Label: &ۚ۱چ۳ۚ: - + Alt+A Alt+A @@ -2329,12 +2331,12 @@ This label turns red, if the priority is smaller than "medium". ÙŸÛŒŰ§Ù…: - + Form ÙŰ±Ù… - + Enter a label for this address to add it to your address book @@ -2355,17 +2357,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2612,22 +2609,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2745,10 +2767,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Ű§Ű·Ù„Ű§ŰčۧŰȘ - Amount @@ -2778,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". Ű§ÛŒÙ† ÙŸŰ§Ù†Ù„ ŰŽŰ§Ù…Ù„ ŰȘÙˆŰ”ÛŒÙ Ú©Ű§Ù…Ù„ÛŒ ۧŰČ ŰŹŰČŰŠÛŒŰ§ŰȘ ŰȘŰ±Ű§Ú©Ù†ŰŽ ۧ۳ŰȘ - - View Attachment - - - - + Execute Contract @@ -2792,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &ۚ۳ŰȘن - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date ŰȘŰ§Ű±ÛŒŰź @@ -2878,7 +2881,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2898,32 +2901,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3117,17 +3130,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - ÙŸÙ†Ù‡Ű§Ù† Ú©Ű±ŰŻÙ† - - VotingChartDialog - + Poll Results @@ -3271,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3304,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3312,12 +3318,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ÚŻŰČÛŒÙ†Ù‡â€ŒÙ‡Ű§: - + This help message @@ -3352,12 +3358,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3367,7 +3373,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3377,7 +3383,7 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) @@ -3387,22 +3393,22 @@ This label turns red, if the priority is smaller than "medium". ۧŰȘŰ”Ű§Ù„ ŰšÙ‡ یک ÚŻŰ±Ù‡ ŰšŰ±Ű§ÛŒ ŰŻŰ±ÛŒŰ§ÙŰȘ ŰąŰŻŰ±Űłâ€ŒÙ‡Ű§ÛŒ همŰȘۧ و Ù‚Ű·Űč ۧŰȘŰ”Ű§Ù„ ÙŸŰł ۧŰČ Ű§ŰȘÙ…Ű§Ù… ŰčÙ…Ù„ÛŒŰ§ŰȘ - + Specify your own public address ۹ۯ۱۳ Űčمومی ŰźÙˆŰŻ ۱ۧ Ù…ŰŽŰźŰ” Ú©Ù†ÛŒŰŻ - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3412,27 +3418,27 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3442,7 +3448,7 @@ This label turns red, if the priority is smaller than "medium". - + Use UPnP to map the listening port (default: 1 when listening) @@ -3452,12 +3458,12 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3467,7 +3473,7 @@ This label turns red, if the priority is smaller than "medium". ÙŸŰ°ÛŒŰ±ŰŽ ŰŻŰłŰȘÙˆŰ±Ű§ŰȘ ۟۷ ÙŰ±Ù…Ű§Ù† و ŰŻŰłŰȘÙˆŰ±Ű§ŰȘ JSON-RPC - + Run in the background as a daemon and accept commands ۧۏ۱ۧ ۯ۱ ÙŸŰŽŰȘ ŰČمینه ŰšÙ‡â€ŒŰ”ÙˆŰ±ŰȘ یک ŰłŰ±ÙˆÛŒŰł و ÙŸŰ°ÛŒŰ±ŰŽ ŰŻŰłŰȘÙˆŰ±Ű§ŰȘ @@ -3477,7 +3483,7 @@ This label turns red, if the priority is smaller than "medium". - + Output extra debugging information. Implies all other -debug* options @@ -3487,7 +3493,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3497,7 +3503,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3507,7 +3513,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3517,7 +3523,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3527,7 +3533,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -3542,7 +3548,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -3637,6 +3643,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3697,6 +3713,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3767,11 +3788,6 @@ This label turns red, if the priority is smaller than "medium". Message - - - Messate Type - - Miner: @@ -3808,12 +3824,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3823,12 +3834,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3853,12 +3859,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -3878,17 +3884,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -3898,22 +3904,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -3923,10 +3929,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -3943,17 +3954,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -3963,7 +3974,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -3978,22 +3989,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4013,17 +4024,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4033,42 +4044,42 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -4093,7 +4104,7 @@ This label turns red, if the priority is smaller than "medium". ۚ۳ŰȘن ÚŻŰČینه Ű§ÛŒŰŹŰ§ŰŻ - + Boinc Mining @@ -4103,7 +4114,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4143,12 +4154,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4233,7 +4264,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC Űčۚۧ۱ŰȘ ŰčŰšÙˆŰ± ŰšŰ±Ű§ÛŒ ۧ۱ŰȘۚۧ۷ۧŰȘ - + Execute command when the best block changes (%s in cmd is replaced by block hash) ŰČÙ…Ű§Ù†ÛŒ که ŰšÙ‡ŰȘŰ±ÛŒÙ† ŰšÙ„Ű§Ú© ŰȘŰșÛŒÛŒŰ± Ú©Ű±ŰŻŰŒ ŰŻŰłŰȘÙˆŰ± ۱ۧ ۧۏ۱ۧ کن (%s ۯ۱ cmd ۚۧ block hash ŰŹŰ§ÛŒÚŻŰČین ŰŽŰŻÙ‡ ۧ۳ŰȘ) @@ -4243,12 +4274,12 @@ This label turns red, if the priority is smaller than "medium". ŰšÙ‡ DNS ۧۏۧŰČه ŰšŰŻÙ‡ ŰȘۧ ŰšŰ±Ű§ÛŒ addnode ی seednode و ۧŰȘŰ”Ű§Ù„ ŰŹŰłŰȘŰŹÙˆ Ú©Ù†ŰŻ - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4280,12 +4311,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: ۧ۳ŰȘÙŰ§ŰŻÙ‡: @@ -4295,7 +4326,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -4320,12 +4351,12 @@ If the file does not exist, create it with owner-readable-only file permissions. ۹ۯ۱۳ ÙŸŰ±Ű§Ú©ŰłÛŒ ۧێŰȘŰšŰ§Ù‡ %s - + Unknown network specified in -onlynet: '%s' ŰŽŰšÚ©Ù‡ Ù…ŰŽŰźŰ” ŰŽŰŻÙ‡ ŰșÛŒŰ±Ù‚Ű§ŰšÙ„ ŰŽÙ†Ű§ŰłŰ§ÛŒÛŒ ۯ۱ onlynet: '%s' - + Insufficient funds ŰšÙˆŰŻ ŰŹÙ‡ Ù†Ű§ Ú©Ű§ÙÛŒ @@ -4335,17 +4366,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ۚۧ۱ ÚŻÛŒŰ±ÛŒ ێۧ۟۔ ŰšÙ„ÙˆÚ© - + Add a node to connect to and attempt to keep the connection open ŰšÙ‡ ۧŰȘŰ”Ű§Ù„ یک ÚŻŰ±Ù‡ Ű§Ű¶Ű§ÙÙ‡ Ú©Ù†ÛŒŰŻ و ۧŰȘŰ”Ű§Ù„ ۱ۧ ۚۧŰČ Ù†ÚŻŰ§Ù‡ ŰŻŰ§Ű±ÛŒŰŻ - + Loading wallet... ۚۧ۱ ÚŻÛŒŰ±ÛŒ ÙˆŰ§Ù„ŰȘ - + Cannot downgrade wallet Ű§Ù…Ú©Ű§Ù† ŰȘنŰČل Ù†ŰłŰźÙ‡ ۯ۱ wallet ÙˆŰŹÙˆŰŻ Ù†ŰŻŰ§Ű±ŰŻ @@ -4355,17 +4386,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ۹ۯ۱۳ ÙŸÛŒŰŽ ÙŰ±Ű¶ Ù‚Ű§ŰšÙ„ Ű°ŰźÛŒŰ±Ù‡ Ù†ÛŒŰłŰȘ - + Rescanning... Ű§ŰłÚ©Ű§Ù† Ù…ŰŹŰŻŰŻ - + Done loading ۚۧ۱ ÚŻÛŒŰ±ÛŒ Ű§Ù†ŰŹŰ§Ù… ŰŽŰŻÙ‡ ۧ۳ŰȘ - + Error ۟۷ۧ diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts index bdcf58dea6..96adf001f9 100644 --- a/src/qt/locale/bitcoin_fa_IR.ts +++ b/src/qt/locale/bitcoin_fa_IR.ts @@ -299,17 +299,17 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Ű§Ù…Ű¶Ű§ و ÙŸÛŒŰ§Ù… - + Gridcoin - + &Overview و ۚۧŰČŰšÛŒÙ†ÛŒ @@ -420,28 +420,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -451,7 +465,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -496,24 +510,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -530,7 +539,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -583,7 +592,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -593,13 +602,13 @@ Address: %4 - + URI handling - + %n second(s) ago @@ -627,7 +636,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -680,7 +689,7 @@ Address: %4 - + %n second(s) @@ -708,7 +717,7 @@ Address: %4 - + &Options... و Ű§Ù†ŰȘŰźŰ§ŰšÙ‡Ű§ @@ -727,19 +736,11 @@ Address: %4 Encrypt or decrypt wallet - - &Backup Wallet... - و ÚŻŰ±ÙŰȘن Ù†ŰłŰźÙ‡ ÙŸÛŒŰŽŰȘÛŒŰšŰ§Ù† ۧŰČ wallet - &Change Passphrase... ŰȘŰșÛŒÛŒŰ± Ű±Ù…ŰČ/ÙŸÙŽŰł ÙŰ±ÙÛŒŰČ - - Backup wallet to another location - ÚŻŰ±ÙŰȘن Ù†ŰłŰźÙ‡ ÙŸÛŒŰŽŰȘÛŒŰšŰ§Ù† ۯ۱ ŰąŰŻŰ±ŰłÛŒ ŰŻÛŒÚŻŰ± - Change the passphrase used for wallet encryption @@ -756,17 +757,17 @@ Address: %4 - + Wallet کیف ٟول - + &Send و Ű§Ű±ŰłŰ§Ù„ - + &Show / Hide &Ù†Ù…Ű§ÛŒŰŽ/ ŰčŰŻÙ… Ù†Ù…Ű§ÛŒŰŽ و @@ -781,7 +782,7 @@ Address: %4 - + &File و ÙŰ§ÛŒÙ„ @@ -791,22 +792,22 @@ Address: %4 و ŰȘÙ†ŰžÛŒÙ…Ű§ŰȘ - + &Help و Ű±Ű§Ù‡Ù†Ù…Ű§ - + Up to date Ű±ÙˆŰČŰąÙ…ŰŻ - + Catching up... ۯ۱ Ű­Ű§Ù„ Ű±ÙˆŰČŰąÙ…ŰŻ ۳ۧŰČی.. - + Sent transaction Ű§Ű±ŰłŰ§Ù„ ŰȘŰ±Ű§Ú©Ù†ŰŽ @@ -816,16 +817,12 @@ Address: %4 ŰȘŰ±Ű§Ú©Ù†ŰŽ ŰŻŰ±ÛŒŰ§ÙŰȘی - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - wallet Ű±Ù…ŰČÚŻŰ°Ű§Ű±ÛŒ ŰŽŰŻ و ۯ۱ Ű­Ű§Ù„ ۭۧ۶۱ ۧŰČ Ű­Ű§Ù„ŰȘ قفل ۯ۱ ŰąÙ…ŰŻÙ‡ ۧ۳ŰȘ - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> wallet Ű±Ù…ŰČÚŻŰ°Ű§Ű±ÛŒ ŰŽŰŻ و ۯ۱ Ű­Ű§Ù„ ۭۧ۶۱ قفل ۧ۳ŰȘ - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -1280,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1726,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1787,7 +1792,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + Client version ÙˆÛŒŰ±Ű§ÛŒŰŽ Ú©Ù†ŰłÙˆÙ„ RPC @@ -1807,12 +1812,12 @@ This label turns red, if the priority is smaller than "medium". ŰȘŰčۯۧۯ ŰČÙ†ŰŹÛŒŰ±Ù‡ Ù‡Ű§ÛŒ ۭۧ۶۱ - + Gridcoin - Debug Console - + &Information @@ -1834,7 +1839,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1963,6 +1968,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1989,7 +1999,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2286,22 +2296,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: و میŰČŰ§Ù† ÙˆŰŹÙ‡ - + Pay &To: ÙŸŰ±ŰŻŰ§ŰźŰȘ و ŰšÙ‡ چه Ú©ŰłÛŒ - + &Label: و ۚ۱چ۳ۚ - + Paste address from clipboard ۹ۯ۱۳ ۱ۧ ۚ۱ کلیٟ ŰšÙˆŰ±ŰŻ Ú©ÙŸÛŒ Ú©Ù†ÛŒŰŻ @@ -2311,12 +2321,12 @@ This label turns red, if the priority is smaller than "medium". ÙŸÛŒŰ§Ù…: - + Form ÙŰ±Ù… - + Enter a label for this address to add it to your address book @@ -2347,17 +2357,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2555,12 +2560,42 @@ This label turns red, if the priority is smaller than "medium". - + Source - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2573,7 +2608,7 @@ This label turns red, if the priority is smaller than "medium". - + Open for %n more block(s) @@ -2627,12 +2662,7 @@ This label turns red, if the priority is smaller than "medium". - - Generated, PoS - - - - + unknown @@ -2766,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". Ű§ÛŒÙ† ۚ۟ێ ŰŹŰČŰŠÛŒŰ§ŰȘ ŰȘŰ±Ű§Ú©Ù†ŰŽ ۱ۧ Ù†ŰŽŰ§Ù† می ŰŻÙ‡ŰŻ - - View Attachment - - - - + Execute Contract @@ -2780,26 +2805,16 @@ This label turns red, if the priority is smaller than "medium". C&lose ۚ۳ŰȘن - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Unconfirmed - + Received from @@ -2809,7 +2824,7 @@ This label turns red, if the priority is smaller than "medium". - + Date ŰȘŰ§Ű±ÛŒŰź @@ -2876,7 +2891,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2886,32 +2901,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3105,17 +3130,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - ÙŸÙ†Ù‡Ű§Ù† Ú©Ű±ŰŻÙ† - - VotingChartDialog - + Poll Results @@ -3259,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3292,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3300,17 +3318,17 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Ű§Ù†ŰȘŰźŰ§ŰšÙ‡Ű§: - + Specify data directory ŰŻŰ§ÛŒŰ±Ú©ŰȘÙˆŰ±ÛŒ ŰŻŰ§ŰŻÙ‡ ۱ۧ Ù…ŰŽŰźŰ” کن - + Accept command line and JSON-RPC commands command line و JSON-RPC commands ۱ۧ Ù‚ŰšÙˆÙ„ Ú©Ù†ÛŒŰŻ @@ -3405,6 +3423,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3465,6 +3493,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3520,11 +3553,6 @@ This label turns red, if the priority is smaller than "medium". Message - - - Messate Type - - Miner: @@ -3561,12 +3589,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3576,12 +3599,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3661,12 +3679,12 @@ This label turns red, if the priority is smaller than "medium". Ű±Ù…ŰČ ŰšŰ±Ű§ÛŒ ۧ۱ŰȘۚۧ۷ۧŰȘِ JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) ŰŻŰłŰȘÙˆŰ± ۱ۧ وقŰȘی ŰšÙ‡ŰȘŰ±ÛŒÙ† ŰšÙ„Ű§Ú© ŰȘŰșÛŒÛŒŰ± ک۱ۯ ۧۏ۱ۧ کن (%s ۯ۱ ŰŻŰłŰȘÙˆŰ± ŰȘÙˆŰłŰ· block hash ŰŹŰ§ÛŒÚŻŰČین ŰŽŰŻÙ‡ ۧ۳ŰȘ) - + Loading addresses... Ù„ÙˆŰŻ ŰŽŰŻÙ† ŰąŰŻŰ±ŰłÙ‡Ű§.. @@ -3681,12 +3699,12 @@ This label turns red, if the priority is smaller than "medium". Ù„ÙˆŰŻ ŰŽŰŻÙ† Ù†Ù…Ű§ÛŒÙ‡ ŰšÙ„Ű§Ú©Ù‡Ű§.. - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3706,12 +3724,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo یک ÚŻŰ±Ù‡ ŰšŰ±Ű§ÛŒ ۧŰȘŰ”Ű§Ù„ Ű§Ű¶Ű§ÙÙ‡ Ú©Ù†ÛŒŰŻ و ŰȘÙ„Ű§ŰŽ Ú©Ù†ÛŒŰŻ ŰȘۧ ۧŰȘŰ”Ű§Ù„ ۱ۧ ۚۧŰČ Ù†ÚŻŰ§Ù‡ ŰŻŰ§Ű±ÛŒŰŻ - + Loading wallet... wallet ۯ۱ Ű­Ű§Ù„ Ù„ÙˆŰŻ ŰŽŰŻÙ† ۧ۳ŰȘ... - + Cannot downgrade wallet Ù‚Ű§ŰšÙ„ÛŒŰȘ ۚ۱گێŰȘ ŰšÙ‡ Ù†ŰłŰźÙ‡ Ù‚ŰšÙ„ÛŒ ŰšŰ±Ű§ÛŒ wallet Ű§Ù…Ú©Ű§Ù† ÙŸŰ°ÛŒŰ± Ù†ÛŒŰłŰȘ @@ -3721,22 +3739,22 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo ۹ۯ۱۳ ÙŸÛŒŰŽ ÙŰ±Ű¶ Ù‚Ű§ŰšÙ„ Ű°ŰźÛŒŰ±Ù‡ Ù†ÛŒŰłŰȘ - + Rescanning... Ű§ŰłÚ©Ù†Ù ŰŻÙˆŰšŰ§Ű±Ù‡... - + Done loading ۧŰȘÙ…Ű§Ù… Ù„ÙˆŰŻ ŰŽŰŻÙ† - + Error ۟۷ۧ - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3768,7 +3786,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3778,7 +3796,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3818,12 +3836,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3853,7 +3891,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3868,7 +3906,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3898,12 +3936,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3913,12 +3951,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3928,7 +3966,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect only to the specified node(s) @@ -3938,22 +3976,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3963,27 +4001,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3993,7 +4031,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -4003,22 +4041,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -4028,7 +4066,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4043,7 +4081,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4053,22 +4091,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4078,7 +4116,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4093,12 +4131,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4113,12 +4151,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4128,12 +4166,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4153,17 +4191,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4173,22 +4211,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4198,10 +4236,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4218,7 +4261,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4228,7 +4271,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4238,22 +4281,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4268,22 +4311,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4303,17 +4346,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4323,37 +4366,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts index af653c3757..bc9d15d721 100644 --- a/src/qt/locale/bitcoin_fi.ts +++ b/src/qt/locale/bitcoin_fi.ts @@ -23,21 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -TĂ€mĂ€ on kokeellista ohjelmistoa. - -LevitetÀÀn MIT/X11 ohjelmistolisenssin alaisuudessa. Tarkemmat tiedot löytyvĂ€t tiedostosta COPYING tai osoitteesta http://www.opensource.org/licenses/mit-license.php. - -TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-työkalupakettia varten (http://www.openssl.org/), Eric Youngin (eay@cryptsoft.com) kehittĂ€mĂ€n salausohjelmiston sekĂ€ Thomas Bernardin UPnP-ohjelmiston. - - AddressBookPage @@ -314,12 +299,12 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty BitcoinGUI - + Sign &message... &Allekirjoita viesti... - + &Overview &YleisnĂ€kymĂ€ @@ -415,7 +400,7 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty Sulje ohjelma - + &Options... &Asetukset... @@ -429,19 +414,11 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty Encrypt or decrypt wallet Salaa tai pura salaus lompakosta - - &Backup Wallet... - &Varmuuskopioi Lompakko... - &Change Passphrase... &Vaihda Tunnuslause... - - Backup wallet to another location - Varmuuskopioi lompakko toiseen sijaintiin - Change the passphrase used for wallet encryption @@ -493,7 +470,7 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty Varmista &viesti... - + Wallet Lompakko @@ -503,7 +480,7 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty Gridcoin - + &Send &LĂ€hetĂ€ @@ -523,28 +500,12 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty NĂ€ytĂ€ tietoja Gridcoinista - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -554,7 +515,7 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty - + &Diagnostics @@ -584,14 +545,14 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty - + [testnet] [testnet] - + Gridcoin client Gridcoin-asiakas @@ -601,23 +562,7 @@ TĂ€mĂ€ tuote sisĂ€ltÀÀ OpenSSL-projektin kehittĂ€mÀÀ ohjelmistoa OpenSSL-ty %1 aktiivinen yhteys Gridcoin-verkkoon - %1 second(s) ago - %1 sekunti sitten - - - %1 minute(s) ago - %1 minuutti sitten - - - %1 hour(s) ago - %1 tunti sitten - - - %1 day(s) ago - %1 pĂ€ivĂ€ sitten - - - + Last received block was generated %1. Viimeinen vastaanotettu lohko generoitu %1. @@ -676,7 +621,7 @@ Osoite: %4 {1 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -723,7 +668,7 @@ Osoite: %4 {1 - + %n second(s) @@ -765,27 +710,37 @@ Osoite: %4 {1 - Not staking because wallet is locked - Ei osakkaana koska lompakko on lukittu + + Scraper: waiting on wallet to sync. + - Not staking because wallet is offline - Ei osakkaana koska lompakko on offline-tilassa + + Scraper: superblock not needed - inactive. + - Not staking because wallet is syncing - Ei osakkaana koska lompakko synkronoituu + + Scraper: downloading and processing stats. + - Not staking because you don't have mature coins - Ei osakkaana koska sinulle ei ole erÀÀntynyt kolikoita + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + - Not staking - Ei osakkaana + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Tiedosto @@ -800,17 +755,12 @@ Osoite: %4 {1 - - &Advanced - - - - + &Help &Apua - + Processed %n block(s) of transaction history. Prosessoitu %n lohko rahansiirtohistoriasta. @@ -855,12 +805,12 @@ Osoite: %4 {1 Rahansiirtohistoria on ajan tasalla - + Catching up... Saavutetaan verkkoa... - + Sent transaction LĂ€hetetyt rahansiirrot @@ -870,18 +820,7 @@ Osoite: %4 {1 Saapuva rahansiirto - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - PĂ€ivĂ€: %1 -MÀÀrĂ€: %2 -Tyyppi: %3 -Osoite: %4 - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI-merkkijonoa ei voida jĂ€sentÀÀ! TĂ€mĂ€ voi johtua vÀÀrĂ€stĂ€ Gridcoin-osoitteesta tai vÀÀrĂ€ssĂ€ muodossa olevista URI-parametreistĂ€. @@ -892,17 +831,13 @@ Osoite: %4 URI handling URI-merkkijonojen kĂ€sittely - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Lompakko on <b>salattu</b> ja tĂ€llĂ€ hetkellĂ€ <b>avoinna</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Lompakko on <b>salattu</b> ja tĂ€llĂ€ hetkellĂ€ <b>lukittuna</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Vakava virhe kohdattu. Gridcoin-ohjelma ei voi enÀÀ jatkaa turvallisesti ja sulkee itsensĂ€. @@ -910,7 +845,7 @@ Osoite: %4 ClientModel - + Network Alert VerkkohĂ€lytys @@ -992,10 +927,6 @@ Osoite: %4 (un)select all (epĂ€)valitse kaikki - - List mode - Listarakenne - Amount @@ -1375,7 +1306,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. NewPollDialog - + Create Poll @@ -1588,10 +1519,6 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Map port using &UPnP Portin uudelleenohjaus &UPnP:llĂ€ - - Proxy &IP: - Proxyn &IP: - &Port: @@ -1825,6 +1752,14 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Ei ajan tasalla + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1886,7 +1821,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. RPCConsole - + @@ -1898,7 +1833,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + N/A Ei saatavilla @@ -1978,7 +1913,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Ulos: - + + &Scraper + + + + Debug log file Debug lokitiedosto @@ -2008,7 +1948,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Kirjoita <b>help</b> nĂ€hdĂ€ksesi yleiskatsauksen kĂ€ytettĂ€vissĂ€ olevista komennoista. - + %1 B %1 B @@ -2043,12 +1983,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + Gridcoin - Debug Console - + Boost version @@ -2118,7 +2058,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. PÀÀteohjelman nimi - + Welcome to the Gridcoin RPC console! @@ -2385,22 +2325,22 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. SendCoinsEntry - + A&mount: M&ÀÀrĂ€: - + Pay &To: Maksun saaja: - + &Label: &Nimi: - + Alt+A Alt+A @@ -2420,12 +2360,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Viesti: - + Form Kaavake - + Enter a label for this address to add it to your address book Anna nimi tĂ€lle osoitteelle, jos haluat lisĂ€tĂ€ sen osoitekirjaan @@ -2446,17 +2386,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Poista tĂ€mĂ€ vastaanottaja - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2705,26 +2640,47 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + Source LĂ€hde - Generated - Generoitu + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From LĂ€hettĂ€jĂ€ @@ -2838,27 +2794,11 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Transaction Inputs - - Transaction ID - Siirtotunnus - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Tietoa - - - Transaction - Rahansiirto - - - Inputs - SisÀÀntulot - Amount @@ -2888,12 +2828,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. TĂ€mĂ€ ruutu nĂ€yttÀÀ yksityiskohtaisen tiedon rahansiirrosta - - View Attachment - - - - + Execute Contract @@ -2902,21 +2837,11 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. C&lose S&ulje - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Aika @@ -2989,7 +2914,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Generoitu mutta ei hyvĂ€ksytty - + Received with Vastaanotettu osoitteella @@ -3009,32 +2934,42 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Maksu itsellesi - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (ei saatavilla) - + Transaction status. Hover over this field to show number of confirmations. Rahansiirron tila. SiirrĂ€ osoitin kentĂ€n pÀÀlle nĂ€hdĂ€ksesi vahvistusten lukumÀÀrĂ€. @@ -3228,17 +3163,10 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. kenelle - - UpgradeDialog - - Hide - Piilota - - VotingChartDialog - + Poll Results @@ -3382,7 +3310,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. VotingVoteDialog - + PlaceVote @@ -3415,7 +3343,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. WalletModel - + Sending... LĂ€hetetÀÀn... @@ -3423,12 +3351,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. bitcoin-core - + Options: Asetukset: - + This help message TĂ€mĂ€ ohjeviesti @@ -3463,12 +3391,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. MÀÀritĂ€ yhteyden aikakataisu millisekunneissa (vakioasetus: 5000) - + Connect through socks proxy YhdistĂ€ SOCKS-vĂ€lityspalvelimen lĂ€vitse - + Select the version of socks proxy to use (4-5, default: 5) Valitse SOCKS-vĂ€lityspalvelimen versio (4-5, oletus 5) @@ -3478,7 +3406,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. KĂ€ytĂ€ vĂ€lityspalvelinta saavuttaaksesi tor:n piilotetut palvelut (oletus: sama kuin -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Kuuntele yhteyksiĂ€ portissa <port> (oletus: 15714 tai testiverkko: 25714) {32749 ?} {32748)?} @@ -3488,7 +3416,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. PidĂ€ enintÀÀn <n> yhteyttĂ€ verkkoihin (oletus: 125) - + Connect only to the specified node(s) YhidstĂ€ ainoastaan mÀÀrĂ€ttyihin noodeihin @@ -3498,26 +3426,22 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. YhdistĂ€ noodiin hakeaksesi naapurien osoitteet ja katkaise yhteys - + Specify your own public address MÀÀritĂ€ julkinen osoitteesi - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) YhdistĂ€ vain noodeihin verkossa <net> (IPv4, IPv6 tai Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Hae oma IP osoite (vakioasetus: 1 kun kuuntelemassa ja ei -externalip) - Find peers using internet relay chat (default: 0) - Etsi vertaisiasi kĂ€yttĂ€en Internet Relay Chatia (oletus: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) HyvĂ€ksy yhteyksiĂ€ ulkopuolelta (vakioasetus: 1 jos -proxy tai -connect ei mÀÀritelty) @@ -3527,26 +3451,22 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. LiitĂ€ annettuun osoitteeseen. KĂ€ytĂ€ [host]:port merkintÀÀ IPv6:lle - + Find peers using DNS lookup (default: 1) Etsi vertaisiasi kĂ€yttĂ€en DNS-nimihakua (oletus: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synkronoi kello muiden noodien kanssa. Poista kĂ€ytöstĂ€, jos jĂ€rjestelmĂ€si aika on tarkka esim. pĂ€ivittÀÀ itsensĂ€ NTP-palvelimelta. (oletus: 1) - Sync checkpoints policy (default: strict) - Synkronoi tallennuspisteiden kĂ€ytĂ€nnöt (oletus: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) Kynnysarvo aikakatkaisulle heikosti toimiville verkoille (oletus: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Sekuntien mÀÀrĂ€, kuinka kauan uudelleenkytkeydytÀÀn verkkoihin (oletus: 86400) @@ -3641,6 +3561,16 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3701,6 +3631,11 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. ERROR + + + Entire balance reserved + + Expires @@ -3766,11 +3701,6 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Message Viesti - - - Messate Type - - Miner: @@ -3807,12 +3737,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - - No coins; - - - - + Offline; @@ -3822,12 +3747,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3907,12 +3827,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. KĂ€ytĂ€ UPnP:tĂ€ kuunneltavan portin avaamiseen (vakioasetus: 0) - + Fee per KB to add to transactions you send Rahansiirtopalkkio kilotavua kohden lĂ€hetettĂ€viin rahansiirtoihisi - + When creating transactions, ignore inputs with value less than this (default: 0.01) Rahansiirtoja luodessa jĂ€tĂ€ huomioimatta syötteet joiden arvo on vĂ€hemmĂ€n kuin tĂ€mĂ€ (oletus: 0.01) @@ -3922,12 +3842,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. HyvĂ€ksy merkkipohjaiset- ja JSON-RPC-kĂ€skyt - + Use the test network KĂ€ytĂ€ test -verkkoa - + Output extra debugging information. Implies all other -debug* options Tulosta lisĂ€ksi debug-tietoa, seuraa kaikkia muita -debug*-asetuksia @@ -3937,7 +3857,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Tulosta lisĂ€ksi verkon debug-tietoa - + Prepend debug output with timestamp LisÀÀ debug-tulosteiden alkuun aikaleimat @@ -3947,7 +3867,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. LĂ€hetĂ€ debug-tuloste kehittĂ€jille - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Kuuntele JSON-RPC-yhteyksiĂ€ portissa <port> (oletus: 15715 tai testiverkko: 25715) @@ -3957,7 +3877,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Salli JSON-RPC yhteydet tietystĂ€ ip-osoitteesta - + Send commands to node running on <ip> (default: 127.0.0.1) LĂ€hetĂ€ kĂ€skyjĂ€ solmuun osoitteessa <ip> (oletus: 127.0.0.1) @@ -3967,7 +3887,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Vaadi vaihtorahalle vahvistus (oletus: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Vahvista, ettĂ€ rahansiirtoskriptit kĂ€yttĂ€vĂ€t sÀÀntöjen mukaisia PUSH-toimijoita (oletus: 1) @@ -3977,7 +3897,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Suorita komento kun olennainen varoitus on saatu (%s komennossa korvattu viestillĂ€) - + Upgrade wallet to latest format PĂ€ivitĂ€ lompakko uusimpaan formaattiin @@ -3992,7 +3912,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Skannaa uudelleen lohkoketju lompakon puuttuvien rahasiirtojen vuoksi - + Attempt to recover private keys from a corrupt wallet.dat YritetÀÀn palauttaa yksityisiĂ€ salausavaimia korruptoituneesta wallet.dat-tiedostosta @@ -4012,7 +3932,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + Boinc Mining @@ -4022,7 +3942,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + Error obtaining next project. Error 06172014. @@ -4072,12 +3992,32 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4092,12 +4032,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Aseta lohkon maksimikoko tavuissa (oletus: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Aseta maksimikoko korkean prioriteetin/pienen siirtokulun maksutapahtumille tavuina (oletus: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL asetukset (katso Bitcoin WikistĂ€ tarkemmat SSL ohjeet) @@ -4117,21 +4057,17 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Palvelimen yksityisavain (oletus: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - HyvĂ€ksytyt salaustyypit (oletus: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' -paytxfee=<amount>: '%s' on virheellinen - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Varoitus: -paytxfee on asetettu erittĂ€in korkeaksi! TĂ€mĂ€ on maksukulu jonka tulet maksamaan kun lĂ€hetĂ€t siirron. - + Invalid amount for -mininput=<amount>: '%s' EpĂ€kelpo mÀÀrĂ€ parametrille -mininput=<amount>: '%s' @@ -4141,22 +4077,22 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. - + Wallet %s resides outside data directory %s. Lompakko %s on datahakemiston %s ulkopuolella. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Ei voida saavuttaa lukkoa datatiedostossa %s. Gridcoin-asiakasohjelma on ehkĂ€ jo kĂ€ynnissĂ€. - + Verifying database integrity... Tarkistetaan tietokannan eheyttĂ€... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Virhe alustettaessa tietokantaympĂ€ristöÀ %s! Palauttaaksesi sen, TEE VARMUUSKOPIO HAKEMISTOSTA ja poista tĂ€mĂ€n jĂ€lkeen kaikki hakemiston tiedostot paitsi wallet.dat-tiedosto. @@ -4166,10 +4102,15 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Varoitus: wallet.dat-tiedosto on korruptoitunut, data pelastettu! AlkuperĂ€inen wallet.dat on tallennettu nimellĂ€ wallet.{aikaleima}.bak kohteeseen %s; Jos saldosi tai rahansiirrot ovat vÀÀrĂ€t, sinun tulee palauttaa lompakko varmuuskopiosta. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4186,17 +4127,17 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. wallet.dat on korruptoitunut, pelastusyritys epĂ€onnistui - + Unknown -socks proxy version requested: %i Tuntematon -socks proxy versio pyydetty: %i - + Invalid -tor address: '%s' EpĂ€kelpo -tor-osoite: '%s' - + Cannot resolve -bind address: '%s' -bind osoitteen '%s' selvittĂ€minen epĂ€onnistui @@ -4206,16 +4147,10 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. -externalip osoitteen '%s' selvittĂ€minen epĂ€onnistui - + Invalid amount for -reservebalance=<amount> EpĂ€kelpo mÀÀrĂ€ -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - Ei voitu kirjata tallennuspistettĂ€, vÀÀrĂ€ checkpointkey? - - Error loading blkindex.dat @@ -4227,22 +4162,22 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Virhe ladattaessa wallet.dat-tiedostoa: Lompakko vioittunut - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Varoitus: Virhe luettaessa wallet.dat-tiedostoa! Kaikki avaimet luettiin oikein, mutta rahansiirtodata tai osoitekirjan kentĂ€t voivat olla puuttuvat tai vÀÀrĂ€t. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Virhe ladattaessa wallet.dat-tiedostoa: Lompakko tarvitsee uudemman version Gridcoin-asiakasohjelmasta - + Wallet needed to be rewritten: restart Gridcoin to complete Lompakko on kirjoitettava uudelleen: kĂ€ynnistĂ€ Gridcoin-asiakasohjelma uudelleen pÀÀttÀÀksesi toiminnon - + Error loading wallet.dat Virhe ladattaessa wallet.dat-tiedostoa @@ -4262,17 +4197,17 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Virhe: Ei voitu kĂ€ynnistÀÀ noodia - + Unable to bind to %s on this computer. Gridcoin is probably already running. Ei voitu liittÀÀ %s tĂ€llĂ€ tietokoneella. Gridcoin-asiakasohjelma on jo ehkĂ€ pÀÀllĂ€. - + Unable to bind to %s on this computer (bind returned error %d, %s) Kytkeytyminen %s tĂ€llĂ€ tietokonella ei onnistu (kytkeytyminen palautti virheen %d, %s) - + Error: Wallet locked, unable to create transaction Virhe: Lompakko lukittu, rahansiirtoa ei voida luoda @@ -4282,59 +4217,47 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Virhe: Lompakko avattu vain osakkuutta varten, rahansiirtoja ei voida luoda. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Virhe: TĂ€mĂ€ rahansiirto tarvitsee rahansiirtopalkkion, kooltaan %s, kokonsa, monimutkaisuutensa tai aikaisemmin saatujen varojen kĂ€ytön takia. - + Error: Transaction creation failed Virhe: Rahansiirron luonti epĂ€onnistui - + Sending... LĂ€hetetÀÀn... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Virhe: Rahansiirto on evĂ€tty. TĂ€mĂ€ voi tapahtua jos joitakin kolikoistasi lompakossasi on jo kĂ€ytetty, tai jos olet kĂ€yttĂ€nyt wallet.dat-tiedoston kopiota ja rahat olivat kĂ€ytetyt kopiossa, mutta ei merkitty kĂ€ytetyksi tĂ€ssĂ€. - + Invalid amount Virheellinen mÀÀrĂ€ - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Varoitus: Tarkista, ettĂ€ tietokoneesi aika ja pĂ€ivĂ€mÀÀrĂ€ ovat oikeassa! Jos kellosi on vÀÀrĂ€ssĂ€, Gridcoin ei toimi oikein. - Warning: This version is obsolete, upgrade required! - Varoitus: TĂ€mĂ€ versio on vanhentunut, pĂ€ivitys tarpeen! - - - WARNING: synchronized checkpoint violation detected, but skipped! - VAROITUS: synkronoidun tallennuspisteen rikkomista havaittu, mutta ohitettu! - - - + Warning: Disk space is low! Varoitus: Kiintolevytila on vĂ€hissĂ€! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - VAROITUS: EpĂ€kelpo tarkistuspiste löydetty! Ilmoitetut rahansiirrot eivĂ€t vĂ€lttĂ€mĂ€ttĂ€ pidĂ€ paikkaansa! Sinun tĂ€ytyy pĂ€ivittÀÀ asiakasohjelma, tai ilmoittaa kehittĂ€jille ongelmasta. - - - + Run in the background as a daemon and accept commands Aja taustalla daemonina ja hyvĂ€ksy komennot - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Suorita kĂ€sky kun lompakossa rahansiirto muuttuu (%s cmd on vaihdettu TxID kanssa) @@ -4344,12 +4267,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Lohkon luonnin asetukset: - + Failed to listen on any port. Use -listen=0 if you want this. Ei onnistuttu kuuntelemaan missÀÀn portissa. KĂ€ytĂ€ -listen=0 jos haluat tĂ€tĂ€. - + Specify wallet file (within data directory) Aseta lompakkotiedosto (data-hakemiston sisĂ€llĂ€) @@ -4374,7 +4297,7 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Salasana JSON-RPC-yhteyksille - + Execute command when the best block changes (%s in cmd is replaced by block hash) Suorita kĂ€sky kun paras lohko muuttuu (%s cmd on vaihdettu block hashin kanssa) @@ -4384,12 +4307,12 @@ TĂ€mĂ€ tarkoittaa, ettĂ€ ainakin %2 rahansiirtopalkkio tarvitaan. Salli DNS kyselyt -addnode, -seednode ja -connect yhteydessĂ€ - + To use the %s option KĂ€ytĂ€ %s optiota - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4423,12 +4346,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin. - + Gridcoin version Gridcoinin versio - + Usage: KĂ€yttö: @@ -4438,7 +4361,7 @@ Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin. - + List commands Lista komennoista @@ -4463,12 +4386,12 @@ Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin.Virheellinen proxy-osoite '%s' - + Unknown network specified in -onlynet: '%s' Tuntematon verkko -onlynet parametrina: '%s' - + Insufficient funds Lompakon saldo ei riitĂ€ @@ -4478,17 +4401,17 @@ Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin.Ladataan lohkoindeksiĂ€... - + Add a node to connect to and attempt to keep the connection open LinÀÀ solmu mihin liittyĂ€ pitÀÀksesi yhteyden auki - + Loading wallet... Ladataan lompakkoa... - + Cannot downgrade wallet Et voi pĂ€ivittÀÀ lompakkoasi vanhempaan versioon @@ -4498,17 +4421,17 @@ Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin.Oletusosoitetta ei voi kirjoittaa - + Rescanning... Skannataan uudelleen... - + Done loading Lataus on valmis - + Error Virhe diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts index 54890b972d..cbca4d988a 100644 --- a/src/qt/locale/bitcoin_fr.ts +++ b/src/qt/locale/bitcoin_fr.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Ce logiciel est expĂ©rimental. - -DistribuĂ© sous licence logicielle MIT/X11, voir le fichier COPYING joint ou http://www.opensource.org/licenses/mit-license.php. - -Ce produit comprend des logiciels dĂ©veloppĂ©s par le projet OpenSSL afin d'ĂȘtre utilisĂ©s dans la boĂźte Ă  outils OpenSSL (http://www.openssl.org/), un logiciel de chiffrement Ă©crit par Eric Young (eay@cryptsoft.com), et un logiciel UPnP dĂ©veloppĂ© par Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Ce produit comprend des logiciels dĂ©veloppĂ©s par le projet OpenSSL afin d&apos BitcoinGUI - + Sign &message... Signer un &message... - + &Overview &Vue d'ensemble @@ -414,7 +400,7 @@ Ce produit comprend des logiciels dĂ©veloppĂ©s par le projet OpenSSL afin d&apos Quitter l’application - + &Options... &Options
 @@ -429,7 +415,7 @@ Ce produit comprend des logiciels dĂ©veloppĂ©s par le projet OpenSSL afin d&apos Chiffrer ou dĂ©chiffrer le portefeuille - + %n second(s) ago il y a %n seconde @@ -461,7 +447,7 @@ Ce produit comprend des logiciels dĂ©veloppĂ©s par le projet OpenSSL afin d&apos - + Date: %1 Amount: %2 Type: %3 @@ -476,7 +462,7 @@ Adresse : %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -486,17 +472,39 @@ Adresse : %4 - &Backup Wallet... - Sauvegarder le &porte-monnaie... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Changer la phrase de passe... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + - Backup wallet to another location - Sauvegarder le porte-monnaie vers un autre emplacement + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Changer la phrase de passe... @@ -549,7 +557,7 @@ Adresse : %4 &VĂ©rifier un message... - + Wallet Porte-monnaie @@ -559,7 +567,7 @@ Adresse : %4 Gridcoin - + &Send &Envoyer @@ -568,30 +576,6 @@ Adresse : %4 &Receive &Recevoir - - &Rebuild Block Chain - &Reconstruire la Block Chain - - - Rebuild Block Chain - Reconstruire la Block Chain - - - &Download Blocks - &TĂ©lĂ©charger les Blocks - - - Download Blocks - TĂ©lĂ©charger les Blocks - - - &Upgrade Client - &Mise Ă  jour - - - Upgrade Client - Mise Ă  jour - &About Gridcoin @@ -603,36 +587,12 @@ Adresse : %4 Afficher des informations au sujet de Gridcoin - - &Neural Network - &RĂ©seau neural - - - - Neural Network - RĂ©seau neural - - - &Advanced Configuration - &Configuration avancĂ©e - - - Advanced Configuration - Configuration avancĂ©e - - - - &New User Wizard - &Assistant nouvel utilisateur - - - - + New User Wizard Assistant nouvel utilisateur - + &Voting &Votes @@ -642,15 +602,7 @@ Adresse : %4 Votes - &Foundation - &Fondation - - - Foundation - Fondation - - - + &Diagnostics &Diagnostics @@ -659,14 +611,6 @@ Adresse : %4 Diagnostics Diagnostics - - FA&Q - FA&Q - - - Interactive FAQ - FAQ interactive - Modify configuration options for Gridcoin @@ -688,14 +632,14 @@ Adresse : %4 - + [testnet] [testnet] - + Gridcoin client Client Gridcoin @@ -705,23 +649,7 @@ Adresse : %4 %1 connexions actives au rĂ©seau Gridcoin - %1 second(s) ago - il y a %1 secondes - - - %1 minute(s) ago - il y a %1 minutes - - - %1 hour(s) ago - il y a %1 heures - - - %1 day(s) ago - il y a %1 jours - - - + Last received block was generated %1. Le dernier block reçu Ă  Ă©tĂ© gĂ©nĂ©rĂ© %1. @@ -766,19 +694,7 @@ Adresse : %4 Attention! - Chemin vers BOINC erronĂ©! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Date : %1 -Montant : %2 -Type : %3 -Adresse : %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. L'adresse du portefeuille Gridcoin n'as pas pu ĂȘtre correctement identifiĂ©e, car invalide ou malformĂ©e. @@ -837,7 +753,7 @@ Adresse : %4 - + %n second(s) %n seconde @@ -869,39 +785,7 @@ Adresse : %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - Staking.<br>Vous avez %1 coins matures<br>Le poids du rĂ©seau est de %2<br>Temps <b>estimĂ©</b> avant intĂ©rĂȘts: %3. %4 - - - Not staking because wallet is locked - Pas de staking car votre portefeuille est verouillĂ© - - - Not staking because wallet is offline - Pas de staking car votre portefeuille est hors ligne - - - Not staking because wallet is syncing - Pas de staking car votre portefeuille est en cours de synchronisation - - - Not staking because you don't have mature coins and stake weight is too low. - Pas de staking car vous n'avez pas de Gridcoin mature et votre nombre de Gridcoins est trop faible. - - - Not staking because you don't have mature coins - Pas de staking car vos monnaies ne sont pas encore matures - - - Searching for mature coins... Please wait - Recherche de coins matures... Merci de patienter - - - Not staking - Pas de staking - - - + &File &Fichier @@ -916,17 +800,12 @@ Adresse : %4 &CommunautĂ© - - &Advanced - &AvancĂ© - - - + &Help &Aide - + Processed %n block(s) of transaction history. %n bloc d'historique transactionnel a Ă©tĂ© traitĂ©. @@ -939,12 +818,12 @@ Adresse : %4 À jour - + Catching up... Rattrapage
 - + Sent transaction Transaction envoyĂ©e @@ -954,16 +833,12 @@ Adresse : %4 Transaction entrante - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Le porte-monnaie est <b>chiffrĂ©</b> et est actuellement <b>dĂ©verrouillĂ©</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Le porte-monnaie est <b>chiffrĂ©</b> et actuellement <b>verrouillĂ©</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Une erreur fatale a Ă©tĂ© rencontrĂ©e. L'application Gridcoin ne peut plus ĂȘtre s'exĂ©cuter de façon correcte et va se terminer. @@ -971,7 +846,7 @@ Adresse : %4 ClientModel - + Network Alert Alerte rĂ©seau @@ -1053,10 +928,6 @@ Adresse : %4 (un)select all Tout (des)sĂ©lectionner - - List mode - Mode liste - Amount @@ -1436,7 +1307,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. NewPollDialog - + Create Poll Nouveau Sondage @@ -1649,10 +1520,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Map port using &UPnP Mapper le port avec l'&UPnP - - Proxy &IP: - &IP du mandataire : - &Port: @@ -1819,10 +1686,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Error Messages: - - DPOR Weight: - Poid du noeud DPOR: - Magnitude: @@ -1848,10 +1711,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Current Poll: Sondage: - - Client Messages: - Messages systĂšme: - Available: @@ -1894,6 +1753,14 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.dĂ©synchronisĂ© + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1955,7 +1822,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. RPCConsole - + @@ -1967,7 +1834,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - + N/A N.D @@ -2047,7 +1914,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Sortant : - + + &Scraper + + + + Debug log file Fichier journal de dĂ©bogage @@ -2082,7 +1954,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Taper <b>help</b> pour afficher une vue gĂ©nĂ©rale des commandes proposĂ©es. - + %1 B %1 o @@ -2117,12 +1989,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.%1 h %2 min - + Gridcoin - Debug Console Gridcoin - Console de dĂ©bogage - + Boost version Version Boost @@ -2454,22 +2326,22 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. SendCoinsEntry - + A&mount: &Montant : - + Pay &To: &Payer Ă  : - + &Label: É&tiquette : - + Alt+A Alt+A @@ -2495,12 +2367,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Saisir une Ă©tiquette pour cette adresse afin de l’ajouter Ă  votre carnet d’adresses - + Form Formulaire - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) L'adresse Gridcoin de votre destinataire (ex. SGAHhtnzzekoGiKWgugFMSsCWnhCE4nUjw) @@ -2515,21 +2387,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Supprimer ce destinataire - + Send Custom Message to a Gridcoin Recipient Envoyer un message Ă  votre destinataire - Track Coins - Suivre le transfert - - - - Add Attachment - Ajouter piĂšce-jointe - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Entrez une adresse Gridcoin (ex. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2778,49 +2641,58 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - + Source Source - Generated - GĂ©nĂ©rĂ©e - - - + From De - Block Type - Type de Block + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Les Gridcoins gĂ©nĂ©rĂ©s doivent passer 110 blocks pour ĂȘtre matures et pouvoir ĂȘtre dĂ©pensĂ©s. Quand vous avez gĂ©nĂ©rĂ© ce block il a Ă©tĂ© diffusĂ© sur le rĂ©seau pour ĂȘtre ajoutĂ© Ă  la block chain. S'il ne rentre pas dans la chaĂźne, son Ă©tat va passer Ă  "refusĂ©" et les Gridcoin ne seront pas utilisables. CelĂ  peut arriver si un autre nƓud gĂ©nĂšre un block Ă  quelques secondes d'intervalle du votre. - Block Number - NumĂ©ro de Block + + Generated in CoinBase + - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Les Gridcoins gĂ©nĂ©rĂ©s doivent passer 110 blocks pour ĂȘtre matures et pouvoir ĂȘtre dĂ©pensĂ©s. Quand vous avez gĂ©nĂ©rĂ© ce block il a Ă©tĂ© diffusĂ© sur le rĂ©seau pour ĂȘtre ajoutĂ© Ă  la block chain. S'il ne rentre pas dans la chaĂźne, son Ă©tat va passer Ă  "refusĂ©" et les Gridcoin ne seront pas utilisables. CelĂ  peut arriver si un autre nƓud gĂ©nĂšre un block Ă  quelques secondes d'intervalle du votre. + + MINED - POS + - Information - Information + + MINED - POR + - - Generated in CoinBase + + MINED - ORPHANED - - Generated, PoS + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + unknown inconnue @@ -2928,18 +2800,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Transaction Inputs - - Transaction ID - ID de la transaction - - - Transaction - Transaction - - - Inputs - EntrĂ©es - Amount @@ -2969,12 +2829,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Ce panneau affiche une description dĂ©taillĂ©e de la transaction - - View Attachment - Voir piĂšce-jointe - - - + Execute Contract Executer le contrat @@ -2983,21 +2838,11 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.C&lose F&ermer - - - Gridcoin Documents - Documents Gridcoin - - - - Document cannot be found on P2P server. - Le document ne peut ĂȘtre trouvĂ© sur le serveur P2P. - TransactionTableModel - + Date Date @@ -3032,32 +2877,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Ce block n'a Ă©tĂ© reçu par aucun autre nƓud<br> et ne sera probablement pas acceptĂ©! - - Mined - DPOR - MinĂ© - DPOR - - - - Minted - (Local) DPOR - CrĂ©Ă© - (Local) DPOR - - - - Mined - PoR - MinĂ© - PoR - - - - Mined - Interest - MinĂ© - InterĂȘts - - - + Destination address of transaction. L’adresse de destination de la transaction. - + Open for %n more block(s) Ouvert pendant encore %n bloc @@ -3095,7 +2920,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.GĂ©nĂ©rĂ©e mais refusĂ©e - + Received with Reçue avec @@ -3115,12 +2940,42 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Paiement Ă  vous-mĂȘme - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n.d) - + Transaction status. Hover over this field to show number of confirmations. État de la transaction. Survoler ce champ avec la souris pour afficher le nombre de confirmations. @@ -3309,29 +3164,10 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Ă  - - UpgradeDialog - - Gridcoin Upgrading Facility - FacilitĂ© de mise Ă  jour Gridcoin - - - Retry Download - Recommencer le tĂ©lĂ©chargement - - - Upgrade - Mettre Ă  jour - - - Hide - Cacher - - VotingChartDialog - + Poll Results RĂ©sultats du sondage @@ -3421,14 +3257,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Share Type Type de voix - - Question - Question - - - Answers - RĂ©ponses - # Voters @@ -3439,10 +3267,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Total Shares Nombre de voix - - URL - URL - Best Answer @@ -3468,10 +3292,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Share Type. Type de voix. - - Question. - Question. - Total Participants. @@ -3482,10 +3302,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Total Shares. Nombre de voix. - - URL. - URL. - Best Answer. @@ -3495,7 +3311,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. VotingVoteDialog - + PlaceVote Sondage @@ -3528,7 +3344,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. WalletModel - + Sending... Envoi... @@ -3536,19 +3352,15 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. bitcoin-core - + Options: Options : - + This help message Ce message d'aide - - Specify configuration file (default: gridcoin.conf) - DĂ©finir le fichier de configuration (dĂ©faut: gridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -3580,12 +3392,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.SpĂ©cifier le dĂ©lai d'expiration de la connexion en millisecondes (par dĂ©faut: 5000) - + Connect through socks proxy Se connecter Ă  travers un proxy socks - + Select the version of socks proxy to use (4-5, default: 5) SĂ©lectionner la version du proxy socks Ă  utiliser (4-5, par dĂ©faut: 5) @@ -3595,7 +3407,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Utiliser un proxy pour atteindre les services cachĂ©s (par dĂ©faut: Ă©quivalent Ă  -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Écouter les connexions sur le <port> (par dĂ©fault: 32749 ou testnet: 32748) @@ -3605,7 +3417,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Garder au plus <n> connexions avec les pairs (par dĂ©faut : 125) - + Connect only to the specified node(s) Ne se connecter qu'au(x) nƓud(s) spĂ©cifiĂ©(s) @@ -3615,26 +3427,22 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Se connecter Ă  un nƓud pour obtenir des adresses de pairs puis se dĂ©connecter - + Specify your own public address SpĂ©cifier votre propre adresse publique - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Se connecter uniquement aux nƓuds du rĂ©seau <net> (IPv4, IPv6 ou Tor) - + Discover own IP address (default: 1 when listening and no -externalip) DĂ©couvrir sa propre adresse IP (par dĂ©faut: 1 lors de l'Ă©coute et si aucun -externalip) - Find peers using internet relay chat (default: 0) - Trouvez des pairs utilisant DNS lookup (par dĂ©fault: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Accepter les connexions entrantes (par dĂ©faut : 1 si aucun -proxy ou -connect ) @@ -3644,26 +3452,22 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Connexion Ă  l'adresse fournie. Utiliser la notation [machine]:port pour les adresses IPv6 - + Find peers using DNS lookup (default: 1) Trouvez des peers utilisant DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synchronisation de l'horloge avec d'autres noeuds. DĂ©sactiver si votre serveur est dĂ©jĂ  synchronisĂ© avec le protocole NTP (dĂ©faut: 1) - Sync checkpoints policy (default: strict) - Politique de synchronisation des checkpoints (default: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) Seuil de dĂ©connexion des pairs de mauvaise qualitĂ© (par dĂ©faut : 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) DĂ©lai en secondes de refus de reconnexion aux pairs de mauvaise qualitĂ© (par dĂ©faut : 86400) @@ -3758,6 +3562,16 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3818,6 +3632,11 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.ERROR + + + Entire balance reserved + + Expires @@ -3883,11 +3702,6 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Message Message - - - Messate Type - - Miner: @@ -3924,12 +3738,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - - No coins; - - - - + Offline; @@ -3939,12 +3748,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4024,12 +3828,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Utiliser l'UPnP pour rediriger le port d'Ă©coute (par dĂ©faut: 0) - + Fee per KB to add to transactions you send Frais par KB Ă  ajouter Ă  vos transactions sortantes - + When creating transactions, ignore inputs with value less than this (default: 0.01) Lors de la crĂ©ation de transactions, ignorer les entrĂ©es dont la valeur sont infĂ©rieures (dĂ©faut: 0.01) @@ -4039,12 +3843,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Accepter les commandes JSON-RPC et en ligne de commande - + Use the test network Utiliser le rĂ©seau de test - + Output extra debugging information. Implies all other -debug* options Voir les autres informations de dĂ©bogage. Implique toutes les autres options -debug* @@ -4054,7 +3858,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Voir les autres informations de dĂ©bogage du rĂ©seau - + Prepend debug output with timestamp Horodater les messages de debug @@ -4064,7 +3868,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Envoyer les informations de dĂ©bogage/trace Ă  la console au lieu du fichier debug.log - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Écouter les connexions JSON-RPC sur le <port> (default: 15715 or testnet: 25715) @@ -4074,7 +3878,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Autoriser les connexions JSON-RPC depuis l'adresse IP spĂ©cifiĂ©e - + Send commands to node running on <ip> (default: 127.0.0.1) Envoyer des commandes au nƓud fonctionnant sur <ip> (par dĂ©faut : 127.0.0.1) @@ -4084,7 +3888,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.NĂ©cessite a confirmations pour modification (par dĂ©faut: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Force les scripts de transaction Ă  utiliser des opĂ©rateurs PUSH canoniques (dĂ©faut: 1) @@ -4094,7 +3898,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.ExĂ©cute une commande lorsqu'une alerte correspondante est reçue (%s dans la commande est remplacĂ© par message) - + Upgrade wallet to latest format Mettre Ă  niveau le portefeuille vers le format le plus rĂ©cent @@ -4109,7 +3913,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.RĂ©analyser la chaĂźne de blocs pour les transactions de portefeuille manquantes - + Attempt to recover private keys from a corrupt wallet.dat Tenter de rĂ©cupĂ©rer les clefs privĂ©es d'un wallet.dat corrompu @@ -4129,7 +3933,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - + Boinc Mining @@ -4139,7 +3943,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - + Error obtaining next project. Error 06172014. @@ -4189,12 +3993,32 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4209,12 +4033,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Fixer la taille maximale d'un block en bytes (default: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Fixer la taille maximale d'un bloc en octets (par dĂ©fault: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Options SSL : (voir le Wiki de Bitcoin pour les instructions de configuration du SSL) @@ -4234,21 +4058,17 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Clef privĂ©e du serveur (par dĂ©faut : server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Algorithmes de chiffrements acceptĂ©s (par dĂ©faut: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Montant invalide pour -paytxfee=<montant> : « %s » - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Attention : -paytxfee est rĂ©glĂ©e sur un montant trĂšs Ă©levĂ© ! Il s'agit des frais de transaction que vous payerez si vous envoyez une transaction. - + Invalid amount for -mininput=<amount>: '%s' Montant invalide pour -mininput=<amount>: '%s' @@ -4258,22 +4078,22 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Initialisation du "sanity-check" Ă©chouĂ©. ArrĂȘt de Gridcoin. - + Wallet %s resides outside data directory %s. Le portefeuille %s est situĂ© en dehors du rĂ©pertoire de donnĂ©es %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Echec lors de la tentative de verrou des donnĂ©es du rĂ©pertoire %s. L'application Gridcoin est probablement dĂ©jĂ  en cours d'exĂ©cution. - + Verifying database integrity... VĂ©rification d'intĂ©gritĂ© de la base de donnĂ©es... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Erreur lors de l'initialisation de l'environnement de base de donnĂ©es %s! Afin de procĂ©der Ă  la rĂ©cupĂ©ration, une SAUVEGARDE DE CE REPERTOIRE est nĂ©cessaire, puis, supprimez le contenu entier de ce rĂ©pertoire, Ă  l'exception du fichier wallet.dat. @@ -4283,10 +4103,15 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Avertissement : wallet.dat corrompu, donnĂ©es rĂ©cupĂ©rĂ©es ! Le fichier wallet.dat original a Ă©tĂ© enregistrĂ© en tant que wallet.{timestamp}.bak dans %s ; si votre solde ou transactions sont incorrects vous devriez effectuer une restauration depuis une sauvegarde. - + Vote Voter + + + Waiting for coins to mature + + Wallet locked; @@ -4303,17 +4128,17 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.wallet.dat corrompu, la rĂ©cupĂ©ration a Ă©chouĂ© - + Unknown -socks proxy version requested: %i Version inconnue de serveur mandataire -socks demandĂ©e : %i - + Invalid -tor address: '%s' Adresse -tor invalide: '%s' - + Cannot resolve -bind address: '%s' Impossible de rĂ©soudre l'adresse -bind : « %s » @@ -4323,16 +4148,10 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Impossible de rĂ©soudre l'adresse -externalip : « %s » - + Invalid amount for -reservebalance=<amount> Montant incorrect pour -reservebalance=<montant> - - Unable to sign checkpoint, wrong checkpointkey? - - Impossible de signer le checkpoint, mauvaise clef de checkpoint? - - Error loading blkindex.dat @@ -4344,22 +4163,22 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Erreur lors du chargement de wallet.dat: portefeuille corrompu - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Avertissement : une erreur est survenue lors de la lecture de wallet.dat ! Toutes les clefs ont Ă©tĂ© lues correctement mais les donnĂ©es de transaction ou les entrĂ©es du carnet d'adresses sont peut-ĂȘtre incorrectes ou manquantes. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Erreur de chargement du fichier wallet.dat: le portefeuille nĂ©cessite une version plus rĂ©cente de l'application Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Le portefeuille nĂ©cessite d'ĂȘtre rĂ©Ă©ditĂ© : Merci de relancer l'application Gridcoin - + Error loading wallet.dat Erreur lors du chargement du fichier wallet.dat @@ -4379,17 +4198,17 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Erreur: Impossible de dĂ©marrer le noeud - + Unable to bind to %s on this computer. Gridcoin is probably already running. Connexion au port %s impossible. L'application Gridcoin est probablement dĂ©jĂ  en cours d'exĂ©cution. - + Unable to bind to %s on this computer (bind returned error %d, %s) Impossible de se lier Ă  %s sur cet ordinateur (bind a retournĂ© l'erreur %d, %s) - + Error: Wallet locked, unable to create transaction Erreur: Portefeuille verrouillĂ©, impossible d'effectuer cette transaction @@ -4399,59 +4218,47 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Erreur: Portefeuille dĂ©verrouillĂ© uniquement pour "staking" , impossible d'effectuer cette transaction. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Erreur: Cette transaction requiĂšre des frais minimum de %s a cause de son montant, de sa complexitĂ© ou de l'utilisation de fonds rĂ©cemment reçus - + Error: Transaction creation failed Erreur: La crĂ©ation de cette transaction a Ă©chouĂ© - + Sending... Envoi... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Erreur: La transaction a Ă©tĂ© rejetĂ©e. Cela peut se produire si une quantitĂ© d'argent de votre portefeuille a dĂ©jĂ  Ă©tĂ© dĂ©pensĂ©e, comme dans le cas oĂč une copie du fichier wallet.dat aurait Ă©tĂ© utilisĂ©e afin d'effectuer des dĂ©penses, Ă  la place du fichier courant. - + Invalid amount Montant invalide - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Avertissement: Veuillez vĂ©rifier la date et l'heure de votre ordinateur. Gridcoin ne pourra pas fonctionner correctement si l'horloge est rĂ©glĂ©e de façon incorrecte. - Warning: This version is obsolete, upgrade required! - Avertissement : cette version est obsolĂšte, une mise Ă  niveau est nĂ©cessaire ! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ATTENTION : violation du checkpoint de synchronisation, mais ignorĂ©e! - - - + Warning: Disk space is low! Avertissement: Espace disque faible! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - AVERTISSEMENT: point de contrĂŽle invalide! Les transactions affichĂ©es peuvent ĂȘtre incorrectes! Il est peut-ĂȘtre nĂ©cessaire d'effectuer une mise Ă  jour, ou d'avertir les dĂ©veloppeurs du projet. - - - + Run in the background as a daemon and accept commands Fonctionner en arriĂšre-plan en tant que dĂ©mon et accepter les commandes - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) ExĂ©cuter la commande lorsqu'une transaction de porte-monnaie change (%s dans la commande est remplacĂ©e par TxID) @@ -4461,12 +4268,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Options de crĂ©ation de blocs : - + Failed to listen on any port. Use -listen=0 if you want this. Échec d'Ă©coute sur un port quelconque. Utiliser -listen=0 si vous le voulez. - + Specify wallet file (within data directory) SpĂ©cifiez le fichier de porte-monnaie (dans le rĂ©pertoire de donnĂ©es) @@ -4491,7 +4298,7 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Mot de passe pour les connexions JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) ExĂ©cuter la commande lorsque le meilleur bloc change (%s dans cmd est remplacĂ© par le hachage du bloc) @@ -4501,12 +4308,12 @@ Cela implique que des frais Ă  hauteur d'au moins %2 seront nĂ©cessaires.Autoriser les recherches DNS pour -addnode, -seednode et -connect - + To use the %s option Pour utiliser l'option %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4550,12 +4357,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule accordĂ©s au propriĂ©taire. - + Gridcoin version Version Gridcoin - + Usage: Utilisation: @@ -4565,7 +4372,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Envoyer une commande Ă  -server ou gridcoind - + List commands Lister les commandes @@ -4590,12 +4397,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Adresse -proxy invalide : « %s » - + Unknown network specified in -onlynet: '%s' RĂ©seau inconnu spĂ©cifiĂ© dans -onlynet : « %s » - + Insufficient funds Fonds insuffisants @@ -4605,17 +4412,17 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Chargement de l’index des blocs
 - + Add a node to connect to and attempt to keep the connection open Ajouter un nƓud auquel se connecter et tenter de garder la connexion ouverte - + Loading wallet... Chargement du porte-monnaie
 - + Cannot downgrade wallet Impossible de revenir Ă  une version infĂ©rieure du porte-monnaie @@ -4625,17 +4432,17 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Impossible d'Ă©crire l'adresse par dĂ©faut - + Rescanning... Nouvelle analyse
 - + Done loading Chargement terminĂ© - + Error Erreur diff --git a/src/qt/locale/bitcoin_fr_CA.ts b/src/qt/locale/bitcoin_fr_CA.ts index fee9d4a5e8..30870d07f9 100644 --- a/src/qt/locale/bitcoin_fr_CA.ts +++ b/src/qt/locale/bitcoin_fr_CA.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - Ce logiciel est expĂ©rimental. - - DistribuĂ© sous licence logicielle MIT/X11, voir le fichier COPYING joint ou http://www.opensource.org/licenses/mit-license.php. - - Ce produit comprend des logiciels dĂ©veloppĂ©s par le projet OpenSSL afin d'ĂȘtre utilisĂ©s dans la boĂźte Ă  outils OpenSSL (http://www.openssl.org/), un logiciel de chiffrement Ă©crit par Eric Young (eay@cryptsoft.com), et un logiciel UPnP dĂ©veloppĂ© par Thomas Bernard. - AddressBookPage @@ -313,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Wallet Portefeuille @@ -323,7 +309,7 @@ This product includes software developed by the OpenSSL Project for use in the O Gridcoin - + &Overview &Vue d'ensemble @@ -439,28 +425,42 @@ This product includes software developed by the OpenSSL Project for use in the O Afficher des informations au sujet du Gridcoin - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + %n second(s) ago il y a %n seconde @@ -492,7 +492,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Voting @@ -502,7 +502,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -536,14 +536,6 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet Crypter ou dĂ©crypter le portefeuille - - &Backup Wallet... - Sauvegarder le &portefeuille... - - - Backup wallet to another location - Sauvegarder le portefeuille vers un autre emplacement - &Backup Wallet/Config... @@ -615,7 +607,7 @@ This product includes software developed by the OpenSSL Project for use in the O Ouvrir une console de dĂ©bogage et de diagnostic - + &File &Fichier @@ -630,24 +622,19 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Advanced - - - - + &Help &Aide - + [testnet] [testnet] - + Gridcoin client Client Gridcoin @@ -664,34 +651,18 @@ This product includes software developed by the OpenSSL Project for use in the O - - %1 second(s) ago - il y a %1 seconde - - - %1 minute(s) ago - il y a %1 minute - - - %1 hour(s) ago - il y a %1 heure - - - %1 day(s) ago - il y a %1 jour - Up to date À jour - + Catching up... Rattrapage en cours
 - + Last received block was generated %1. Le dernier block reçu Ă  Ă©tĂ© gĂ©nĂ©rĂ© %1. @@ -751,17 +722,17 @@ This product includes software developed by the OpenSSL Project for use in the O Amount: %2 Type: %3 Address: %4 - Date : %1 -Montant : %2 -Type : %3 -Adresse : %4 + Date : %1 +Montant : %2 +Type : %3 +Adresse : %4 {1 ?} {2 ?} {3 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -776,7 +747,7 @@ Adresse : %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -786,19 +757,7 @@ Adresse : %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Date : %1 -Montant : %2 -Type : %3 -Adresse : %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. L'adresse du portefeuille Gridcoin n'as pas pu ĂȘtre correctement identifiĂ©e, car invalide ou malformĂ©e. @@ -809,10 +768,6 @@ Adresse : %4 URI handling Prise en charge de l'URL - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Le portefeuille est <b>cryptĂ©</b> et est actuellement <b>dĂ©verrouillĂ©</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> @@ -851,7 +806,7 @@ Adresse : %4 - + %n second(s) @@ -883,27 +838,7 @@ Adresse : %4 - Not staking because wallet is locked - Ne stack pas, votre portefeuilles est verouillĂ© - - - Not staking because wallet is offline - Ne stack pas, votre portefeuilles est hors ligne - - - Not staking because wallet is syncing - Ne stack pas, votre portefeuille est en cours de synchronisation - - - Not staking because you don't have mature coins - Ne stack pas, vos monnaies ne sont pas encore matures - - - Not staking - Pas de stacking - - - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Une erreur fatale a Ă©tĂ© rencontrĂ©e. L'application Gridcoin ne peut plus ĂȘtre s'exĂ©cuter de façon correcte et doit se terminer. @@ -911,7 +846,7 @@ Adresse : %4 ClientModel - + Network Alert Alerte rĂ©seau @@ -936,7 +871,7 @@ Adresse : %4 Amount: - Montant : + Montant : @@ -978,10 +913,6 @@ Adresse : %4 &List mode - - List mode - Mode liste - Amount @@ -1317,7 +1248,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent The entered address "%1" is already in the address book. - L’adresse fournie « %1 Â» est dĂ©jĂ  prĂ©sente dans le carnet d'adresses. + L’adresse fournie « %1 » est dĂ©jĂ  prĂ©sente dans le carnet d'adresses. @@ -1355,7 +1286,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Set language, for example "de_DE" (default: system locale) - DĂ©finir la langue, par exemple « fr_FR Â» (par dĂ©faut : la langue du systĂšme) + DĂ©finir la langue, par exemple « fr_FR » (par dĂ©faut : la langue du systĂšme) @@ -1376,7 +1307,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent NewPollDialog - + Create Poll @@ -1529,10 +1460,6 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent &Connect through SOCKS proxy: &Connexion Ă  travers du proxy SOCKS: - - Proxy &IP: - &IP du serveur mandataire : - Pro&xy IP: @@ -1546,7 +1473,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent &Port: - &Port : + &Port : @@ -1556,7 +1483,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent SOCKS &Version: - &Version SOCKS : + &Version SOCKS : @@ -1596,7 +1523,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent User Interface &language: - &Langue de l'interface utilisateur : + &Langue de l'interface utilisateur : @@ -1606,7 +1533,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent &Unit to show amounts in: - &UnitĂ© d'affichage des montants : + &UnitĂ© d'affichage des montants : @@ -1826,6 +1753,14 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent dĂ©synchronisĂ© + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1851,7 +1786,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Amount: - Montant : + Montant : @@ -1892,7 +1827,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent - + &Information &Informations @@ -1914,7 +1849,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent - + N/A N.D. @@ -2063,6 +1998,11 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Clear console Nettoyer la console + + + &Scraper + + Yes @@ -2089,7 +2029,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Taper <b>help</b> pour afficher une vue gĂ©nĂ©rale des commandes disponibles. - + %1 B @@ -2177,7 +2117,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Amount: - Montant : + Montant : @@ -2250,7 +2190,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Balance: - Solde : + Solde : @@ -2391,12 +2331,12 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Formulaire - + &Label: - &Étiquette : + &Étiquette : - + Enter a label for this address to add it to your address book Saisir une Ă©tiquette pour cette adresse afin de l’ajouter Ă  votre carnet d’adresses @@ -2404,7 +2344,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Pay &To: - &Payer Ă  : + &Payer à : @@ -2442,22 +2382,17 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Message: - + Send Custom Message to a Gridcoin Recipient - + A&mount: - &Montant : + &Montant : - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2572,7 +2507,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Click "Sign Message" to generate signature - Cliquez sur « Signer le message Â» pour gĂ©nĂ©rer la signature + Cliquez sur « Signer le message » pour gĂ©nĂ©rer la signature @@ -2706,26 +2641,47 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent - + Source Source - Generated - GĂ©nĂ©rĂ© + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De @@ -2839,23 +2795,11 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Transaction Inputs - - Transaction ID - ID de la transaction - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Transaction - Transaction - - - Inputs - Entrants - Amount @@ -2885,12 +2829,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Ce panneau affiche une description dĂ©taillĂ©e de la transaction - - View Attachment - - - - + Execute Contract @@ -2899,21 +2838,11 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Date @@ -2986,7 +2915,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent GĂ©nĂ©rĂ© mais pas acceptĂ© - + Received with Reçue avec @@ -3006,32 +2935,42 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Paiement Ă  vous-mĂȘme - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n.d) - + Transaction status. Hover over this field to show number of confirmations. État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations. @@ -3217,7 +3156,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent Range: - Intervalle : + Intervalle : @@ -3228,7 +3167,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent VotingChartDialog - + Poll Results @@ -3372,7 +3311,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent VotingVoteDialog - + PlaceVote @@ -3405,7 +3344,7 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent WalletModel - + Sending... Envoi... @@ -3413,12 +3352,12 @@ Les montants infĂ©rieurs Ă  0.546 fois les frais minimum de relais apparaissent bitcoin-core - + To use the %s option Pour utiliser l'option %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3433,12 +3372,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error Erreur - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Une erreur est survenue lors du rĂ©glage du port RPC %u pour Ă©couter sur IPv6, retour Ă  IPv4 : %s @@ -3457,7 +3396,7 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - Vous devez ajouter la ligne rpcpassword=<mot-de-passe> au fichier de configuration : + Vous devez ajouter la ligne rpcpassword=<mot-de-passe> au fichier de configuration : %s Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule accordĂ©s au propriĂ©taire. @@ -3472,7 +3411,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - + Boinc Mining @@ -3482,7 +3421,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - + Error obtaining next project. Error 06172014. @@ -3522,12 +3461,32 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3569,7 +3528,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Usage: - Utilisation : + Utilisation : @@ -3577,7 +3536,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - + List commands Lister les commandes @@ -3587,7 +3546,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Obtenir de l’aide pour une commande - + None @@ -3677,6 +3636,16 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3737,6 +3706,11 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco ERROR + + + Entire balance reserved + + Expires @@ -3797,11 +3771,6 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Message Message - - - Messate Type - - Miner: @@ -3838,19 +3807,14 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - - No coins; - - - - + Offline; Options: - Options : + Options : @@ -3858,12 +3822,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3925,25 +3884,25 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Set database cache size in megabytes (default: 25) - DĂ©finir la taille du tampon en mĂ©gaoctets (par dĂ©faut : 25) + DĂ©finir la taille du tampon en mĂ©gaoctets (par dĂ©faut : 25) Set database disk log size in megabytes (default: 100) - DĂ©finir la taille du tampon en mĂ©gaoctets (par dĂ©faut : 100) + DĂ©finir la taille du tampon en mĂ©gaoctets (par dĂ©faut : 100) Specify connection timeout in milliseconds (default: 5000) - SpĂ©cifier le dĂ©lai d'expiration de la connexion en millisecondes (par dĂ©faut : 5 000) + SpĂ©cifier le dĂ©lai d'expiration de la connexion en millisecondes (par dĂ©faut : 5 000) - + Connect through socks proxy Se connecter Ă  travers un proxy socks - + Select the version of socks proxy to use (4-5, default: 5) SĂ©lectionner la version du proxy socks Ă  utiliser (4-5, par dĂ©faut: 5) @@ -3953,27 +3912,27 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Utiliser un proxy pour atteindre les services cachĂ©s (dĂ©faut: Ă©quivalent Ă  -proxy) - + Allow DNS lookups for -addnode, -seednode and -connect Autoriser les recherches DNS pour -addnode, -seednode et -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) Écouter les connexions sur le <port> (default: 15714 or testnet: 25714) {32749 ?} {32748)?} Maintain at most <n> connections to peers (default: 125) - Garder au plus <n> connexions avec les pairs (par dĂ©faut : 125) + Garder au plus <n> connexions avec les pairs (par dĂ©faut : 125) - + Add a node to connect to and attempt to keep the connection open Ajouter un nƓud auquel se connecter et tenter de garder la connexion ouverte - + Connect only to the specified node(s) Ne se connecter qu'au(x) nƓud(s) spĂ©cifiĂ©(s) @@ -3983,28 +3942,24 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Se connecter Ă  un nƓud pour obtenir des adresses de pairs puis se dĂ©connecter - + Specify your own public address SpĂ©cifier votre propre adresse publique - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Se connecter uniquement aux nƓuds du rĂ©seau <net> (IPv4, IPv6 ou Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - DĂ©couvrir sa propre adresse IP (par dĂ©faut : 1 lors de l'Ă©coute et si aucun -externalip) - - - Find peers using internet relay chat (default: 0) - Find peers using internet relay chat (default: 1) {0)?} + DĂ©couvrir sa propre adresse IP (par dĂ©faut : 1 lors de l'Ă©coute et si aucun -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) - Accepter les connexions entrantes (par dĂ©faut : 1 si aucun -proxy ou -connect ) + Accepter les connexions entrantes (par dĂ©faut : 1 si aucun -proxy ou -connect ) @@ -4012,31 +3967,27 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Connexion Ă  l'adresse fournie. Utiliser la notation [machine]:port pour les adresses IPv6 - + Find peers using DNS lookup (default: 1) Trouvez des peers utilisant DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synchronisation de l'horloge avec d'autres noeuds. DĂ©sactiver si votre serveur est dĂ©jĂ  synchronisĂ© avec le protocole NTP (dĂ©faut: 1) - Sync checkpoints policy (default: strict) - Politique de synchronisation des checkpoints (default: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) - Seuil de dĂ©connexion des pairs de mauvaise qualitĂ© (par dĂ©faut : 100) + Seuil de dĂ©connexion des pairs de mauvaise qualitĂ© (par dĂ©faut : 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - DĂ©lai en secondes de refus de reconnexion aux pairs de mauvaise qualitĂ© (par dĂ©faut : 86400) + DĂ©lai en secondes de refus de reconnexion aux pairs de mauvaise qualitĂ© (par dĂ©faut : 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Tampon maximal de rĂ©ception par « -connection » <n>*1 000 octets (par dĂ©faut : 5 000) @@ -4046,22 +3997,22 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Tampon maximal d'envoi par « -connection », <n>*1 000 octets (par dĂ©faut : 1 000) - + Use UPnP to map the listening port (default: 1 when listening) - Utiliser l'UPnP pour rediriger le port d'Ă©coute (par dĂ©faut : 1 lors de l'Ă©coute) + Utiliser l'UPnP pour rediriger le port d'Ă©coute (par dĂ©faut : 1 lors de l'Ă©coute) Use UPnP to map the listening port (default: 0) - Utiliser l'UPnP pour rediriger le port d'Ă©coute (par dĂ©faut : 0) + Utiliser l'UPnP pour rediriger le port d'Ă©coute (par dĂ©faut : 0) - + Fee per KB to add to transactions you send Frais par KB Ă  ajouter Ă  vos transactions sortantes - + When creating transactions, ignore inputs with value less than this (default: 0.01) Lors de la crĂ©ation de transactions, ignore les entrĂ©es dont la valeur sont infĂ©rieures (dĂ©faut: 0.01) @@ -4071,7 +4022,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Accepter les commandes de JSON-RPC et de la ligne de commande - + Run in the background as a daemon and accept commands Fonctionner en arriĂšre-plan en tant que dĂ©mon et accepter les commandes @@ -4081,7 +4032,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Utiliser le rĂ©seau de test - + Output extra debugging information. Implies all other -debug* options Voir les autres informations de dĂ©bogage. Implique toutes les autres options -debug* @@ -4091,7 +4042,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Voir les autres informations de dĂ©bogage du rĂ©seau - + Prepend debug output with timestamp Horodater les messages de debug @@ -4121,7 +4072,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Mot de passe pour les connexions JSON-RPC - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Écouter les connexions JSON-RPC sur le <port> (default: 15715 or testnet: 25715) @@ -4131,12 +4082,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Autoriser les connexions JSON-RPC depuis l'adresse IP spĂ©cifiĂ©e - + Send commands to node running on <ip> (default: 127.0.0.1) - Envoyer des commandes au nƓud fonctionnant sur <ip> (par dĂ©faut : 127.0.0.1) + Envoyer des commandes au nƓud fonctionnant sur <ip> (par dĂ©faut : 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) ExĂ©cuter la commande lorsque le meilleur bloc change (%s dans cmd est remplacĂ© par le hachage du bloc) @@ -4146,12 +4097,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco ExĂ©cuter la commande lorsqu'une transaction de portefeuille change (%s dans la commande est remplacĂ©e par TxID) - + Require a confirmations for change (default: 0) NĂ©cessite a confirmations pour modification (dĂ©faut: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Force les scripts de transaction Ă  utiliser des opĂ©rateurs PUSH canoniques (dĂ©faut: 1) @@ -4161,14 +4112,14 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco ExĂ©cute une commande lorsqu'une alerte correspondante est reçue (%s dans la commande est remplacĂ© par message) - + Upgrade wallet to latest format Mettre Ă  niveau le portefeuille vers le format le plus rĂ©cent Set key pool size to <n> (default: 100) - RĂ©gler la taille de la rĂ©serve de clefs sur <n> (par dĂ©faut : 100) + RĂ©gler la taille de la rĂ©serve de clefs sur <n> (par dĂ©faut : 100) @@ -4176,12 +4127,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco RĂ©analyser la chaĂźne de blocs pour les transactions de portefeuille manquantes - + Attempt to recover private keys from a corrupt wallet.dat Tenter de rĂ©cupĂ©rer les clefs privĂ©es d'un wallet.dat corrompu - + How many blocks to check at startup (default: 2500, 0 = all) Nombre de blocs Ă  vĂ©rifier loes du dĂ©marrage (dĂ©faut: 2500, 0 = tous) @@ -4196,12 +4147,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Importe les blocs d'un fichier externe blk000?.dat - + Block creation options: Options de crĂ©ation de bloc : - + Set minimum block size in bytes (default: 0) DĂ©finir la taille minimale de bloc en octets (par dĂ©faut : 0) @@ -4211,12 +4162,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Fixer la taille maximale d'un block en bytes (default: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Fixer la taille maximale d'un block en bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Options SSL : (voir le Wiki de Bitcoin pour les instructions de configuration du SSL) @@ -4228,29 +4179,25 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Server certificate file (default: server.cert) - Fichier de certificat serveur (par dĂ©faut : server.cert) + Fichier de certificat serveur (par dĂ©faut : server.cert) Server private key (default: server.pem) - Clef privĂ©e du serveur (par dĂ©faut : server.pem) - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Algorithmes de chiffrements acceptĂ©s (dĂ©faut: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) + Clef privĂ©e du serveur (par dĂ©faut : server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' - Montant invalide pour -paytxfee=<montant> : « %s Â» + Montant invalide pour -paytxfee=<montant> : « %s » - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Attention : -paytxfee est rĂ©glĂ©e sur un montant trĂšs Ă©levĂ© ! Il s'agit des frais de transaction que vous payerez si vous envoyez une transaction. - + Invalid amount for -mininput=<amount>: '%s' Montant invalide pour -mininput=<amount>: '%s' @@ -4260,22 +4207,22 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco - + Wallet %s resides outside data directory %s. Le portefeuille %s rĂ©side en dehors rĂ©pertoire de donnĂ©es %s - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Echec lors de la tentative de verrouillage des donnĂ©es du rĂ©pertoire %s. L'application Gridcoin est probablement dĂ©jĂ  en cours d'exĂ©cution - + Verifying database integrity... VĂ©rification d'intĂ©gritĂ© de la base de donnĂ©es... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Erreur lors de l'initialisation de l'environnement de base de donnĂ©es %s! Afin de procĂ©der Ă  la rĂ©cupĂ©ration, une SAUVEGARDE DE CE REPERTOIRE est nĂ©cessaire, puis, supprimez le contenu entier de ce rĂ©pertoire, Ă  l'exception du fichier wallet.dat @@ -4285,7 +4232,7 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Avertissement : wallet.dat corrompu, donnĂ©es rĂ©cupĂ©rĂ©es ! Le fichier wallet.dat original a Ă©tĂ© enregistrĂ© en tant que wallet.{timestamp}.bak dans %s ; si votre solde ou transactions sont incorrects vous devriez effectuer une restauration depuis une sauvegarde. - + Weight @@ -4295,19 +4242,19 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco wallet.dat corrompu, la rĂ©cupĂ©ration a Ă©chouĂ© - + Unknown -socks proxy version requested: %i - Version inconnue de serveur mandataire -socks demandĂ©e : %i + Version inconnue de serveur mandataire -socks demandĂ©e : %i Unknown network specified in -onlynet: '%s' - RĂ©seau inconnu spĂ©cifiĂ© sur -onlynet : « %s Â» + RĂ©seau inconnu spĂ©cifiĂ© sur -onlynet : « %s » - + Invalid -proxy address: '%s' - Adresse -proxy invalide : « %s Â» + Adresse -proxy invalide : « %s » @@ -4315,31 +4262,25 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Adresse -tor invalide: '%s' - + Cannot resolve -bind address: '%s' - Impossible de rĂ©soudre l'adresse -bind : « %s Â» + Impossible de rĂ©soudre l'adresse -bind : « %s » - + Failed to listen on any port. Use -listen=0 if you want this. Échec de l'Ă©coute sur un port quelconque. Utilisez -listen=0 si vous voulez ceci. - + Cannot resolve -externalip address: '%s' - Impossible de rĂ©soudre l'adresse -externalip : « %s Â» + Impossible de rĂ©soudre l'adresse -externalip : « %s » - + Invalid amount for -reservebalance=<amount> Montant incorrect pour -reservebalance=<montant> - - Unable to sign checkpoint, wrong checkpointkey? - - Impossible de "signer" le checkpoint, mauvaise clef de checkpoint? - - Loading block index... @@ -4358,23 +4299,28 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Error loading wallet.dat: Wallet corrupted - Erreur lors du chargement de wallet.dat : portefeuille corrompu + Erreur lors du chargement de wallet.dat : portefeuille corrompu - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Avertissement : une erreur est survenue lors de la lecture de wallet.dat ! Toutes les clefs ont Ă©tĂ© lues correctement mais les donnĂ©es de transaction ou les entrĂ©es du carnet d'adresses sont peut-ĂȘtre incorrectes ou manquantes. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Erreur de chargement du fichier wallet.dat: le portefeuille nĂ©cessite une version plus rĂ©cente de l'application Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4386,12 +4332,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco le portefeuille nĂ©cessite d'ĂȘtre rĂ©Ă©ditĂ© : Merci de relancer l'application Gridcoin - + Error loading wallet.dat Erreur lors du chargement de wallet.dat - + Cannot downgrade wallet Impossible de revenir Ă  une version infĂ©rieure du portefeuille @@ -4401,12 +4347,12 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Impossible d'Ă©crire l'adresse par dĂ©faut - + Rescanning... Nouvelle analyse
 - + Importing blockchain data file. Importation du fichier blockchain @@ -4426,22 +4372,22 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Erreur: Impossible de dĂ©marrer le noeud - + Done loading Chargement terminĂ© - + Unable to bind to %s on this computer. Gridcoin is probably already running. Connexion au port %s impossible. L'application Gridcoin est probablement dĂ©jĂ  en cours d'exĂ©cution - + Unable to bind to %s on this computer (bind returned error %d, %s) Impossible de se lier Ă  %s sur cet ordinateur (bind a retournĂ© l'erreur %d, %s) - + Error: Wallet locked, unable to create transaction Erreur: Portefeuille verrouillĂ©, impossible d'effectuer cette transaction @@ -4451,27 +4397,27 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Erreur: Portefeuille dĂ©verrouillĂ© uniquement pour "stacking" , impossible d'effectuer cette transaction - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Erreur: Cette transaction requiĂšre des frais minimum de %s a cause de son montant, de sa complexitĂ© ou de l'utilisation de fonds rĂ©cemment reçus. - + Error: Transaction creation failed Erreur: La crĂ©ation de cette transaction Ă  Ă©chouĂ©e - + Sending... Envoi... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Erreur: La transaction a Ă©tĂ© rejetĂ©e. Cela peut se produire si une quantitĂ© d'argent de votre portefeuille a dĂ©jĂ  Ă©tĂ© dĂ©pensĂ©e, comme dans le cas oĂč une copie du fichier wallet.dat aurait Ă©tĂ© utilisĂ©e afin d'effectuer des dĂ©penses, Ă  la place du fichier courant. - + Invalid amount Montant invalide @@ -4481,26 +4427,14 @@ Si le fichier n'existe pas, crĂ©ez-le avec les droits de lecture seule acco Fonds insuffisants - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Avertissement: Veuillez vĂ©rifier la date et l'heure de votre ordinateur. Gridcoin ne pourra pas fonctionner correctement si l'horloge est rĂ©glĂ©e de façon incorrecte - Warning: This version is obsolete, upgrade required! - Avertissement : cette version est obsolĂšte, une mise Ă  niveau est nĂ©cessaire ! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ATTENTION : violation du checkpoint de synchronisation, mais ignorĂ©e! - - - + Warning: Disk space is low! Avertissement: Espace disque faible! - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - AVERTISSEMENT: point de contrĂŽle invalide! Les transactions affichĂ©es peuvent ĂȘtre incorrectes! Il est peut-ĂȘtre nĂ©cessaire d'effectuer une mise Ă  jour, ou d'avertir les dĂ©veloppeurs du projet. - diff --git a/src/qt/locale/bitcoin_gl.ts b/src/qt/locale/bitcoin_gl.ts index 3350758d90..42864c5867 100644 --- a/src/qt/locale/bitcoin_gl.ts +++ b/src/qt/locale/bitcoin_gl.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Isto Ă© software experimental. - -DistribuĂ­do baixo a licencia de software MIT/X11, vĂ©xase o arquivo que acompaña COPYING ou http://www.opensource.org/licenses/mit-license.php. - -Este produto inclĂșe software desenvolvido polo OpenSSL Project para o uso no OpenSSL Toolkit (http://www.openssl.org/) e software criptogrĂĄfico escrito por Eric Young (eay@cryptsoft.com) e software UPnP escrito por Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Este produto inclĂșe software desenvolvido polo OpenSSL Project para o uso no Op BitcoinGUI - + Gridcoin Gridcoin - + Send coins to a Gridcoin address Enviar moedas a unha direcciĂłn Gridcoin @@ -394,28 +380,42 @@ Este produto inclĂșe software desenvolvido polo OpenSSL Project para o uso no Op Amosa informaciĂłn sobre Gridcoin - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -425,7 +425,7 @@ Este produto inclĂșe software desenvolvido polo OpenSSL Project para o uso no Op - + &Diagnostics @@ -490,24 +490,19 @@ Este produto inclĂșe software desenvolvido polo OpenSSL Project para o uso no Op Exportar datos da pestana actual a un arquivo - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client Cliente Gridcoin @@ -525,23 +520,7 @@ Este produto inclĂșe software desenvolvido polo OpenSSL Project para o uso no Op - %1 second(s) ago - Fai %1 segundo - - - %1 minute(s) ago - Fai %1 minuto - - - %1 hour(s) ago - Fai %1 hora - - - %1 day(s) ago - Fai %1 dĂ­a - - - + Last received block was generated %1. Último bloque recibido foi generado %1. @@ -601,7 +580,7 @@ DirecciĂłn: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -611,19 +590,7 @@ DirecciĂłn: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -Cantidade: %2 -Tipo: %3 -DirecciĂłn: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -682,7 +649,7 @@ DirecciĂłn: %4 - + %n second(s) @@ -714,27 +681,7 @@ DirecciĂłn: %4 - Not staking because wallet is locked - Non "staking" porque a carteira estĂĄ bloqueada - - - Not staking because wallet is offline - Non "staking" porque a carteira estĂĄ sen conexiĂłn - - - Not staking because wallet is syncing - Non "staking" porque a carteira estĂĄ a sincronizar. - - - Not staking because you don't have mature coins - Non "staking" porque non tes moedas maduras - - - Not staking - Non "staking" - - - + &Overview &Vista xeral @@ -764,7 +711,7 @@ DirecciĂłn: %4 SaĂ­r da aplicaciĂłn - + &Options... &OpciĂłns... @@ -773,19 +720,11 @@ DirecciĂłn: %4 &Encrypt Wallet... &Encriptar Moedeiro... - - &Backup Wallet... - Copia de &Seguridade do Moedeiro... - &Change Passphrase... &Cambiar contrasinal... - - Backup wallet to another location - Facer copia de seguridade do moedeiro noutra localizaciĂłn - Change the passphrase used for wallet encryption @@ -807,12 +746,12 @@ DirecciĂłn: %4 &Verificar mensaxe... - + Wallet Moedeiro - + &Send &Enviar @@ -822,12 +761,12 @@ DirecciĂłn: %4 &Recibir - + &Show / Hide &Amosar/Agachar - + &File &Arquivo @@ -837,12 +776,12 @@ DirecciĂłn: %4 Axus&tes - + &Help A&xuda - + %n second(s) ago Fai %n segundo @@ -879,12 +818,12 @@ DirecciĂłn: %4 Actualizado - + Catching up... Poñendo ao dĂ­a... - + Sent transaction TransacciĂłn enviada @@ -894,16 +833,12 @@ DirecciĂłn: %4 TransacciĂłn entrante - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - O moedeiro estĂĄ <b>encriptado</b> e actualmente <b>desbloqueado</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> O moedeiro estĂĄ <b>encriptado</b> e actualmente <b>bloqueado</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -911,7 +846,7 @@ DirecciĂłn: %4 ClientModel - + Network Alert Alerta de Rede @@ -993,10 +928,6 @@ DirecciĂłn: %4 Priority Prioridade - - List mode - Modo lista - Amount @@ -1362,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1580,10 +1511,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Mapear porto empregando &UPnP - - Proxy &IP: - &IP do Proxy: - &Port: @@ -1812,6 +1739,14 @@ This label turns red, if the priority is smaller than "medium". non sincronizado + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1873,7 +1808,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1885,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1905,12 +1840,12 @@ This label turns red, if the priority is smaller than "medium". Tempo de arranque - + Gridcoin - Debug Console - + Boost version @@ -2015,7 +1950,12 @@ This label turns red, if the priority is smaller than "medium". &Consola - + + &Scraper + + + + &Network Traffic &TrĂĄfico de Rede @@ -2070,7 +2010,7 @@ This label turns red, if the priority is smaller than "medium". Escribe <b>axuda</b> para unha vista xeral dos comandos dispoñibles. - + %1 B %1 B @@ -2105,7 +2045,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2372,22 +2312,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Cantidade: - + Pay &To: Pagar &A: - + &Label: &Etiqueta: - + Alt+A Alt+A @@ -2407,12 +2347,12 @@ This label turns red, if the priority is smaller than "medium". Mensaxe: - + Form Formulario - + Enter a label for this address to add it to your address book Introduce unha etiqueta para esta direcciĂłn para engadila ao teu libro de direcciĂłns @@ -2433,17 +2373,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2692,26 +2627,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Orixe - Generated - Xerado + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Dende @@ -2825,27 +2781,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID de TransacciĂłn - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaciĂłn - - - Transaction - TransacciĂłn - - - Inputs - Entradas - Amount @@ -2875,12 +2815,7 @@ This label turns red, if the priority is smaller than "medium". Este panel amosa unha descripciĂłn detallada da transacciĂłn - - View Attachment - - - - + Execute Contract @@ -2889,21 +2824,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Pechar - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2976,7 +2901,7 @@ This label turns red, if the priority is smaller than "medium". Xerado pero non aceptado - + Received with Recibido con @@ -2996,32 +2921,42 @@ This label turns red, if the priority is smaller than "medium". Pago a ti mesmo - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Estado da transacciĂłn. Pasa por riba deste campo para amosar o nĂșmero de confirmaciĂłns. @@ -3218,7 +3153,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3362,7 +3297,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3395,7 +3330,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3403,37 +3338,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: OpciĂłns: - + Specify data directory Especificar directorio de datos - + Connect to a node to retrieve peer addresses, and disconnect Conectar a nodo para recuperar direcciĂłns de pares, e desconectar - + Specify your own public address Especificar a tĂșa propia direcciĂłn pĂșblica - + Accept command line and JSON-RPC commands Aceptar liña de comandos e comandos JSON-RPC - + Run in the background as a daemon and accept commands Executar no fondo como un demo e aceptar comandos - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executar comando cando unha transacciĂłn do moedeiro cambia (%s no comando Ă© substituĂ­do por TxID) @@ -3443,12 +3378,12 @@ This label turns red, if the priority is smaller than "medium". OpciĂłns de creaciĂłn de bloque: - + Failed to listen on any port. Use -listen=0 if you want this. Fallou escoitar en calquera porto. Emprega -listen=0 se queres esto. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3478,7 +3413,7 @@ This label turns red, if the priority is smaller than "medium". Contrasinal para conexiĂłns JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Executar comando cando o mellor bloque cambie (%s no comando Ă© sustituĂ­do polo hash do bloque) @@ -3488,7 +3423,7 @@ This label turns red, if the priority is smaller than "medium". Permitir lookup de DNS para -addnote, -seednote e -connect - + Loading addresses... Cargando direcciĂłns... @@ -3498,12 +3433,12 @@ This label turns red, if the priority is smaller than "medium". DirecciĂłn -proxy invĂĄlida: '%s' - + Unknown network specified in -onlynet: '%s' Rede descoñecida especificada en -onlynet: '%s' - + Insufficient funds Fondos insuficientes @@ -3513,17 +3448,17 @@ This label turns red, if the priority is smaller than "medium". Cargando Ă­ndice de bloques... - + Add a node to connect to and attempt to keep the connection open Engadir un nodo ao que conectarse e tentar manter a conexiĂłn aberta - + Loading wallet... Cargando moedeiro... - + Cannot downgrade wallet Non se pode desactualizar o moedeiro @@ -3533,27 +3468,27 @@ This label turns red, if the priority is smaller than "medium". Non se pode escribir a direcciĂłn por defecto - + Rescanning... Rescaneando... - + Done loading Carga completa - + Error Erro - + To use the %s option Empregar a opciĂłn %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3677,6 +3612,16 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3737,6 +3682,11 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta ERROR + + + Entire balance reserved + + Expires @@ -3797,11 +3747,6 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Message Mensaxe - - - Messate Type - - Miner: @@ -3838,12 +3783,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - - No coins; - - - - + Offline; @@ -3853,12 +3793,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3938,7 +3873,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + List commands Listar comandos @@ -3953,7 +3888,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Gridcoin - + This help message Esta mensaxe de axuda @@ -3978,12 +3913,12 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Especificar tempo lĂ­mite da conexiĂłn en milisegundos (por defecto: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3993,7 +3928,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -4003,22 +3938,22 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Manter como moito <n> conexiĂłns con pares (por defecto: 125) - + Connect only to the specified node(s) Conectar so ao(s) nodo(s) especificado(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Conectar so a nodos na rede <net> (IPv4, IPv6 ou Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descobrir direcciĂłn IP propia (por defecto: 1 se ĂĄ escoita e non -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Aceptar conexiĂłns de fĂłra (por defecto: 1 se non -proxy ou -connect) @@ -4028,27 +3963,27 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Umbral para desconectar pares con mal comportamento (por defecto: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) NĂșmero de segundos para manter sen reconectar aos pares con mal comportamento (por defecto: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) MĂĄximo buffer por-conexiĂłn para recibir, <n>*1000 bytes (por defecto: 5000) @@ -4058,7 +3993,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta MĂĄximo buffer por-conexiĂłn para enviar, <n>*1000 bytes (por defecto: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Usar UPnP para mapear o porto de escoita (por defecto: 1 se ĂĄ escoita) @@ -4068,22 +4003,22 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Usar UPnP para mapear o porto de escoita (por defecto: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Empregar a rede de proba - + Output extra debugging information. Implies all other -debug* options @@ -4093,7 +4028,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Prepend debug output with timestamp @@ -4103,7 +4038,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4113,7 +4048,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Permitir conexiĂłns JSON-RPC dende direcciĂłns IP especificadas - + Send commands to node running on <ip> (default: 127.0.0.1) Enviar comandos a nodo executando na <ip> (por defecto: 127.0.0.1) @@ -4123,7 +4058,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4133,7 +4068,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Upgrade wallet to latest format Actualizar moedeiro ao formato mĂĄis recente @@ -4148,7 +4083,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Rescanear transacciĂłns ausentes na cadea de bloques - + Attempt to recover private keys from a corrupt wallet.dat Tentar recuperar claves privadas dende un wallet.dat corrupto @@ -4168,7 +4103,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Boinc Mining @@ -4178,7 +4113,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Error obtaining next project. Error 06172014. @@ -4228,12 +4163,32 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4248,12 +4203,12 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) OpciĂłns SSL: (ver ?a Wiki Bitcoin as instrucciĂłn de configuraciĂłn de SSL) @@ -4273,17 +4228,17 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Clave privada do servidor (por defecto: server.perm) - + Invalid amount for -paytxfee=<amount>: '%s' Cantidade invĂĄlida para -paytxfee=<cantidade>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. PrecauciĂłn: -paytxfee estĂĄ posto moi algo! Esta Ă© a tarifa de transacciĂłn que ti pagarĂĄs se envĂ­as unha transacciĂłn. - + Invalid amount for -mininput=<amount>: '%s' @@ -4293,22 +4248,22 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4318,10 +4273,15 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta PrecauciĂłn: wallet.dat corrupto, datos salvagardados! O wallet.dat orixinal foi gardado como wallet.{timestamp}.bak en %s; se o teu balance ou transacciĂłns son incorrectas deberĂ­as restauralas dende unha copia de seguridade. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4338,17 +4298,17 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta wallet.dat corrupto, fallou o gardado - + Unknown -socks proxy version requested: %i VersiĂłn solicitada de proxy -socks descoñecida: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Non se pode resolver a direcciĂłn -bind: '%s' @@ -4358,7 +4318,7 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Non se pode resolver direcciĂłn -externalip: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4373,22 +4333,22 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta Erro cargando wallet.dat: Moedeiro corrupto - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. PrecauciĂłn: erro lendo wallet.dat! TĂłdalas claves lidas correctamente, pero os datos de transacciĂłn ou as entradas do libro de direcciĂłns podrĂ­an estar ausentes ou incorrectos. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Erro cargando wallet.dat @@ -4408,17 +4368,17 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Imposible enlazar con %s neste ordenador (enlace devolveu erro %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4428,41 +4388,37 @@ Se o arquivo non existe, debes crealo con permisos de so lectura para o propieta - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Cantidade invĂĄlida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - PrecauciĂłn: Esta versiĂłn Ă© obsoleta, precĂ­sase unha actualizaciĂłn! - - - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts index adae3afa02..8f99920579 100644 --- a/src/qt/locale/bitcoin_he.ts +++ b/src/qt/locale/bitcoin_he.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... &Ś—ŚȘŚ™ŚžŚ” ŚąŚœ Ś”Ś•Ś“ŚąŚ”  - + &Overview &ŚĄŚ§Ś™ŚšŚ” @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O Ś™ŚŠŚ™ŚŚ” ŚžŚ”ŚȘŚ›Ś Ś™ŚȘ - + &Options... &ŚŚ€Ś©ŚšŚ•Ś™Ś•ŚȘ
 @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &Ś’Ś™Ś‘Ś•Ś™ Ś”ŚŚšŚ Ś§â€Š - &Change Passphrase... Ś”&Ś—ŚœŚ€ŚȘ ŚžŚ™ŚœŚȘ Ś”ŚŠŚ•Ś€ŚŸâ€Š - - Backup wallet to another location - Ś’Ś™Ś‘Ś•Ś™ Ś”ŚŚšŚ Ś§ ŚœŚžŚ™Ś§Ś•Ś ŚŚ—Śš - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O &ŚŚ™ŚžŚ•ŚȘ Ś”Ś•Ś“ŚąŚ”  - + Wallet ŚŚšŚ Ś§ @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &Ś©ŚœŚ™Ś—Ś” @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [ŚšŚ©ŚȘ-Ś‘Ś“Ś™Ś§Ś”] - + Gridcoin client @@ -594,7 +570,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -647,7 +623,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -694,7 +670,7 @@ Address: %4 - + %n second(s) Ś©Ś Ś™Ś™Ś” ŚŚ—ŚȘ @@ -736,7 +712,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Ś§Ś•Ś‘Ś„ @@ -751,17 +757,12 @@ Address: %4 - - &Advanced - - - - + &Help Śą&Ś–ŚšŚ” - + %n second(s) ago @@ -798,12 +799,12 @@ Address: %4 ŚąŚ“Ś›Ś Ś™ - + Catching up... ŚžŚȘŚ‘ŚŠŚą ŚąŚ“Ś›Ś•ŚŸâ€Š - + Sent transaction Ś”ŚąŚ‘ŚšŚȘ Ś©ŚœŚ™Ś—Ś” @@ -813,7 +814,7 @@ Address: %4 Ś”ŚąŚ‘ŚšŚȘ Ś§Ś‘ŚœŚ” - + URI handling Ś˜Ś™Ś€Ś•Śœ Ś‘Ś›ŚȘŚ•Ś‘Ś•ŚȘ @@ -824,17 +825,13 @@ Address: %4 URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Ś”ŚŚšŚ Ś§ <b>ŚžŚ•ŚŠŚ€ŚŸ</b> Ś•<b>Ś€ŚȘŚ•Ś—</b> Ś›ŚšŚ’Śą - Wallet is <b>encrypted</b> and currently <b>locked</b> Ś”ŚŚšŚ Ś§ <b>ŚžŚ•ŚŠŚ€ŚŸ</b> Ś•<b>Ś ŚąŚ•Śœ</b> Ś›ŚšŚ’Śą - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -924,10 +921,6 @@ Address: %4 (un)select all Ś‘Ś™Ś˜Ś•Śœ/ŚŚ™Ś©Ś•Śš Ś”Ś‘Ś—Ś™ŚšŚ” - - List mode - ŚžŚŠŚ‘ ŚšŚ©Ś™ŚžŚ” - Amount @@ -1293,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1506,10 +1499,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP ŚžŚ™Ś€Ś•Ś™ Ś€ŚȘŚ—Ś” Ś‘ŚŚžŚŠŚąŚ•ŚȘ UPnP - - Proxy &IP: - Ś›ŚȘŚ•Ś‘ŚȘ Ś”ÖŸIP Ś©Śœ Ś”Śž&ŚȘŚ•Ś•Śš: - &Port: @@ -1743,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1804,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1816,7 +1813,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A ŚœŚ Ś–ŚžŚ™ŚŸ @@ -1836,12 +1833,12 @@ This label turns red, if the priority is smaller than "medium". Ś–ŚžŚŸ ŚąŚœŚ™Ś™Ś” - + Gridcoin - Debug Console - + Boost version @@ -1916,7 +1913,12 @@ This label turns red, if the priority is smaller than "medium". &Ś€ŚȘŚ™Ś—Ś” - + + &Scraper + + + + Command-line options ŚŚ€Ś©ŚšŚ•Ś™Ś•ŚȘ Ś©Ś•ŚšŚȘ Ś€Ś§Ś•Ś“Ś” @@ -2001,7 +2003,7 @@ This label turns red, if the priority is smaller than "medium". Ś Ś™ŚȘŚŸ ŚœŚ”Ś§ŚœŚ™Ś“ <b>help</b> ŚœŚ§Ś‘ŚœŚȘ ŚĄŚ§Ś™ŚšŚ” Ś©Śœ Ś”Ś€Ś§Ś•Ś“Ś•ŚȘ Ś”Ś–ŚžŚ™Ś Ś•ŚȘ. - + %1 B %1 Ś‘Śł @@ -2036,7 +2038,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2303,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Ś›ŚžŚ•ŚȘ: - + Pay &To: ŚœŚ©ŚœŚ Śœ&Ś˜Ś•Ś‘ŚȘ: - + &Label: ŚȘ&Ś•Ś•Ś™ŚȘ: - + Alt+A Alt+A @@ -2359,22 +2361,17 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Form Ś˜Ś•Ś€ŚĄ - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2577,22 +2574,17 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS - - - - + From @@ -2709,7 +2701,7 @@ This label turns red, if the priority is smaller than "medium". - + Open for %n more block(s) @@ -2754,8 +2746,38 @@ This label turns red, if the priority is smaller than "medium". + + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + - + matures in %n more block(s) @@ -2772,10 +2794,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - ŚžŚ™Ś“Śą - TransactionDescDialog @@ -2790,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". Ś—ŚœŚ•Ś Ś™ŚȘ Ś–Ś• ŚžŚŠŚ™Ś’Ś” ŚȘŚ™ŚŚ•Śš ŚžŚ€Ś•ŚšŚ˜ Ś©Śœ Ś”Ś”ŚąŚ‘ŚšŚ” - - View Attachment - - - - + Execute Contract @@ -2804,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose ŚĄŚ’Ś™ŚšŚ” - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date ŚȘŚŚšŚ™Śš @@ -2891,27 +2894,7 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Transaction status. Hover over this field to show number of confirmations. @@ -2931,7 +2914,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2951,12 +2934,42 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Type of transaction. @@ -3130,17 +3143,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - Ś”ŚĄŚȘŚš - - VotingChartDialog - + Poll Results @@ -3284,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3317,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3325,12 +3331,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ŚŚ€Ś©ŚšŚ•Ś™Ś•ŚȘ: - + This help message @@ -3365,12 +3371,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3380,7 +3386,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3390,7 +3396,7 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) @@ -3400,22 +3406,22 @@ This label turns red, if the priority is smaller than "medium". Ś™Ś© ŚœŚ”ŚȘŚ—Ś‘Śš ŚœŚžŚ€ŚšŚ§ Ś›Ś“Ś™ ŚœŚ“ŚœŚ•ŚȘ Ś›ŚȘŚ•Ś‘Ś•ŚȘ ŚąŚžŚ™ŚȘŚ™Ś Ś•ŚŚ– ŚœŚ”ŚȘŚ ŚȘŚ§ - + Specify your own public address Ś Ś ŚœŚŠŚ™Ś™ŚŸ ŚŚȘ Ś”Ś›ŚȘŚ•Ś‘ŚȘ Ś”Ś€Ś•ŚžŚ‘Ś™ŚȘ Ś©ŚœŚš - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3425,22 +3431,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3535,6 +3541,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3595,6 +3611,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3660,11 +3681,6 @@ This label turns red, if the priority is smaller than "medium". Message Ś”Ś•Ś“ŚąŚ” - - - Messate Type - - Miner: @@ -3701,12 +3717,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3716,12 +3727,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3801,12 +3807,12 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3816,12 +3822,12 @@ This label turns red, if the priority is smaller than "medium". Ś§Ś‘ŚœŚȘ Ś€Ś§Ś•Ś“Ś•ŚȘ ŚžŚ©Ś•ŚšŚȘ Ś”Ś€Ś§Ś•Ś“Ś” Ś•ŚžÖŸJSON-RPC - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3831,7 +3837,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3841,7 +3847,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3851,7 +3857,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3861,7 +3867,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3871,7 +3877,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -3886,7 +3892,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -3906,7 +3912,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3916,7 +3922,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3966,12 +3972,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3986,12 +4012,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4011,17 +4037,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4031,22 +4057,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4056,10 +4082,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4076,17 +4107,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4096,7 +4127,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4111,22 +4142,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4146,17 +4177,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4166,47 +4197,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Run in the background as a daemon and accept commands ŚšŚ™ŚŠŚ” Ś›ŚĄŚ•Ś›ŚŸ Ś‘ŚšŚ§Śą Ś•Ś§Ś‘ŚœŚȘ Ś€Ś§Ś•Ś“Ś•ŚȘ - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Ś‘Ś™ŚŠŚ•Śą Ś€Ś§Ś•Ś“Ś” Ś›ŚŚ©Śš Ś”ŚąŚ‘ŚšŚ” Ś‘ŚŚšŚ Ś§ ŚžŚ©ŚȘŚ Ś” (%s Ś‘ÖŸcmd Ś™Ś•Ś—ŚœŚŁ Ś‘ÖŸTxID) @@ -4216,12 +4247,12 @@ This label turns red, if the priority is smaller than "medium". ŚŚ€Ś©ŚšŚ•Ś™Ś•ŚȘ Ś™ŚŠŚ™ŚšŚȘ ŚžŚ§Ś˜Śą: - + Failed to listen on any port. Use -listen=0 if you want this. Ś”ŚŚ–Ś Ś” Ś Ś›Ś©ŚœŚ” Ś‘Ś›Śœ Ś€Ś•ŚšŚ˜. Ś”Ś©ŚȘŚžŚ© Ś‘- -listen=0 ŚŚ Ś‘ŚšŚŠŚ•Ś Śš Ś‘Ś›Śš. - + Specify wallet file (within data directory) ŚŠŚ™Ś•ŚŸ Ś§Ś•Ś‘Ś„ ŚŚšŚ Ś§ (Ś‘ŚȘŚ•Śš ŚȘŚ™Ś§Ś™Ś™ŚȘ Ś”Ś ŚȘŚ•Ś Ś™Ś) @@ -4246,7 +4277,7 @@ This label turns red, if the priority is smaller than "medium". ŚĄŚĄŚžŚ” ŚœŚ—Ś™Ś‘Ś•ŚšŚ™ JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Ś™Ś© ŚœŚ‘ŚŠŚą Ś€Ś§Ś•Ś“Ś” Ś–Ś• Ś›Ś©Ś”ŚžŚ§Ś˜Śą Ś”Ś˜Ś•Ś‘ Ś‘Ś™Ś•ŚȘŚš ŚžŚ©ŚȘŚ Ś” (%s Ś‘Ś€Ś§Ś•Ś“Ś” Ś™Ś•Ś—ŚœŚŁ Ś‘Ś’Ś™Ś‘Ś•Ś‘ Ś”ŚžŚ§Ś˜Śą) @@ -4256,12 +4287,12 @@ This label turns red, if the priority is smaller than "medium". Ś”Ś€ŚąŚœŚȘ Ś‘Ś“Ś™Ś§ŚȘ DNS ŚąŚ‘Ś•Śš ‎-addnode,‏ ‎-seednode Ś•ÖŸâ€Ž-connect - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4293,12 +4324,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Ś©Ś™ŚžŚ•Ś©: @@ -4308,7 +4339,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -4333,12 +4364,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Ś›ŚȘŚ•Ś‘ŚȘ ‎-proxy ŚœŚ ŚȘŚ§Ś™Ś Ś”: '%s' - + Unknown network specified in -onlynet: '%s' ŚšŚ©ŚȘ ŚœŚ Ś™Ś“Ś•ŚąŚ” ŚŠŚ•Ś™Ś Ś” Ś“ŚšŚš ‎-onlynet:‏ '%s' - + Insufficient funds ŚŚ™ŚŸ ŚžŚĄŚ€Ś™Ś§ Ś›ŚĄŚ€Ś™Ś @@ -4348,17 +4379,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ŚžŚ€ŚȘŚ— Ś”ŚžŚ§Ś˜ŚąŚ™Ś Ś Ś˜ŚąŚŸâ€Š - + Add a node to connect to and attempt to keep the connection open Ś”Ś•ŚĄŚ€ŚȘ ŚžŚ€ŚšŚ§ ŚœŚ”ŚȘŚ—Ś‘ŚšŚ•ŚȘ Ś•ŚœŚ ŚĄŚ•ŚȘ ŚœŚ©ŚžŚ•Śš ŚąŚœ Ś”Ś—Ś™Ś‘Ś•Śš Ś€ŚȘŚ•Ś— - + Loading wallet... Ś”ŚŚšŚ Ś§ Ś‘Ś˜ŚąŚ™Ś Ś”  - + Cannot downgrade wallet ŚœŚ Ś Ś™ŚȘŚŸ ŚœŚ”Ś—Ś–Ś™Śš ŚŚȘ Ś’ŚšŚĄŚȘ Ś”ŚŚšŚ Ś§ @@ -4368,17 +4399,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ŚœŚ Ś Ś™ŚȘŚŸ ŚœŚ›ŚȘŚ•Ś‘ ŚŚȘ Ś›ŚȘŚ•Ś‘ŚȘ Ś‘ŚšŚšŚȘ Ś”ŚžŚ—Ś“Śœ - + Rescanning... ŚĄŚšŚ™Ś§Ś” ŚžŚ—Ś“Ś©â€Š - + Done loading Ś˜ŚąŚ™Ś Ś” Ś”Ś•Ś©ŚœŚžŚ” - + Error Ś©Ś’Ś™ŚŚ” diff --git a/src/qt/locale/bitcoin_hi_IN.ts b/src/qt/locale/bitcoin_hi_IN.ts index a8823cf490..8e59c95253 100644 --- a/src/qt/locale/bitcoin_hi_IN.ts +++ b/src/qt/locale/bitcoin_hi_IN.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Overview &à€”à€żà€”à€°à€Ł @@ -416,28 +416,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -447,7 +461,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -481,10 +495,6 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &à€Źà„ˆà€•à€Ș à€”à„‰à€Čà„‡à€Ÿ - &Change Passphrase... @@ -541,24 +551,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [à€Ÿà„‡à€žà„à€Ÿà€šà„‡à€Ÿ] - + Gridcoin client @@ -576,12 +581,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + Catching up... - + Last received block was generated %1. @@ -634,7 +639,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -644,13 +649,13 @@ Address: %4 - + URI handling - + %n second(s) ago @@ -682,7 +687,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -735,7 +740,7 @@ Address: %4 - + %n second(s) @@ -767,12 +772,12 @@ Address: %4 - + Change the passphrase used for wallet encryption à€Șà€čà€šà€Ÿà€š à€¶à€Źà„à€Š/à€…à€•à„à€·à€° à€œà„‹ à€”à„‰à€Čà„‡à€Ÿ à€à€šà€•à„à€°à€żà€Șà€¶à€š à€•à„‡ à€Čà€żà€ à€‡à€žà„à€€à„‡à€źà€Ÿà€Č à€•à€żà€Żà€Ÿ à€čà„ˆ à€‰à€žà„‡ à€Źà€Šà€Čà€żà€! - + Wallet à€”à„‰à€Čà„‡à€Ÿ @@ -782,7 +787,7 @@ Address: %4 - + &Backup Wallet/Config... @@ -792,7 +797,7 @@ Address: %4 - + &File &à€«à€Ÿà€‡à€Č @@ -802,17 +807,17 @@ Address: %4 &à€žà„‡à€Ÿà„à€Ÿà€żà€‚à€—à„à€ž - + &Help &à€źà€Šà€Š - + Up to date à€šà€”à„€à€šà€€à€ź - + Sent transaction à€­à„‡à€œà„€ à€Ÿà„à€°à€Ÿà€‚à€œà€•à„à€¶à€š @@ -822,16 +827,12 @@ Address: %4 à€Șà„à€°à€Ÿà€Șà„à€€ à€čà„à€ˆ à€Ÿà„à€°à€Ÿà€‚à€œà€•à„à€¶à€š - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - à€”à„‰à€Čà„‡à€Ÿ à€à€šà„à€•à„à€°à€żà€Șà„à€Ÿà„‡à€Ą à€čà„ˆ à€€à€„à€Ÿ à€…à€­à„€ à€Čà„‰à€•à„à€Ą à€šà€čà„€à€‚ à€čà„ˆ - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> à€”à„‰à€Čà„‡à€Ÿ à€à€šà„à€•à„à€°à€żà€Șà„à€Ÿà„‡à€Ą à€čà„ˆ à€€à€„à€Ÿ à€…à€­à„€ à€Čà„‰à€•à„à€Ą à€čà„ˆ - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -839,7 +840,7 @@ Address: %4 ClientModel - + Network Alert @@ -1286,7 +1287,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1732,6 +1733,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1793,7 +1802,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1805,7 +1814,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A à€Čà€Ÿà€—à„‚ à€šà€čà„€ @@ -1816,12 +1825,12 @@ This label turns red, if the priority is smaller than "medium". à€œà€Ÿà€šà€•à€Ÿà€°à„€ - + Gridcoin - Debug Console - + Boost version @@ -1970,6 +1979,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1996,7 +2010,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2293,22 +2307,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: à€…à€źà€Ÿà€‰à€‚à€Ÿ: - + Pay &To: à€Șà„à€°à€Ÿà€Șà„à€€à€•à€°à„à€€à€Ÿ: - + &Label: à€Čà„‡à€Źà€Č: - + Alt+A Alt-A @@ -2323,12 +2337,12 @@ This label turns red, if the priority is smaller than "medium". Alt-P - + Form à€«à€Ÿà€°à„à€ź - + Enter a label for this address to add it to your address book @@ -2354,17 +2368,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2613,22 +2622,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2747,10 +2781,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - à€œà€Ÿà€šà€•à€Ÿà€°à„€ - Amount @@ -2780,12 +2810,7 @@ This label turns red, if the priority is smaller than "medium". à€Żà„‡ à€–à€żà€Ąà€Œà€•à„€ à€†à€Șà€•à„‹ à€Čà„‡à€š-à€Šà„‡à€š à€•à€Ÿ à€”à€żà€žà„à€€à„ƒà€€ à€”à€żà€”à€°à€Ł à€Šà„‡à€—à„€ ! - - View Attachment - - - - + Execute Contract @@ -2794,21 +2819,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date taareek @@ -2881,7 +2896,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2901,32 +2916,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3123,7 +3148,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3267,7 +3292,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3300,7 +3325,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3308,12 +3333,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: à€”à€żà€•à€Čà„à€Ș: - + Specify data directory à€Ąà„‡à€Ÿà€Ÿ à€Ąà€Ÿà€Żà€°à„‡à€•à„à€Ÿà€°à„€ à€Źà€€à€Ÿà€à€‚ @@ -3323,7 +3348,7 @@ This label turns red, if the priority is smaller than "medium". à€Źà„ˆà€•à€—à„à€°à€Ÿà€‰à€‚à€Ą à€źà„‡à€‚ à€Ąà„‡à€źà„‰à€š à€Źà€š à€•à€° à€°à€š à€•à€°à„‡ à€€à€„à€Ÿ à€•à€źà€Ÿà€‚à€Ąà„à€ž à€žà„à€”à„€à€•à€Ÿà€° à€•à€°à„‡à€‚ - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -3338,7 +3363,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3348,7 +3373,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3393,12 +3418,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3418,7 +3463,7 @@ This label turns red, if the priority is smaller than "medium". - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3540,6 +3585,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3600,6 +3655,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3660,11 +3720,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3701,12 +3756,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3716,12 +3766,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3796,7 +3841,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3811,7 +3856,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3841,12 +3886,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3856,12 +3901,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3871,12 +3916,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3886,22 +3931,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3911,27 +3956,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3941,7 +3986,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3951,12 +3996,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3966,12 +4011,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3981,7 +4026,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4011,7 +4056,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4021,12 +4066,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4036,12 +4081,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4051,7 +4096,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4066,12 +4111,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4086,12 +4131,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4101,12 +4146,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4126,17 +4171,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4146,22 +4191,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4171,7 +4216,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4181,7 +4226,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4191,7 +4236,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4201,22 +4246,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4236,20 +4281,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4261,12 +4311,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4276,12 +4326,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... à€°à€ż-à€žà„à€•à„‡à€šà„€-à€‡à€‚à€—... - + Importing blockchain data file. @@ -4296,22 +4346,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading à€Čà„‹à€Ą à€čà„‹ à€—à€Żà€Ÿ| - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4321,27 +4371,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4351,17 +4401,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Error à€­à„‚à€Č diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts index dbfc1b991c..8607e90482 100644 --- a/src/qt/locale/bitcoin_hr.ts +++ b/src/qt/locale/bitcoin_hr.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... P&otpiĆĄite poruku... - + &Overview &Pregled @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O Izlazak iz programa - + &Options... Pos&tavke... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - Spremi &kopiju novčanika... - &Change Passphrase... Promjena &lozinke... - - Backup wallet to another location - Napravite sigurnosnu kopiju novčanika na drugoj lokaciji - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O &Potvrdite poruku... - + Wallet Novčanik @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &PoĆĄalji @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -586,7 +562,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -646,7 +622,7 @@ Adresa:%4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -693,7 +669,7 @@ Adresa:%4 - + %n second(s) @@ -739,7 +715,37 @@ Adresa:%4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Datoteka @@ -754,17 +760,12 @@ Adresa:%4 - - &Advanced - - - - + &Help &Pomoć - + Processed %n block(s) of transaction history. Obrađen %n blok povijesti transakcije. @@ -814,12 +815,12 @@ Adresa:%4 AĆŸurno - + Catching up... AĆŸuriranje... - + Sent transaction Poslana transakcija @@ -829,19 +830,7 @@ Adresa:%4 Dolazna transakcija - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum:%1 -Iznos:%2 -Tip:%3 -Adresa:%4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -852,17 +841,13 @@ Adresa:%4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Novčanik je <b>ĆĄifriran</b> i trenutno <b>otključan</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Novčanik je <b>ĆĄifriran</b> i trenutno <b>zaključan</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -870,7 +855,7 @@ Adresa:%4 ClientModel - + Network Alert @@ -1317,7 +1302,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1535,10 +1520,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Mapiraj port koristeći &UPnP - - Proxy &IP: - Proxy &IP: - &Port: @@ -1767,6 +1748,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1828,7 +1817,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1840,7 +1829,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1920,7 +1909,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -1955,12 +1944,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2060,7 +2049,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + Welcome to the Gridcoin RPC console! @@ -2327,22 +2321,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Iznos: - + Pay &To: &Primatelj plaćanja: - + &Label: &Oznaka: - + Alt+A Alt+A @@ -2362,12 +2356,12 @@ This label turns red, if the priority is smaller than "medium". Poruka: - + Form Oblik - + Enter a label for this address to add it to your address book Unesite oznaku za ovu adresu kako bi ju dodali u vaĆĄ adresar @@ -2388,17 +2382,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2649,26 +2638,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Izvor - Generated - Generiran + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Od @@ -2783,27 +2793,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID transakcije - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informacija - - - Transaction - Transakcija - - - Inputs - Unosi - Amount @@ -2833,12 +2827,7 @@ This label turns red, if the priority is smaller than "medium". Ovaj prozor prikazuje detaljni opis transakcije - - View Attachment - - - - + Execute Contract @@ -2847,21 +2836,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Zatvori - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datum @@ -2935,7 +2914,7 @@ This label turns red, if the priority is smaller than "medium". Generirano, ali nije prihva?eno - + Received with Primljeno s @@ -2955,32 +2934,42 @@ This label turns red, if the priority is smaller than "medium". Pla?anje samom sebi - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/d) - + Transaction status. Hover over this field to show number of confirmations. Status transakcije @@ -3177,7 +3166,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3321,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3354,7 +3343,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3362,12 +3351,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Postavke: - + This help message Ova poruka za pomo? @@ -3402,12 +3391,12 @@ This label turns red, if the priority is smaller than "medium". Odredi vremenski prozor za spajanje na mreĆŸu u milisekundama (ugra?eni izbor: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3417,7 +3406,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3427,7 +3416,7 @@ This label turns red, if the priority is smaller than "medium". OdrĆŸavaj najviĆĄe <n> veza sa ?lanovima (default: 125) - + Connect only to the specified node(s) PoveĆŸi se samo sa odre?enim nodom @@ -3437,22 +3426,22 @@ This label turns red, if the priority is smaller than "medium". - + Specify your own public address Odaberi vlastitu javnu adresu - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3462,22 +3451,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Prag za odspajanje ?lanova koji se ?udno ponaĆĄaju (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Broj sekundi koliko se ?lanovima koji se ?udno ponaĆĄaju ne?e dopustiti da se opet spoje (default: 86400) @@ -3572,6 +3561,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3632,6 +3631,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3697,11 +3701,6 @@ This label turns red, if the priority is smaller than "medium". Message Poruka - - - Messate Type - - Miner: @@ -3738,12 +3737,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3753,12 +3747,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3843,12 +3832,12 @@ This label turns red, if the priority is smaller than "medium". PokuĆĄaj koristiti UPnP da otvoriĆĄ port za uslugu (default: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3858,7 +3847,7 @@ This label turns red, if the priority is smaller than "medium". Prihvati komande iz tekst moda i JSON-RPC - + Run in the background as a daemon and accept commands IzvrĆĄavaj u pozadini kao usluĆŸnik i prihvaćaj komande @@ -3868,7 +3857,7 @@ This label turns red, if the priority is smaller than "medium". Koristi test mreĆŸu - + Output extra debugging information. Implies all other -debug* options @@ -3878,7 +3867,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3893,7 +3882,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3903,22 +3892,22 @@ This label turns red, if the priority is smaller than "medium". Dozvoli JSON-RPC povezivanje s odre?ene IP adrese - + Send commands to node running on <ip> (default: 127.0.0.1) PoĆĄalji komande nodu na adresi <ip> (ugra?eni izbor: 127.0.0.1) - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3928,7 +3917,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format Nadogradite nov?anik u posljednji format. @@ -3943,7 +3932,7 @@ This label turns red, if the priority is smaller than "medium". Ponovno pretraĆŸi lanac blokova za transakcije koje nedostaju - + Attempt to recover private keys from a corrupt wallet.dat @@ -3963,7 +3952,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3973,7 +3962,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4023,12 +4012,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4043,12 +4052,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL postavke: (za detalje o podeĆĄavanju SSL opcija vidi Bitcoin Wiki) @@ -4068,17 +4077,17 @@ This label turns red, if the priority is smaller than "medium". UsluĆŸnikov privatni klju? (ugra?eni izbor: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Nevaljali iznos za opciju -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Upozorenje: -paytxfee je podeĆĄen na preveliki iznos. To je iznos koji ?ete platiti za obradu transakcije. - + Invalid amount for -mininput=<amount>: '%s' @@ -4088,22 +4097,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4113,10 +4122,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4133,7 +4147,7 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i @@ -4143,27 +4157,27 @@ This label turns red, if the priority is smaller than "medium". - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4178,22 +4192,22 @@ This label turns red, if the priority is smaller than "medium". GreĆĄka kod u?itavanja wallet.dat: Nov?anik pokvaren - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat GreĆĄka kod u?itavanja wallet.dat @@ -4213,17 +4227,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Program ne moĆŸe koristiti %s na ovom ra?unalu (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4233,47 +4247,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Nevaljali iznos za opciju - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Block creation options: Opcije za kreiranje bloka: - + Send trace/debug info to console instead of debug.log file Ć alji trace/debug informacije na konzolu umjesto u debug.log datoteku @@ -4288,7 +4302,7 @@ This label turns red, if the priority is smaller than "medium". Lozinka za JSON-RPC veze - + Execute command when the best block changes (%s in cmd is replaced by block hash) IzvrĆĄite naredbu kada se najbolji blok promjeni (%s u cmd je zamjenjen sa block hash) @@ -4298,12 +4312,12 @@ This label turns red, if the priority is smaller than "medium". Dozvoli DNS upite za -addnode, -seednode i -connect - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4335,12 +4349,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Upotreba: @@ -4350,7 +4364,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands PrikaĆŸi komande @@ -4385,17 +4399,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Učitavanje indeksa blokova... - + Add a node to connect to and attempt to keep the connection open Doda čvor s kojim se ĆŸelite povezati i nastoji odrĆŸati vezu otvorenu - + Loading wallet... Učitavanje novčanika... - + Cannot downgrade wallet Nije moguće novčanik vratiti na prijaĆĄnju verziju. @@ -4405,17 +4419,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Nije moguće upisati zadanu adresu. - + Rescanning... Ponovno pretraĆŸivanje... - + Done loading Učitavanje gotovo - + Error GreĆĄka diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts index ebd707e5f3..54b535de65 100644 --- a/src/qt/locale/bitcoin_hu.ts +++ b/src/qt/locale/bitcoin_hu.ts @@ -23,19 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Ez egy kĂ­sĂ©rleti program. -MIT/X11 szoftverlicenc alatt kiadva, lĂĄsd a mellĂ©kelt COPYING fĂĄjlt vagy a http://www.opensource.org/licenses/mit-license.php weboldalt. - -Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http://www.openssl.org/) fejlesztett szoftvert; kriptogrĂĄfiai szoftvert, melyet Eric Young (eay@cryptsoft.com) Ă­rt; Ă©s Thomas Bernard ĂĄltal Ă­rt UPnP szoftvert. - AddressBookPage @@ -312,12 +299,12 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// BitcoinGUI - + Sign &message... Üzenet alĂĄĂ­rĂĄsa... - + &Overview &ÁttekintĂ©s @@ -413,7 +400,7 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// KilĂ©pĂ©s az alkalmazĂĄsbĂłl - + &Options... &OpciĂłk... @@ -427,19 +414,11 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// Encrypt or decrypt wallet - - &Backup Wallet... - &BisztonsĂĄgi mĂĄsolat kĂ©szĂ­tĂ©se a TĂĄrcĂĄrĂłl - &Change Passphrase... JelszĂł &megvĂĄltoztatĂĄsa... - - Backup wallet to another location - BiztonsĂĄgi mĂĄsolat kĂ©szĂ­tĂ©se a tĂĄrcĂĄrĂłl egy mĂĄsik helyre - Change the passphrase used for wallet encryption @@ -491,7 +470,7 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// Üzenet &valĂłdisĂĄgĂĄnak ellenƑrzĂ©se - + Wallet TĂĄrca @@ -501,7 +480,7 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// - + &Send &KĂŒldĂ©s @@ -521,28 +500,12 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -552,7 +515,7 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// - + &Diagnostics @@ -582,14 +545,14 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// - + [testnet] [teszthĂĄlĂłzat] - + Gridcoin client @@ -599,7 +562,7 @@ Ez a termĂ©k tartalmaz az OpenSSL Project ĂĄltal az OpenSSL Toolkit-hez (http:// - + Last received block was generated %1. @@ -659,7 +622,7 @@ CĂ­m: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -706,7 +669,7 @@ CĂ­m: %4 - + %n second(s) @@ -744,7 +707,37 @@ CĂ­m: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &FĂĄjl @@ -759,17 +752,12 @@ CĂ­m: %4 - - &Advanced - - - - + &Help &SĂșgĂł - + Processed %n block(s) of transaction history. %n blokk feldolgozva a tranzakciĂł elƑzmĂ©nybƑl. @@ -809,12 +797,12 @@ CĂ­m: %4 NaprakĂ©sz - + Catching up... FrissĂ­tĂ©s... - + Sent transaction TranzakciĂł elkĂŒldve. @@ -824,19 +812,7 @@ CĂ­m: %4 BeĂ©rkezƑ tranzakciĂł - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - DĂĄtum: %1 -Összeg: %2 -TĂ­pus: %3 -CĂ­m: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -847,17 +823,13 @@ CĂ­m: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - A tĂĄrca <b>titkosĂ­tva</b> Ă©s jelenleg <b>nyitva</b>. - Wallet is <b>encrypted</b> and currently <b>locked</b> TĂĄrca <b>kĂłdolva</b> Ă©s jelenleg <b>zĂĄrva</b>. - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -865,7 +837,7 @@ CĂ­m: %4 ClientModel - + Network Alert HĂĄlĂłzati figyelmeztetĂ©s @@ -947,10 +919,6 @@ CĂ­m: %4 (un)select all mindent kivĂĄlaszt/elvet - - List mode - Lista nĂ©zet - Amount @@ -1316,7 +1284,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1534,10 +1502,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP &UPnP port-feltĂ©rkĂ©pezĂ©s - - Proxy &IP: - Proxy &IP: - &Port: @@ -1766,6 +1730,14 @@ This label turns red, if the priority is smaller than "medium". Nincs szinkronban. + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1827,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1839,7 +1811,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A Nem elĂ©rhetƑ @@ -1919,7 +1891,12 @@ This label turns red, if the priority is smaller than "medium". Ki: - + + &Scraper + + + + Debug log file Debug naplĂłfĂĄjl @@ -1949,7 +1926,7 @@ This label turns red, if the priority is smaller than "medium". Írd be azt, hogy <b>help</b> az elĂ©rhetƑ parancsok ĂĄttekintĂ©sĂ©hez. - + %1 B %1 B @@ -1984,12 +1961,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2059,7 +2036,7 @@ This label turns red, if the priority is smaller than "medium". Kliens nĂ©ve - + Welcome to the Gridcoin RPC console! @@ -2326,22 +2303,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Összeg: - + Pay &To: CĂ­mzett: - + &Label: CĂ­mke: - + Alt+A Alt+A @@ -2361,12 +2338,12 @@ This label turns red, if the priority is smaller than "medium". Üzenet: - + Form Ć°rlap - + Enter a label for this address to add it to your address book Milyen cĂ­mkĂ©vel kerĂŒljön be ez a cĂ­m a cĂ­mtĂĄradba? @@ -2388,17 +2365,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2645,26 +2617,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - Generated - LegenerĂĄlva + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Ć°rlap @@ -2777,27 +2770,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - TranzakciĂłazonosĂ­tĂł - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformĂĄciĂł - - - Transaction - TranzakciĂł - - - Inputs - Bemenetek - Amount @@ -2827,12 +2804,7 @@ This label turns red, if the priority is smaller than "medium". Ez a mezƑ a tranzakciĂł rĂ©szleteit mutatja - - View Attachment - - - - + Execute Contract @@ -2841,21 +2813,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &BezĂĄrĂĄs - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date DĂĄtum @@ -2927,7 +2889,7 @@ This label turns red, if the priority is smaller than "medium". LegenerĂĄlva, de mĂ©g el nem fogadva. - + Received with Erre a cĂ­mre @@ -2947,32 +2909,42 @@ This label turns red, if the priority is smaller than "medium". Magadnak kifizetve - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (nincs) - + Transaction status. Hover over this field to show number of confirmations. TranzakciĂł ĂĄllapota. HĂșzd ide a kurzort, hogy lĂĄsd a megerƑsĂ­tĂ©sek szĂĄmĂĄt. @@ -3166,17 +3138,10 @@ This label turns red, if the priority is smaller than "medium". meddig - - UpgradeDialog - - Hide - ElrejtĂ©s - - VotingChartDialog - + Poll Results @@ -3320,7 +3285,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3353,7 +3318,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3361,13 +3326,13 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: OpciĂłk - + This help message Ez a sĂșgĂł-ĂŒzenet @@ -3404,12 +3369,12 @@ This label turns red, if the priority is smaller than "medium". CsatlakozĂĄs idƑkerete milliszekundumban (alapĂ©rtelmezett: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3419,7 +3384,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3429,7 +3394,7 @@ This label turns red, if the priority is smaller than "medium". MaximĂĄlisan <n> szĂĄmĂș kapcsolat fenntartĂĄsa a peerekkel (alapĂ©rtelmezĂ©s: 125) - + Connect only to the specified node(s) CsatlakozĂĄs csak a megadott csomĂłponthoz @@ -3439,22 +3404,22 @@ This label turns red, if the priority is smaller than "medium". KapcsolĂłdĂĄs egy csomĂłponthoz a peerek cĂ­meinek megszerzĂ©se miatt, majd szĂ©tkapcsolĂĄs - + Specify your own public address Adja meg az Ön sajĂĄt nyilvĂĄnos cĂ­mĂ©t - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3464,22 +3429,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) HelytelenĂŒl viselkedƑ peerek levĂĄlasztĂĄsi hatĂĄrĂ©rtĂ©ke (alapĂ©rtelmezĂ©s: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) HelytelenĂŒl viselkedƑ peerek kizĂĄrĂĄsi ideje mĂĄsodpercben (alapĂ©rtelmezĂ©s: 86400) @@ -3574,6 +3539,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3634,6 +3609,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3699,11 +3679,6 @@ This label turns red, if the priority is smaller than "medium". Message Üzenet - - - Messate Type - - Miner: @@ -3740,12 +3715,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3755,12 +3725,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3830,12 +3795,12 @@ This label turns red, if the priority is smaller than "medium". UPnP-hasznĂĄlat engedĂ©lyezĂ©se a figyelƑ port feltĂ©rkĂ©pezĂ©sĂ©nĂ©l (default: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3846,7 +3811,7 @@ This label turns red, if the priority is smaller than "medium". - + Run in the background as a daemon and accept commands HĂĄttĂ©rben futtatĂĄs daemonkĂ©nt Ă©s parancsok elfogadĂĄsa @@ -3858,7 +3823,7 @@ This label turns red, if the priority is smaller than "medium". - + Output extra debugging information. Implies all other -debug* options @@ -3868,7 +3833,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3883,7 +3848,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3894,7 +3859,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) Parancsok kĂŒldĂ©se <ip> cĂ­men mƱködƑ csomĂłponthoz (alapĂ©rtelmezett: 127.0.0.1) @@ -3905,7 +3870,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3915,7 +3880,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format A TĂĄrca frissĂ­tĂ©se a legfrissebb formĂĄtumra @@ -3932,12 +3897,12 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -3952,12 +3917,12 @@ This label turns red, if the priority is smaller than "medium". - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -3967,12 +3932,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL-opciĂłk: (lĂĄsd a Bitcoin Wiki SSL-beĂĄllĂ­tĂĄsi instrukciĂłit) @@ -3995,17 +3960,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' ÉtvĂ©nytelen -paytxfee=<összeg> összeg: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Figyelem: a -paytxfee nagyon magas. Ennyi tranzakciĂłs dĂ­jat fogsz fizetni, ha elkĂŒldöd a tranzakciĂłt. - + Invalid amount for -mininput=<amount>: '%s' @@ -4015,22 +3980,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4040,10 +4005,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4060,17 +4030,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i Ismeretlen -socks proxy kĂ©rĂ©se: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' CsatlakozĂĄsi cĂ­m (-bind address) feloldĂĄsa nem sikerĂŒlt: '%s' @@ -4080,7 +4050,7 @@ This label turns red, if the priority is smaller than "medium". KĂŒlsƑ cĂ­m (-externalip address) feloldĂĄsa nem sikerĂŒlt: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4095,22 +4065,22 @@ This label turns red, if the priority is smaller than "medium". Hiba a wallet.dat betöltĂ©se közben: meghibĂĄsodott tĂĄrca - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Hiba az wallet.dat betöltĂ©se közben @@ -4130,17 +4100,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) A %s nem elĂ©rhetƑ ezen a gĂ©pen (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4150,42 +4120,42 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount ÉtvĂ©nytelen összeg - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -4205,7 +4175,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -4215,7 +4185,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4255,12 +4225,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4297,7 +4287,7 @@ This label turns red, if the priority is smaller than "medium". - + Execute command when the best block changes (%s in cmd is replaced by block hash) Parancs, amit akkor hajt vĂ©gre, amikor a legjobb blokk megvĂĄltozik (%s a cmd-ban lecserĂ©lƑdik a blokk hash-re) @@ -4307,12 +4297,12 @@ This label turns red, if the priority is smaller than "medium". DNS-kikeresĂ©s engedĂ©lyezĂ©se az addnode-nĂĄl Ă©s a connect-nĂ©l - + To use the %s option HasznĂĄld a %s opciĂłt - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4346,12 +4336,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Ha a fĂĄjl nem lĂ©tezik, hozd lĂ©tre 'csak a felhasznĂĄlĂł ĂĄltal olvashatĂł' fĂĄjl engedĂ©llyel - + Gridcoin version - + Usage: HasznĂĄlat: @@ -4361,7 +4351,7 @@ Ha a fĂĄjl nem lĂ©tezik, hozd lĂ©tre 'csak a felhasznĂĄlĂł ĂĄltal olvashat - + List commands Parancsok kilistĂĄzĂĄsa @@ -4388,12 +4378,12 @@ Ha a fĂĄjl nem lĂ©tezik, hozd lĂ©tre 'csak a felhasznĂĄlĂł ĂĄltal olvashat ÉrvĂ©nytelen -proxy cĂ­m: '%s' - + Unknown network specified in -onlynet: '%s' Ismeretlen hĂĄlĂłzat lett megadva -onlynet: '%s' - + Insufficient funds Nincs elĂ©g bitcoinod. @@ -4403,17 +4393,17 @@ Ha a fĂĄjl nem lĂ©tezik, hozd lĂ©tre 'csak a felhasznĂĄlĂł ĂĄltal olvashat Blokkindex betöltĂ©se... - + Add a node to connect to and attempt to keep the connection open ElĂ©rendƑ csomĂłpont megadĂĄsa and attempt to keep the connection open - + Loading wallet... TĂĄrca betöltĂ©se... - + Cannot downgrade wallet Nem sikerĂŒlt a TĂĄrca visszaĂĄllĂ­tĂĄsa a korĂĄbbi verziĂłra @@ -4423,17 +4413,17 @@ Ha a fĂĄjl nem lĂ©tezik, hozd lĂ©tre 'csak a felhasznĂĄlĂł ĂĄltal olvashat Nem sikerĂŒlt az alapĂ©rtelmezett cĂ­met Ă­rni. - + Rescanning... ÚjraszkennelĂ©s... - + Done loading BetöltĂ©s befejezve. - + Error Hiba diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts index 4edf282467..19ef735945 100644 --- a/src/qt/locale/bitcoin_id_ID.ts +++ b/src/qt/locale/bitcoin_id_ID.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Pesan &penanda... - + &Overview &Kilasan @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O Keluar dari aplikasi - + &Options... &Pilihan... @@ -415,7 +415,7 @@ This product includes software developed by the OpenSSL Project for use in the O Mengenkripsi atau mendekripsi dompet - + %n second(s) ago @@ -443,7 +443,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -458,7 +458,7 @@ Alamat: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -468,17 +468,39 @@ Alamat: %4 - &Backup Wallet... - &Cadangkan Dompet... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Ubah Kata Kunci... + + Scraper: superblock not needed - inactive. + - Backup wallet to another location - Cadangkan dompet ke lokasi lain + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Ubah Kata Kunci... @@ -531,7 +553,7 @@ Alamat: %4 &Verifikasi pesan... - + Wallet Dompet @@ -541,7 +563,7 @@ Alamat: %4 Gridcoin (CoinHitam) - + &Send &Kirim @@ -561,28 +583,12 @@ Alamat: %4 Tunjukkan informasi tentang Gridcoin - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -592,7 +598,7 @@ Alamat: %4 - + &Diagnostics @@ -622,14 +628,14 @@ Alamat: %4 - + [testnet] [testnet] - + Gridcoin client Klien Gridcoin @@ -639,19 +645,7 @@ Alamat: %4 - %1 minute(s) ago - %1 menit yang lalu - - - %1 hour(s) ago - %1 jam yang lalu - - - %1 day(s) ago - %1 hari yang lalu - - - + Last received block was generated %1. @@ -696,19 +690,7 @@ Alamat: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Tanggal: %1 -Jumlah: %2 -Jenis: %3 -Alamat: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -767,7 +749,7 @@ Alamat: %4 - + %n second(s) @@ -795,11 +777,7 @@ Alamat: %4 - Not staking - Lagi tidak staking - - - + &File &Berkas @@ -814,17 +792,12 @@ Alamat: %4 - - &Advanced - - - - + &Help &Bantuan - + Processed %n block(s) of transaction history. %n blok dari riwayat transaksi diproses. @@ -836,12 +809,12 @@ Alamat: %4 Terbaru - + Catching up... Menyusul... - + Sent transaction Transaksi terkirim @@ -851,16 +824,12 @@ Alamat: %4 Transaksi diterima - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Dompet saat ini <b>terenkripsi</b> dan <b>terbuka</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Dompet saat ini <b>terenkripsi</b> dan <b>terkunci</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -868,7 +837,7 @@ Alamat: %4 ClientModel - + Network Alert Notifikasi Jaringan @@ -950,10 +919,6 @@ Alamat: %4 (un)select all (Tidak)memilih semua - - List mode - Mode daftar - Amount @@ -1319,7 +1284,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1532,10 +1497,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Petakan port dengan &UPnP - - Proxy &IP: - IP Proxy: - &Port: @@ -1769,6 +1730,14 @@ This label turns red, if the priority is smaller than "medium". tidak tersinkron + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1830,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1842,7 +1811,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A T/S @@ -1922,7 +1891,12 @@ This label turns red, if the priority is smaller than "medium". Keluar: - + + &Scraper + + + + Debug log file Berkas catatan debug @@ -1952,7 +1926,7 @@ This label turns red, if the priority is smaller than "medium". Ketik <b>help</b> untuk menampilkan perintah tersedia. - + %1 B %1 B @@ -1987,12 +1961,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2062,7 +2036,7 @@ This label turns red, if the priority is smaller than "medium". Nama Klien - + Welcome to the Gridcoin RPC console! @@ -2329,22 +2303,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: J&umlah: - + Pay &To: Kirim &Ke: - + &Label: &Label: - + Alt+A Alt+J @@ -2364,12 +2338,12 @@ This label turns red, if the priority is smaller than "medium". Pesan: - + Form Formulir - + Enter a label for this address to add it to your address book Masukkan label bagi alamat ini untuk menambahkannya ke buku alamat Anda @@ -2390,17 +2364,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2647,22 +2616,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Dari @@ -2780,14 +2774,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informasi - - - Transaction - Transaksi - Amount @@ -2817,12 +2803,7 @@ This label turns red, if the priority is smaller than "medium". Jendela ini menampilkan deskripsi rinci dari transaksi tersebut - - View Attachment - - - - + Execute Contract @@ -2831,21 +2812,11 @@ This label turns red, if the priority is smaller than "medium". C&lose T&utup - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Tanggal @@ -2917,7 +2888,7 @@ This label turns red, if the priority is smaller than "medium". Terbuat tetapi tidak diterima - + Received with Diterima dengan @@ -2937,32 +2908,42 @@ This label turns red, if the priority is smaller than "medium". Pembayaran ke Anda sendiri - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (t/s) - + Transaction status. Hover over this field to show number of confirmations. Status transaksi. Arahkan ke bagian ini untuk menampilkan jumlah konfrimasi. @@ -3159,7 +3140,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3303,7 +3284,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3336,7 +3317,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... Mengirim... @@ -3344,37 +3325,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Pilihan: - + Specify data directory Tentukan direktori data - + Connect to a node to retrieve peer addresses, and disconnect Hubungkan ke node untuk menerima alamat peer, dan putuskan - + Specify your own public address Tentukan alamat publik Anda sendiri - + Accept command line and JSON-RPC commands Menerima perintah baris perintah dan JSON-RPC - + Run in the background as a daemon and accept commands Berjalan dibelakang sebagai daemin dan menerima perintah - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Jalankan perintah ketika perubahan transaksi dompet (%s di cmd digantikan oleh TxID) @@ -3384,7 +3365,7 @@ This label turns red, if the priority is smaller than "medium". Pilihan pembuatan blok: - + Specify wallet file (within data directory) Tentukan arsip dompet (dalam direktori data) @@ -3409,7 +3390,7 @@ This label turns red, if the priority is smaller than "medium". Kata sandi untuk hubungan JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Menjalankan perintah ketika perubahan blok terbaik (%s dalam cmd digantikan oleh hash blok) @@ -3419,7 +3400,7 @@ This label turns red, if the priority is smaller than "medium". Izinkan peninjauan DNS untuk -addnote, -seednode dan -connect - + Loading addresses... Memuat alamat... @@ -3429,12 +3410,12 @@ This label turns red, if the priority is smaller than "medium". Alamat -proxy salah: '%s' - + Unknown network specified in -onlynet: '%s' Jaringan tidak diketahui yang ditentukan dalam -onlynet: '%s' - + Insufficient funds Saldo tidak mencukupi @@ -3444,17 +3425,17 @@ This label turns red, if the priority is smaller than "medium". Memuat indeks blok... - + Add a node to connect to and attempt to keep the connection open Tambahkan node untuk dihubungkan dan upaya untuk menjaga hubungan tetap terbuka - + Loading wallet... Memuat dompet... - + Cannot downgrade wallet Tidak dapat menurunkan versi dompet @@ -3464,27 +3445,27 @@ This label turns red, if the priority is smaller than "medium". Tidak dapat menyimpan alamat standar - + Rescanning... Memindai ulang... - + Done loading Memuat selesai - + Error Gagal - + To use the %s option Gunakan pilihan %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3608,6 +3589,16 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3668,6 +3659,11 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem ERROR + + + Entire balance reserved + + Expires @@ -3728,11 +3724,6 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Message Pesan: - - - Messate Type - - Miner: @@ -3769,12 +3760,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - - No coins; - - - - + Offline; @@ -3784,12 +3770,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3874,7 +3855,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + List commands Daftar perintah @@ -3889,7 +3870,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Gridcoin - + This help message Pesan bantuan ini @@ -3914,12 +3895,12 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3929,7 +3910,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3939,22 +3920,22 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Mengatur hubungan paling banyak <n> ke peer (standar: 125) - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3964,27 +3945,27 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Batas untuk memutuskan peer buruk (standar: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Jumlah kedua untuk menjaga peer buruk dari hubung-ulang (standar: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3994,7 +3975,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Use UPnP to map the listening port (default: 1 when listening) @@ -4004,22 +3985,22 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Gunakan jaringan uji - + Output extra debugging information. Implies all other -debug* options @@ -4029,7 +4010,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Prepend debug output with timestamp @@ -4039,7 +4020,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4049,7 +4030,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Izinkan hubungan JSON-RPC dari alamat IP yang ditentukan - + Send commands to node running on <ip> (default: 127.0.0.1) Kirim perintah ke node berjalan pada <ip> (standar: 127.0.0.1) @@ -4059,7 +4040,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4069,7 +4050,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Upgrade wallet to latest format Perbarui dompet ke format terbaru @@ -4084,7 +4065,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Pindai ulang rantai-blok untuk transaksi dompet yang hilang - + Attempt to recover private keys from a corrupt wallet.dat @@ -4104,7 +4085,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Boinc Mining @@ -4114,7 +4095,7 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Error obtaining next project. Error 06172014. @@ -4164,12 +4145,32 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4184,12 +4185,12 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4209,17 +4210,17 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Kunci pribadi server (standar: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Jumlah salah untuk -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4229,22 +4230,22 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4254,10 +4255,15 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4274,32 +4280,32 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Unknown -socks proxy version requested: %i Diminta versi proxy -socks tidak diketahui: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Tidak dapat menyelesaikan alamat -bind: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' Tidak dapat menyelesaikan alamat -externalip: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4314,22 +4320,22 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Gagal memuat wallet.dat: Dompet rusak - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Gagal memuat wallet.dat @@ -4349,17 +4355,17 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Tidak dapat mengikat ke %s dengan komputer ini (ikatan gagal %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4369,37 +4375,37 @@ Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pem Eror: Dompet hanya di-buka hanya untuk staking, transaksi gagal dilaksanakan - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... Mengirim... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Jumlah salah - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index 71dfb90076..6d04a280ef 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Questo Ăš un software sperimentale. - -Distribuito sotto la licenza software MIT/X11, vedi il file COPYING incluso oppure su http://www.opensource.org/licenses/mit-license.php. - -Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso del Toolkit OpenSSL (http://www.openssl.org/), software crittografico scritto da Eric Young (eay@cryptsoft.com) e software UPnP scritto da Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso BitcoinGUI - + Sign &message... Firma &messaggio... - + &Overview &Sintesi @@ -414,7 +400,7 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Chiudi applicazione - + &Options... &Opzioni... @@ -429,7 +415,7 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Cifra o decifra il portamonete - + %n second(s) ago %n secondo fa @@ -461,7 +447,7 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso - + Date: %1 Amount: %2 Type: %3 @@ -476,7 +462,7 @@ Indirizzo: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -486,17 +472,39 @@ Indirizzo: %4 - &Backup Wallet... - &Backup portamonete... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Cambia passphrase... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + - Backup wallet to another location - Effettua il backup del portamonete + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Cambia passphrase... @@ -549,7 +557,7 @@ Indirizzo: %4 &Verifica messaggio... - + Wallet Portamonete @@ -559,7 +567,7 @@ Indirizzo: %4 Gridcoin - + &Send &Invia @@ -568,30 +576,6 @@ Indirizzo: %4 &Receive &Ricevi - - &Rebuild Block Chain - &Ricostruisci la Block Chain - - - Rebuild Block Chain - Ricoustruisci la Block Chain - - - &Download Blocks - &Scarica i blocchi - - - Download Blocks - Scarica i blocchi - - - &Upgrade Client - &Aggiorna il client - - - Upgrade Client - Aggiorna il client - &About Gridcoin @@ -603,36 +587,12 @@ Indirizzo: %4 Mostra informazioni su Gridcoin - - &Neural Network - &Rete neurale - - - - Neural Network - Rete neurale - - - &Advanced Configuration - &Impostazioni avanzate - - - Advanced Configuration - Impostazioni avanzate - - - - &New User Wizard - &Procedura guidata nuovo utente - - - - + New User Wizard Procedura guidata nuovo utente - + &Voting &Voto @@ -642,15 +602,7 @@ Indirizzo: %4 Voto - &Foundation - &Fondazione - - - Foundation - Fondazione - - - + &Diagnostics &Diagnostica @@ -659,14 +611,6 @@ Indirizzo: %4 Diagnostics Diagnostica - - FA&Q - &FAQ - - - Interactive FAQ - FAQ interattiva - Modify configuration options for Gridcoin @@ -688,14 +632,14 @@ Indirizzo: %4 - + [testnet] [testnet] - + Gridcoin client Client Gridcoin @@ -705,23 +649,7 @@ Indirizzo: %4 %1 connessione(i) attiva(e) verso la rete Gridcoin - %1 second(s) ago - %1 secondo(i) fa - - - %1 minute(s) ago - %1 minuto(i) fa - - - %1 hour(s) ago - %1 ora(e) fa - - - %1 day(s) ago - %1 giorno(i) fa - - - + Last received block was generated %1. L'ultimo blocco ricevuto Ăš stato generato %1. @@ -766,19 +694,7 @@ Indirizzo: %4 Attenzione! - Errore percorso BOINC! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -QuantitĂ : %2 -Tipo: %3 -Indirizzo: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. L'URI non puĂČ essere analizzato! CiĂČ puĂČ essere causato da un indirizzo Gridcoin non valido o da parametri URI non validi. @@ -837,7 +753,7 @@ Indirizzo: %4 - + %n second(s) %n secondo @@ -869,39 +785,7 @@ Indirizzo: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - In Staking.<br>Il tuo peso Ăš %1<br>Il peso della rete Ăš %2<br>Il tempo <b>stimato</b> per ricevere una ricompensa Ăš di %3. %4 - - - Not staking because wallet is locked - Non in staking perchĂ© il portamonete Ăš bloccato - - - Not staking because wallet is offline - Non in staking perchĂ© il portamonete Ăš offline - - - Not staking because wallet is syncing - Non in staking perchĂ© il portamonete Ăš in sincronizzazione - - - Not staking because you don't have mature coins and stake weight is too low. - Non in staking perchĂ© non possiedi monete mature e lo stake weight Ăš troppo basso. - - - Not staking because you don't have mature coins - Non in staking perchĂ© non possiedi monete mature - - - Searching for mature coins... Please wait - Cerco monete mature... Attendi - - - Not staking - Non in staking - - - + &File &File @@ -916,17 +800,12 @@ Indirizzo: %4 &Community - - &Advanced - &Avanzate - - - + &Help &Aiuto - + Processed %n block(s) of transaction history. Elaborato %n blocco dello storico transazioni. @@ -939,12 +818,12 @@ Indirizzo: %4 Aggiornato - + Catching up... In aggiornamento... - + Sent transaction Transazione inviata @@ -954,16 +833,12 @@ Indirizzo: %4 Transazione ricevuta - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Il portamonete Ăš <b>cifrato</b> ed attualmente <b>sbloccato</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Il portamonete Ăš <b>cifrato</b> ed attualmente <b>bloccato</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Si Ăš verificato un errore irreversibile. Gridcoin non puĂČ piĂč continuare in sicurezza e verrĂ  chiuso. @@ -971,7 +846,7 @@ Indirizzo: %4 ClientModel - + Network Alert Avviso di rete @@ -1053,10 +928,6 @@ Indirizzo: %4 (un)select all (de)seleziona tutto - - List mode - ModalitĂ  lista - Amount @@ -1436,7 +1307,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". NewPollDialog - + Create Poll Crea Sondaggio @@ -1649,10 +1520,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Map port using &UPnP Mappa le porte tramite &UPnP - - Proxy &IP: - &IP del proxy: - &Port: @@ -1819,10 +1686,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Error Messages: - - DPOR Weight: - Peso DPOR: - Magnitude: @@ -1848,10 +1711,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Current Poll: Sondaggio corrente: - - Client Messages: - Messaggi del client: - Available: @@ -1894,6 +1753,14 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". fuori sincrono + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1955,7 +1822,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". RPCConsole - + @@ -1967,7 +1834,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + N/A N/D @@ -2047,7 +1914,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Uscita: - + + &Scraper + + + + Debug log file File log del debug @@ -2077,7 +1949,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Scrivi <b>help</b> per un riassunto dei comandi disponibili. - + %1 B %1 B @@ -2112,12 +1984,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". %1 h %2 m - + Gridcoin - Debug Console Gridcoin - Console di Debug - + Boost version Versione Boost @@ -2187,7 +2059,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Nome del client - + Welcome to the Gridcoin RPC console! Benvenuto nella console RPC di Gridcoin! @@ -2454,22 +2326,22 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". SendCoinsEntry - + A&mount: &Importo: - + Pay &To: Paga &a: - + &Label: &Etichetta: - + Alt+A Alt+A @@ -2489,12 +2361,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Messaggio: - + Form Modulo - + Enter a label for this address to add it to your address book Inserisci un'etichetta per questo indirizzo per aggiungerlo alla rubrica @@ -2515,21 +2387,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Rimuovi questo beneficiario - + Send Custom Message to a Gridcoin Recipient Invia un messaggio personalizzato a un beneficiario Gridcoin - Track Coins - Traccia le monete - - - - Add Attachment - Aggiungi allegato - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Inserisci un indirizzo Gridcoin (es. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2760,22 +2623,47 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + Source Sorgente - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + TX ID @@ -2810,10 +2698,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Transaction Inputs - - Generated - Generato - @@ -2846,23 +2730,11 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". matura in altri %n blocchi - - Block Type - Tipo di blocco - - - Block Number - Numero blocco - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. Le monete generate da Gridcoin devono maturare 110 blocchi prima che possano essere spese. Quando hai generato questo blocco, Ăš stato trasmesso alla rete per essere aggiunto alla catena di blocchi. Se non riuscirĂ  ad entrare nella catena, il suo stato cambierĂ  in "non accettato" e non sarĂ  spendibile. Questo puĂČ accadere occasionalmente se un altro nodo genera un blocco entro pochi secondi dal tuo. - - Information - Informazioni - label @@ -2910,18 +2782,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Comment Commento - - Transaction ID - ID della transazione - - - Transaction - Transazione - - - Inputs - Input - Amount @@ -2938,7 +2798,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". falso - + Open for %n more block(s) Aperto per %n altro blocco @@ -2969,12 +2829,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Questo pannello mostra una descrizione dettagliata della transazione - - View Attachment - Mostra allegati - - - + Execute Contract Esegui contratto @@ -2983,21 +2838,11 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". C&lose C&hiudi - - - Gridcoin Documents - Documenti Gridcoin - - - - Document cannot be found on P2P server. - Il documento non puĂČ essere trovato sul server P2P. - TransactionTableModel - + Date Data @@ -3050,37 +2895,17 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Questo blocco non Ăš stato ricevuto da nessun altro nodo<br> e probabilmente non sarĂ  accettato! - + Received from Ricevuto da - - Mined - DPOR - Estratto - DPOR - - - - Minted - (Local) DPOR - Coniato - DPOR (Locale) - - - - Mined - PoR - Estratto - PoR - - - - Mined - Interest - Estratto - Interesse - - - + Destination address of transaction. Indirizzo di destinazione della transazione. - + Offline Offline @@ -3100,7 +2925,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Generato, ma non accettato - + Received with Ricevuto tramite @@ -3115,12 +2940,42 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Pagamento a te stesso - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/d) - + Transaction status. Hover over this field to show number of confirmations. Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme. @@ -3309,29 +3164,10 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". a - - UpgradeDialog - - Gridcoin Upgrading Facility - Servizio Aggiornamento Gridcoin - - - Retry Download - Riprova il download - - - Upgrade - Aggiorna - - - Hide - Nascondi - - VotingChartDialog - + Poll Results Risultati sondaggio @@ -3421,14 +3257,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Share Type Tipo quota - - Question - Domanda - - - Answers - Risposte - # Voters @@ -3439,10 +3267,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Total Shares Totale partecipazione - - URL - URL - Best Answer @@ -3468,10 +3292,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Share Type. Tipo quota. - - Question. - Domanda. - Total Participants. @@ -3482,10 +3302,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Total Shares. Totale quote. - - URL. - URL. - Best Answer. @@ -3495,7 +3311,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". VotingVoteDialog - + PlaceVote PlaceVote @@ -3528,7 +3344,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". WalletModel - + Sending... Invio... @@ -3536,20 +3352,16 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". bitcoin-core - + Options: Opzioni: - + This help message Questo messaggio di aiuto - - Specify configuration file (default: gridcoin.conf) - Specifica il file di configurazione (default: gridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -3581,12 +3393,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Specifica il timeout di connessione in millisecondi (predefinito: 5000) - + Connect through socks proxy Collegati tramite proxy socks - + Select the version of socks proxy to use (4-5, default: 5) Seleziona la versione del proxy socks da utilizzare (4-5, default: 5) @@ -3596,7 +3408,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Usa il proxy per raggiungere servizzi tor nascosti (default: come -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Resta in ascolto per le connessioni sulla <porta> (default: 32749 o testnet: 32748) @@ -3606,7 +3418,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Mantieni al massimo <n> connessioni ai peer (predefinite: 125) - + Connect only to the specified node(s) Connetti solo al nodo specificato @@ -3616,26 +3428,22 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Connessione ad un nodo e successiva disconnessione per recuperare gli indirizzi dei peer - + Specify your own public address Specifica il tuo indirizzo pubblico - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Connetti solo a nodi nella rete <rete> (IPv4, IPv6 o Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Scoprire il prorio indirizzo IP (predefinito: 1 se in ascolto e -externalip non impostato) - Find peers using internet relay chat (default: 0) - Trova peers che stanno usando la internet relay chat (default: 0) - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Accetta connessioni dall'esterno (predefinito: 1 se -proxy o -connect non impostati) @@ -3645,26 +3453,22 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Collegati ad un determinato indirizzo. Usa la notazione [host]:porta per IPv6 - + Find peers using DNS lookup (default: 1) Trova i peer usando DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sincronizza l'ora con gli altri nodi. Disabilitare nel caso in cui l'ora sul proprio sistema sia precisa es. sincronizzazione tramite NTP (default: 1) - Sync checkpoints policy (default: strict) - Politica sincronizzazione checkpoint (default: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) Soglia di disconnessione dei peer di cattiva qualitĂ  (predefinita: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Numero di secondi che i peer di cattiva qualitĂ  devono attendere prima di riconnettersi (predefiniti: 86400) @@ -3759,6 +3563,16 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3819,6 +3633,11 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". ERROR + + + Entire balance reserved + + Expires @@ -3884,11 +3703,6 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Message Messaggio - - - Messate Type - - Miner: @@ -3925,12 +3739,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - - No coins; - - - - + Offline; @@ -3940,12 +3749,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4025,12 +3829,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Usa UPnP per mappare la porta in ascolto (default: 0) - + Fee per KB to add to transactions you send Commissione per KB da aggiungere alle transazioni che invii - + When creating transactions, ignore inputs with value less than this (default: 0.01) Quando si creano transazioni, ignora input con valori minori di questo (default: 0.01) @@ -4040,13 +3844,13 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Accetta comandi da riga di comando e JSON-RPC - + Use the test network Utilizza la rete di prova - + Output extra debugging information. Implies all other -debug* options Visualizza informazioni extra di debug. Implica tutte le altre opzioni -debug* @@ -4056,7 +3860,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Visualizza informazioni extra di debug della rete - + Prepend debug output with timestamp Anteponi timestamp agli output del debug @@ -4066,7 +3870,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Invia informazioni di trace/debug al debugger - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Resta in ascolto per le connessioni JSON-RPC sulla <porta> (default: 15715 o testnet: 25715) @@ -4077,7 +3881,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + Send commands to node running on <ip> (default: 127.0.0.1) Inviare comandi al nodo in esecuzione su <ip> (default: 127.0.0.1) @@ -4087,7 +3891,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Richiedi una conferma per il resto (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Forza gli script delle transazioni ad utilizzare gli operatori PUSH canonici (default: 1) @@ -4097,7 +3901,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Esegui comando quando viene ricevuto un avviso pertinente (%s in cmd Ăš sostituito dal messaggio) - + Upgrade wallet to latest format Aggiorna il wallet all'ultimo formato @@ -4113,7 +3917,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + Attempt to recover private keys from a corrupt wallet.dat Tenta di recuperare le chiavi private da un wallet.dat corrotto @@ -4133,7 +3937,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + Boinc Mining @@ -4143,7 +3947,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + Error obtaining next project. Error 06172014. @@ -4193,12 +3997,32 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4213,12 +4037,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Imposta la dimensione massima di un blocco in byte (default: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Imposta la dimensione massima delle transazioni high-priority/low-fee in byte (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Opzioni SSL: (vedi il wiki di Bitcoin per le istruzioni di configurazione SSL) @@ -4239,21 +4063,17 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Chiave privata del server (default: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifrari accettabili (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Importo non valido per -paytxfee=<importo>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Attenzione: -paytxfee Ăš molto alta. Questa Ăš la commissione che si paga quando si invia una transazione. - + Invalid amount for -mininput=<amount>: '%s' Importo non valido per -mininput=<importo>: '%s' @@ -4263,22 +4083,22 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Verifica d'integrita di inizializzazione fallita. Gridcoin verrĂ  chiuso. - + Wallet %s resides outside data directory %s. Il portamonete %s Ăš fuori dalla cartella dati %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Impossibile ottenere un lock sulla cartella dati %s. Gridcoin Ăš probabilmente giĂ  in esecuzione. - + Verifying database integrity... Verifica dell'integritĂ  del database... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Errore durante l'inizializzazione dell'ambiente del database %s! Per ripristinare, FARE IL BACKUP DI QUELLA CARTELLA, poi rimuoverne tutto il contenuto tranne wallet.dat. @@ -4288,10 +4108,15 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Attenzione: wallet.dat corrotto, dati salvati! Il wallet.dat originale salvato come wallet.{timestamp}.bak in %s; se il tuo bilancio o le transazioni non sono corrette dovresti ripristinare da un backup. - + Vote Vota + + + Waiting for coins to mature + + Wallet locked; @@ -4308,17 +4133,17 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". wallet.dat corrotto, salvataggio fallito - + Unknown -socks proxy version requested: %i Richiesta versione -socks proxy sconosciuta: %i - + Invalid -tor address: '%s' Indirizzo -tor non valido: '%s' - + Cannot resolve -bind address: '%s' Impossibile risolvere indirizzo -bind: '%s' @@ -4328,16 +4153,10 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Impossibile risolvere indirizzo -externalip: '%s' - + Invalid amount for -reservebalance=<amount> Importo non valido per -reservebalance=<importo> - - Unable to sign checkpoint, wrong checkpointkey? - - Impossibile firmare checkpoint, chiave checkpoint errata? - - Error loading blkindex.dat @@ -4349,22 +4168,22 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Errore caricamento wallet.dat: portamonete corrotto - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Attenzione: errore di lettura di wallet.dat! Tutte le chiavi lette correttamente, ma i dati delle transazioni o le voci in rubrica potrebbero mancare o non essere corretti. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Errore durante il caricamento di wallet.dat: il portamonete richiede una versione piĂč recente di Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Il portamonete doveva essere riscritto: riavviare Gridcoin per completare - + Error loading wallet.dat Errore caricamento wallet.dat @@ -4384,17 +4203,17 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Errore: impossibile avviare il nodo - + Unable to bind to %s on this computer. Gridcoin is probably already running. Impossibile collegarsi alla %s su questo computer. Gridcoin Ăš probabilmente giĂ  in esecuzione. - + Unable to bind to %s on this computer (bind returned error %d, %s) Impossibile collegarsi alla %s su questo computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction Errore: portamonete bloccato, impossibile creare la transazione @@ -4404,59 +4223,47 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Errore: portamonete sbloccato solo per lo staking, impossibile creare la transazione. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Errore: questa transazione richiede una commissione di transazione di almeno %s a causa del suo importo, della sua complessitĂ  o dell'utilizzo di fondi ricevuti di recente - + Error: Transaction creation failed Errore: creazione della transazione fallita - + Sending... Invio... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Errore: la transazione Ăš stata rifiutata. Questo puĂČ accadere se alcune monete nel tuo portafoglio sono giĂ  state spese, ad esempio se hai usato una copia di wallet.dat e le monete sono state spese nella copia ma non sono state contrassegnate come spese qui. - + Invalid amount Importo non valido - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Attenzione: verificare che la data e l'ora del computer siano corrette! Se il tuo orologio Ăš sbagliato, Gridcoin non funzionerĂ  correttamente. - Warning: This version is obsolete, upgrade required! - Attenzione: questa versione Ăš obsoleta, aggiornamento necessario! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ATTENZIONE: rilevata violazione del checkpoint sincronizzato, ma ignorata! - - - + Warning: Disk space is low! Attenzione: lo spazio su disco Ăš ridotto! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ATTENZIONE: trovato checkpoint non valido! Le transazioni visualizzate potrebbero non essere corrette! Potrebbe essere necessario aggiornare o informare gli sviluppatori. - - - + Run in the background as a daemon and accept commands Esegui in background come demone ed accetta i comandi - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Esegue un comando quando lo stato di una transazione del portamonete cambia (%s in cmd Ăš sostituito da TxID) @@ -4466,12 +4273,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Opzioni creazione blocco: - + Failed to listen on any port. Use -listen=0 if you want this. Nessuna porta disponibile per l'ascolto. Usa -listen=0 se vuoi procedere comunque. - + Specify wallet file (within data directory) Specifica il file del portamonete (all'interno della cartella dati) @@ -4496,7 +4303,7 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Password per connessioni JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Esegue un comando quando il miglior blocco cambia (%s nel cmd Ăš sostituito dall'hash del blocco) @@ -4506,12 +4313,12 @@ Questa etichetta diventa rossa se la prioritĂ  Ăš minore di "media". Consente interrogazioni DNS per -addnode, -seednode e -connect - + To use the %s option Per usare l'opzione %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4553,12 +4360,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Devi settare rpcpassword=<password> nel file di configurazione: %s Se il file non esiste, crealo con i permessi di amministratore. - + Gridcoin version Versione Gridcoin - + Usage: Utilizzo: @@ -4568,7 +4375,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Invia comando a -server o gridcoind - + List commands Lista comandi @@ -4595,12 +4402,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Indirizzo -proxy non valido: '%s' - + Unknown network specified in -onlynet: '%s' Rete sconosciuta specificata in -onlynet: '%s' - + Insufficient funds Fondi insufficienti @@ -4610,17 +4417,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Caricamento dell'indice dei blocchi... - + Add a node to connect to and attempt to keep the connection open Aggiunge un nodo a cui connettersi e tenta di mantenere aperta la connessione - + Loading wallet... Caricamento portamonete... - + Cannot downgrade wallet Non Ăš possibile effettuare il downgrade del portamonete @@ -4630,17 +4437,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Non Ăš possibile scrivere l'indirizzo predefinito - + Rescanning... Ripetizione scansione... - + Done loading Caricamento completato - + Error Errore diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts index d8afbf0f3f..0d02563078 100644 --- a/src/qt/locale/bitcoin_ja.ts +++ b/src/qt/locale/bitcoin_ja.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... ăƒĄăƒƒă‚»ăƒŒă‚žăźçœČ損... (&m) - + &Overview 抂芁(&O) @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O ケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłă‚’ç”‚äș† - + &Options... ă‚Șăƒ—ă‚·ăƒ§ăƒł... (&O) @@ -415,7 +415,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + %n second(s) ago @@ -443,7 +443,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -451,7 +451,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -461,18 +461,10 @@ Address: %4 - &Backup Wallet... - ă‚Šă‚©ăƒŹăƒƒăƒˆăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—... (&B) - - - + &Change Passphrase... パă‚čăƒ•ăƒŹăƒŒă‚șăźć€‰æ›Ž... (&C) - - Backup wallet to another location - ă‚Šă‚©ăƒŹăƒƒăƒˆă‚’ä»–ăźć Žæ‰€ă«ăƒăƒƒă‚Żă‚ąăƒƒăƒ— - Change the passphrase used for wallet encryption @@ -524,7 +516,7 @@ Address: %4 ăƒĄăƒƒă‚»ăƒŒă‚žăźæ€œèšŒ... (&V) - + Wallet ă‚Šă‚©ăƒŹăƒƒăƒˆ @@ -534,7 +526,7 @@ Address: %4 - + &Send 送金 (&S) @@ -554,28 +546,12 @@ Address: %4 - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -585,7 +561,7 @@ Address: %4 - + &Diagnostics @@ -615,14 +591,14 @@ Address: %4 - + [testnet] [testnet] - + Gridcoin client @@ -632,7 +608,7 @@ Address: %4 - + Last received block was generated %1. @@ -677,7 +653,7 @@ Address: %4 - + URI handling URI ăźæ“äœœ @@ -736,7 +712,7 @@ Address: %4 - + %n second(s) %n 秒 @@ -764,7 +740,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File ăƒ•ă‚Ąă‚€ăƒ«(&F) @@ -779,17 +785,12 @@ Address: %4 - - &Advanced - - - - + &Help ăƒ˜ăƒ«ăƒ—(&H) - + Processed %n block(s) of transaction history. ăƒˆăƒ©ăƒłă‚¶ă‚Żă‚·ăƒ§ăƒłć±„æ­Žăź %n ăƒ–ăƒ­ăƒƒă‚Żă‚’ć‡Šç†ă—ăŸă—ăŸă€‚ @@ -801,12 +802,12 @@ Address: %4 ăƒăƒŒă‚žăƒ§ăƒłăŻæœ€æ–°ă§ă™ - + Catching up... èżœè·Ąäž­... - + Sent transaction é€é‡‘ć–ćŒ• @@ -816,16 +817,12 @@ Address: %4 ç€é‡‘ć–ćŒ• - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - ă‚Šă‚©ăƒŹăƒƒăƒˆăŻ<b>æš—ć·ćŒ–ă•ă‚ŒăŠă€ă‚ąăƒłăƒ­ăƒƒă‚Żă•ă‚ŒăŠă„ăŸă™</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> ă‚Šă‚©ăƒŹăƒƒăƒˆăŻ<b>æš—ć·ćŒ–ă•ă‚ŒăŠă€ăƒ­ăƒƒă‚Żă•ă‚ŒăŠă„ăŸă™</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -915,10 +912,6 @@ Address: %4 (un)select all すăčăŠéžæŠž/éžæŠžè§Łé™€ - - List mode - ăƒȘă‚čăƒˆăƒąăƒŒăƒ‰ - Amount @@ -1284,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1497,10 +1490,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP UPnP ă‚’äœżăŁăŠăƒăƒŒăƒˆă‚’ć‰Čă‚Šćœ“ăŠă‚‹ (&U) - - Proxy &IP: - ăƒ—ăƒ­ă‚­ă‚·ăź IP (&I) : - &Port: @@ -1734,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1795,7 +1792,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1807,7 +1804,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1827,12 +1824,12 @@ This label turns red, if the priority is smaller than "medium". è”·ć‹•ă—ăŸæ—„æ™‚ - + Gridcoin - Debug Console - + Boost version @@ -1907,7 +1904,12 @@ This label turns red, if the priority is smaller than "medium". 開く (&O) - + + &Scraper + + + + Command-line options ă‚łăƒžăƒłăƒ‰ăƒ©ă‚€ăƒł ă‚Șăƒ—ă‚·ăƒ§ăƒł @@ -1997,7 +1999,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B %1 B @@ -2294,22 +2296,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: 金額(&A): - + Pay &To: 送り慈(&T): - + &Label: ăƒ©ăƒ™ăƒ«(&L): - + Alt+A Alt+A @@ -2335,12 +2337,12 @@ This label turns red, if the priority is smaller than "medium". ケドレă‚čćžłă«èżœćŠ ă™ă‚‹ă«ăŻă€ă“ăźă‚ąăƒ‰ăƒŹă‚čăźăƒ©ăƒ™ăƒ«ă‚’ć…„ćŠ›ă—ăŸă™ - + Form ăƒ•ă‚©ăƒŒăƒ  - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2355,17 +2357,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2612,22 +2609,47 @@ This label turns red, if the priority is smaller than "medium". - + Source ă‚œăƒŒă‚č - + Generated in CoinBase - - Generated, PoS + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE - + + MINED - UNKNOWN + + + + TX ID @@ -2662,10 +2684,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Generated - ç”Ÿæˆă•ă‚ŒăŸ - @@ -2695,10 +2713,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - æƒ…ć ± - label @@ -2753,18 +2767,6 @@ This label turns red, if the priority is smaller than "medium". Comment コメント - - Transaction ID - ć–ćŒ• ID - - - Transaction - ć–ćŒ• - - - Inputs - 慄抛 - Amount @@ -2794,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". ă“ă“ă§ăŻć–ćŒ•ăźè©łçŽ°ă‚’èĄšç€șă—ăŠă„ăŸă™ - - View Attachment - - - - + Execute Contract @@ -2808,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose 閉じる(&C) - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date 旄付 @@ -2857,32 +2844,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. - + Open for %n more block(s) %n ä»„äžŠăźăƒ–ăƒ­ăƒƒă‚Żă‚’é–‹ă @@ -2919,7 +2886,7 @@ This label turns red, if the priority is smaller than "medium". ç”Ÿæˆă•ă‚ŒăŸă—ăŸăŒæ‰żèȘă•ă‚ŒăŸă›ă‚“ă§ă—ăŸ - + Received with 送り䞻 @@ -2939,12 +2906,42 @@ This label turns red, if the priority is smaller than "medium". è‡Ș戆è‡Șèș«ăžăźæ”Żæ‰•ă„ - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. ć–ćŒ•ăźçŠ¶æłă€‚ă“ăźăƒ•ă‚ŁăƒŒăƒ«ăƒ‰ăźäžŠă«ă‚«ăƒŒă‚œăƒ«ă‚’çœźăăšæ€œèšŒăźæ•°ă‚’èĄšç€șă—ăŸă™ă€‚ @@ -3133,17 +3130,10 @@ This label turns red, if the priority is smaller than "medium". から - - UpgradeDialog - - Hide - 隠す - - VotingChartDialog - + Poll Results @@ -3287,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3320,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3328,12 +3318,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ă‚Șăƒ—ă‚·ăƒ§ăƒł: - + This help message @@ -3368,12 +3358,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3383,7 +3373,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) <port> で æŽ„ç¶šă‚’ăƒȘă‚čン (ăƒ‡ăƒ•ă‚©ăƒ«ăƒˆ: 15714かtestnet は 25714) {32749 ?} {32748)?} @@ -3393,7 +3383,7 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) @@ -3403,22 +3393,22 @@ This label turns red, if the priority is smaller than "medium". ピケ ケドレă‚čă‚’ć–ćŸ—ă™ă‚‹ăŸă‚ă«ăƒŽăƒŒăƒ‰ă«æŽ„ç¶šă—ă€ăă—ăŠćˆ‡æ–­ă—ăŸă™ - + Specify your own public address あăȘたè‡Șèș«ăźăƒ‘ăƒ–ăƒȘックăȘケドレă‚čă‚’æŒ‡ćźš - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3428,22 +3418,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3538,6 +3528,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3598,6 +3598,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3663,11 +3668,6 @@ This label turns red, if the priority is smaller than "medium". Message ăƒĄăƒƒă‚»ăƒŒă‚ž - - - Messate Type - - Miner: @@ -3704,12 +3704,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3719,12 +3714,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3804,12 +3794,12 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3819,12 +3809,12 @@ This label turns red, if the priority is smaller than "medium". ă‚łăƒžăƒłăƒ‰ăƒ©ă‚€ăƒłăš JSON-RPC ă‚łăƒžăƒłăƒ‰ă‚’èš±ćŻ - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3834,7 +3824,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3844,7 +3834,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3854,7 +3844,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3864,7 +3854,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3874,7 +3864,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -3889,7 +3879,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -3909,7 +3899,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3919,7 +3909,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3969,12 +3959,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3989,12 +3999,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4014,17 +4024,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4034,22 +4044,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4059,10 +4069,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4079,17 +4094,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4099,7 +4114,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4114,22 +4129,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4149,17 +4164,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4169,47 +4184,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Run in the background as a daemon and accept commands ăƒ‡ăƒŒăƒąăƒłăšă—ăŠăƒăƒƒă‚Żă‚°ăƒ©ăƒłăƒ‰ă§ćźŸèĄŒă—ă‚łăƒžăƒłăƒ‰ă‚’èš±ćŻ - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) ă‚Šă‚©ăƒŹăƒƒăƒˆăźć–ćŒ•ă‚’ć€‰æ›Žă™ă‚‹éš›ă«ă‚łăƒžăƒłăƒ‰ă‚’ćźŸèĄŒ (cmd た %s は TxID ă«çœźæ›ă•ă‚Œă‚‹) @@ -4219,14 +4234,14 @@ This label turns red, if the priority is smaller than "medium". ăƒ–ăƒ­ăƒƒă‚Żäœœæˆă‚Șăƒ—ă‚·ăƒ§ăƒł: - + Failed to listen on any port. Use -listen=0 if you want this. ăƒăƒŒăƒˆăźăƒȘă‚čăƒłă«ć€±æ•—ă—ăŸă—ăŸă€‚ćż…èŠă§ă‚ă‚Œă° -listen=0 ă‚’äœżç”šă—ăŠăă ă•ă„ă€‚ - + Specify wallet file (within data directory) - ă‚Šă‚©ăƒŹăƒƒăƒˆăźăƒ•ă‚Ąă‚€ăƒ«ă‚’æŒ‡ćźš (ăƒ‡ăƒŒă‚żăƒ»ăƒ‡ă‚ŁăƒŹă‚ŻăƒˆăƒȘた䞭に) + ă‚Šă‚©ăƒŹăƒƒăƒˆăźăƒ•ă‚Ąă‚€ăƒ«ă‚’æŒ‡ćźšă€€(ăƒ‡ăƒŒă‚żăƒ»ăƒ‡ă‚ŁăƒŹă‚ŻăƒˆăƒȘた䞭に) @@ -4249,7 +4264,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC æŽ„ç¶šăźăƒ‘ă‚čăƒŻăƒŒăƒ‰ - + Execute command when the best block changes (%s in cmd is replaced by block hash) æœ€è‰Żăźăƒ–ăƒ­ăƒƒă‚Żă«ć€‰æ›Žă™ă‚‹éš›ă«ă‚łăƒžăƒłăƒ‰ă‚’ćźŸèĄŒ (cmd た %s はブロック ăƒăƒƒă‚·ăƒ„ă«çœźæ›ă•ă‚Œă‚‹) @@ -4259,12 +4274,12 @@ This label turns red, if the priority is smaller than "medium". -addnode, -seednode ず -connect で DNS ăƒ«ăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’èš±ćŻă™ă‚‹ - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4296,12 +4311,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: äœżç”šæł•: @@ -4311,7 +4326,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -4336,12 +4351,12 @@ If the file does not exist, create it with owner-readable-only file permissions. 無ćŠčăȘ -proxy ケドレă‚č: '%s' - + Unknown network specified in -onlynet: '%s' -onlynet ă§æŒ‡ćźšă•ă‚ŒăŸ '%s' はæœȘçŸ„ăźăƒăƒƒăƒˆăƒŻăƒŒă‚Żă§ă™ - + Insufficient funds æź‹é«˜äžè¶ł @@ -4351,17 +4366,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ブロック ă‚€ăƒłăƒ‡ăƒƒă‚Żă‚čをèȘ­ăżèŸŒă‚“ă§ă„ăŸă™... - + Add a node to connect to and attempt to keep the connection open æŽ„ç¶šă™ă‚‹ăƒŽăƒŒăƒ‰ă‚’èżœćŠ ă—æŽ„ç¶šă‚’äżæŒă—ăŸă™ - + Loading wallet... ă‚Šă‚©ăƒŹăƒƒăƒˆă‚’èȘ­ăżèŸŒă‚“ă§ă„ăŸă™... - + Cannot downgrade wallet ă‚Šă‚©ăƒŹăƒƒăƒˆăźăƒ€ă‚Šăƒłă‚°ăƒŹăƒŒăƒ‰ăŻă§ăăŸă›ă‚“ @@ -4371,17 +4386,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ćˆæœŸć€€ăźă‚ąăƒ‰ăƒŹă‚čă‚’æ›žăèŸŒă‚€ă“ăšăŒă§ăăŸă›ă‚“ - + Rescanning... 憍ă‚čキャン侭... - + Done loading èȘ­ăżèŸŒăżćźŒäș† - + Error ă‚šăƒ©ăƒŒ diff --git a/src/qt/locale/bitcoin_ka.ts b/src/qt/locale/bitcoin_ka.ts index 3243365d2a..7a101d9af5 100644 --- a/src/qt/locale/bitcoin_ka.ts +++ b/src/qt/locale/bitcoin_ka.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... ჼელ&მოწერა - + &Overview მიმ&ოჼილვა @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O გასვლა - + &Options... &ოპáƒȘიები @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - áƒĄáƒáƒ€áƒŁáƒšáƒ˜áƒĄ &არჄივირება - &Change Passphrase... Ⴠრაზა-პაროლის ჹე&áƒȘვლა - - Backup wallet to another location - áƒĄáƒáƒ€áƒŁáƒšáƒ˜áƒĄ არჄივირება სჼვა ადგილზე - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O &ვერიჀიკაáƒȘია - + Wallet áƒĄáƒáƒ€áƒŁáƒšáƒ” @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &გაგზავნა @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -594,7 +570,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -602,7 +578,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -649,7 +625,7 @@ Address: %4 - + %n second(s) @@ -691,7 +667,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Ⴠაილი @@ -706,17 +712,12 @@ Address: %4 - - &Advanced - - - - + &Help &დაჼმარება - + %n second(s) ago @@ -753,12 +754,12 @@ Address: %4 განაჼლებულია - + Catching up... ჩართვა... - + Last received block was generated %1. @@ -813,7 +814,7 @@ Address: %4 მიჩებული áƒąáƒ áƒáƒœáƒĄáƒáƒ„áƒȘიები - + URI handling @@ -824,17 +825,13 @@ Address: %4 URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - áƒĄáƒáƒ€áƒŁáƒšáƒ” <b>áƒ“áƒáƒšáƒ˜áƒ€áƒ áƒŁáƒšáƒ˜áƒ</b> და ამჟამად <b>განბლოკილია</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> áƒĄáƒáƒ€áƒŁáƒšáƒ” <b>áƒ“áƒáƒšáƒ˜áƒ€áƒ áƒŁáƒšáƒ˜áƒ</b> და ამჟამად <b>დაბლოკილია</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -842,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -924,10 +921,6 @@ Address: %4 Priority - - List mode - ქია - Amount @@ -1293,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1506,10 +1499,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP პორჱის გადამისამართება &UPnP-ით - - Proxy &IP: - áƒžáƒ áƒáƒ„áƒĄáƒ˜áƒĄ &IP: - &Port: @@ -1743,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1804,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1816,7 +1813,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A მიუწვდ. @@ -1871,12 +1868,12 @@ This label turns red, if the priority is smaller than "medium". &áƒ„áƒĄáƒ”áƒšáƒ˜áƒĄ áƒąáƒ áƒáƒ€áƒ˜áƒ™áƒ˜ - + Gridcoin - Debug Console - + Boost version @@ -1971,7 +1968,12 @@ This label turns red, if the priority is smaller than "medium". გამავალი: - + + &Scraper + + + + Debug log file დაჼვეწის ლოგ-Ⴠაილი @@ -2001,7 +2003,7 @@ This label turns red, if the priority is smaller than "medium". აკრიჀეთ <b>help</b> áƒ€áƒáƒšáƒ•áƒ”áƒ‘áƒŁáƒšáƒ˜ áƒ‘áƒ áƒ«áƒáƒœáƒ”áƒ‘áƒ”áƒ‘áƒ˜áƒĄ სანაჼავად. - + %1 B %1 B @@ -2036,7 +2038,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2303,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &რაოდენობა - + Pay &To: ადრესა&ჹი: - + &Label: ნიჹნუ&ლი: - + Alt+A Alt+A @@ -2338,12 +2340,12 @@ This label turns red, if the priority is smaller than "medium". მესიჯი: - + Form Ⴠორმა - + Enter a label for this address to add it to your address book @@ -2364,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2623,22 +2620,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2757,10 +2779,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - ინჀორმაáƒȘია - Amount @@ -2790,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". áƒąáƒ áƒáƒœáƒĄáƒáƒ„áƒȘიიქ დაწვრილებითი აჩწერილობა - - View Attachment - - - - + Execute Contract @@ -2804,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &დაჼურვა - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date თარიჩი @@ -2891,7 +2894,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2911,32 +2914,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3133,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3277,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3310,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3318,37 +3331,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ოპáƒȘიები: - + Specify data directory მიუთითეთ მონაáƒȘემთა კაჱალოგი - + Connect to a node to retrieve peer addresses, and disconnect მიერთება კვანძთან, პირების მისამართების მიჩება და გათიჹვა - + Specify your own public address მიუთითეთ თჄვენი საჯარო მისამართი - + Accept command line and JSON-RPC commands საკომანდო áƒĄáƒąáƒ áƒ˜áƒ„áƒáƒœáƒ˜áƒĄáƒ და JSON-RPC-კომამდების ნებართვა - + Run in the background as a daemon and accept commands რეზიდენჱულად გაჹვება და კომანდების მიჩება - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) კომანდის ჹესრულება áƒĄáƒáƒ€áƒŁáƒšáƒ˜áƒĄ áƒąáƒ áƒáƒœáƒĄáƒáƒ„áƒȘიიქ áƒȘვლილებისას (%s კომანდაჹი ჩანაáƒȘვლდება TxID-ით) @@ -3358,12 +3371,12 @@ This label turns red, if the priority is smaller than "medium". ბლოკის áƒšáƒ”áƒ„áƒ›áƒœáƒ˜áƒĄ ოპáƒȘიები: - + Failed to listen on any port. Use -listen=0 if you want this. ვერ ჼერჼდება პორჱების მიყურადება. თუ გსურთ, გამოიყენეთ -listen=0. - + Specify configuration file (default: gridcoinresearch.conf) @@ -3393,7 +3406,7 @@ This label turns red, if the priority is smaller than "medium". პაროლი JSON-RPC-ჹეერთებისათვის - + Execute command when the best block changes (%s in cmd is replaced by block hash) კომანდის ჹესრულება უკეთესი ბლოკის áƒ’áƒáƒ›áƒáƒ©áƒ”áƒœáƒ˜áƒĄáƒáƒĄ (%s კომანდაჹი ჩანაáƒȘვლდება ბლოკის ჰეჹით) @@ -3403,7 +3416,7 @@ This label turns red, if the priority is smaller than "medium". DNS-áƒ«áƒ”áƒ‘áƒœáƒ˜áƒĄ დაჹვება -addnode, -seednode და -connect-სათვის - + Loading addresses... მისამართების áƒ©áƒáƒąáƒ•áƒ˜áƒ áƒ—áƒ•áƒ... @@ -3413,12 +3426,12 @@ This label turns red, if the priority is smaller than "medium". არასწორია მისამართი -proxy: '%s' - + Unknown network specified in -onlynet: '%s' -onlynet-ლი მითითებულია უáƒȘნობი áƒ„áƒĄáƒ”áƒšáƒ˜: '%s' - + Insufficient funds არ არიქ საკმარისი თანჼა @@ -3428,17 +3441,17 @@ This label turns red, if the priority is smaller than "medium". ბლოკების áƒ˜áƒœáƒ“áƒ”áƒ„áƒĄáƒ˜áƒĄ áƒ©áƒáƒąáƒ•áƒ˜áƒ áƒ—áƒ•áƒ... - + Add a node to connect to and attempt to keep the connection open მისაერთებელი áƒ™áƒ•áƒáƒœáƒ«áƒ˜áƒĄ დამაჱება და მიერთების áƒšáƒ”áƒ«áƒšáƒ”áƒ‘áƒ˜áƒĄáƒ“áƒáƒ’áƒ•áƒáƒ áƒáƒ“ áƒšáƒ”áƒœáƒáƒ áƒ©áƒŁáƒœáƒ”áƒ‘áƒ - + Loading wallet... áƒĄáƒáƒ€áƒŁáƒšáƒ˜áƒĄ áƒ©áƒáƒąáƒ•áƒ˜áƒ áƒ—áƒ•áƒ... - + Cannot downgrade wallet áƒĄáƒáƒ€áƒŁáƒšáƒ˜áƒĄ ძველ ვერსიაზე გადაყვანა áƒšáƒ”áƒŁáƒ«áƒšáƒ”áƒ‘áƒ”áƒšáƒ˜áƒ @@ -3448,27 +3461,27 @@ This label turns red, if the priority is smaller than "medium". ვერ ჼერჼდება ნაგულისჼმევი მისამართის áƒ©áƒáƒŹáƒ”áƒ áƒ - + Rescanning... სკანირება... - + Done loading áƒ©áƒáƒąáƒ•áƒ˜áƒ áƒ—áƒ•áƒ დასრულებულია - + Error ჹეáƒȘდომა - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3590,6 +3603,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3650,6 +3673,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3710,11 +3738,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3751,12 +3774,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3766,12 +3784,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3851,7 +3864,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3866,7 +3879,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3891,12 +3904,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3906,7 +3919,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3916,22 +3929,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3941,27 +3954,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3971,7 +3984,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3981,22 +3994,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -4006,7 +4019,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4016,7 +4029,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4026,7 +4039,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -4036,7 +4049,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4046,7 +4059,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4061,7 +4074,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat @@ -4081,7 +4094,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -4091,7 +4104,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -4141,12 +4154,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4161,12 +4194,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4186,17 +4219,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4206,22 +4239,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4231,10 +4264,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4251,17 +4289,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4271,7 +4309,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -reservebalance=<amount> @@ -4286,22 +4324,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4321,17 +4359,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4341,37 +4379,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_kk_KZ.ts b/src/qt/locale/bitcoin_kk_KZ.ts index 3215b4fef0..0f10d3fc28 100644 --- a/src/qt/locale/bitcoin_kk_KZ.ts +++ b/src/qt/locale/bitcoin_kk_KZ.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Transactions &ĐąŃ€Đ°ĐœĐ·Đ°ĐșŃ†ĐžŃĐ»Đ°Ń€ @@ -309,21 +309,17 @@ This product includes software developed by the OpenSSL Project for use in the O ĐšŃ‹Ò“Ńƒ - + &Options... ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đ»Đ”Ń€Ń– - - &Backup Wallet... - Ó˜ĐŒĐžŃĐœĐŽŃ‹ Đ¶Đ°ŃŃ‹Ń€Ńƒ - &Change Passphrase... ÒšÒ±ĐżĐžŃ сөзЎі Ó©Đ·ĐłĐ”Ń€Ń‚Ńƒ - + Wallet Ó˜ĐŒĐžŃĐœ @@ -333,7 +329,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Overview @@ -439,28 +435,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -470,7 +450,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -565,7 +545,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File ЀаĐčĐ» @@ -580,24 +560,49 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Advanced + + Scraper: waiting on wallet to sync. - + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &Help ĐšÓ©ĐŒĐ”Đș - + [testnet] - + Gridcoin client @@ -615,12 +620,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + Catching up... - + Last received block was generated %1. @@ -683,7 +688,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -698,7 +703,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -708,13 +713,13 @@ Address: %4 - + URI handling - + %n second(s) ago @@ -746,7 +751,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -789,7 +794,7 @@ Address: %4 - + %n second(s) @@ -821,12 +826,12 @@ Address: %4 - + Up to date Đ–Đ°ÒŁĐ°Ń€Ń‚Ń‹Đ»Ò“Đ°Đœ - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -834,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1281,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1727,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1793,7 +1806,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information Đ˜ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ @@ -1815,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1964,6 +1977,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1990,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2287,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: ĐĄĐ°ĐœŃ‹ - + Form - + &Label: - + Enter a label for this address to add it to your address book @@ -2348,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2607,22 +2620,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2741,10 +2779,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Đ˜ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ - Amount @@ -2774,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2788,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Đ–Đ°Đ±Ńƒ - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date ĐšÒŻĐœŃ– @@ -2875,7 +2894,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2895,32 +2914,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3117,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3261,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3294,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3302,12 +3331,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3322,12 +3351,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error Ò›Đ°Ń‚Đ” - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3359,7 +3388,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3369,7 +3398,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3409,12 +3438,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3464,7 +3513,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3474,7 +3523,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3564,6 +3613,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3624,6 +3683,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3684,11 +3748,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3725,12 +3784,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3745,12 +3799,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3825,12 +3874,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3840,12 +3889,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3855,12 +3904,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3870,22 +3919,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3895,27 +3944,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3925,7 +3974,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3935,12 +3984,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3950,7 +3999,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3960,7 +4009,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3970,7 +4019,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4000,7 +4049,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4010,12 +4059,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4025,12 +4074,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4040,7 +4089,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4055,12 +4104,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4075,12 +4124,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4090,12 +4139,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4115,17 +4164,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4135,22 +4184,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4160,7 +4209,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4170,7 +4219,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4180,7 +4229,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4190,22 +4239,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4230,20 +4279,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4255,12 +4309,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4270,12 +4324,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4295,22 +4349,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4320,27 +4374,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4350,12 +4404,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts index 02599c27e4..4a854f60a9 100644 --- a/src/qt/locale/bitcoin_ko_KR.ts +++ b/src/qt/locale/bitcoin_ko_KR.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... 메시지 서ëȘ…(&M)... - + &Overview 개요(&O) @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O ì–Ží”ŒëŠŹìŒ€ìŽì…˜ ìą…ëŁŒ - + &Options... 옔션(&O) @@ -415,7 +415,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + %n second(s) ago @@ -443,7 +443,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -451,7 +451,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -461,18 +461,10 @@ Address: %4 - &Backup Wallet... - 지갑 백업(&B)... - - - + &Change Passphrase... ì•”í˜žëŹž 변êČœ(&C)... - - Backup wallet to another location - 지갑을 닀넞임소에 백업 - Change the passphrase used for wallet encryption @@ -524,7 +516,7 @@ Address: %4 메시지 확읞(&V)... - + Wallet 지갑 @@ -534,7 +526,7 @@ Address: %4 - + &Send ëłŽë‚Žêž°(&S) @@ -554,28 +546,12 @@ Address: %4 - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -585,7 +561,7 @@ Address: %4 - + &Diagnostics @@ -615,14 +591,14 @@ Address: %4 - + [testnet] [테슀튞넷] - + Gridcoin client @@ -632,7 +608,7 @@ Address: %4 - + Last received block was generated %1. @@ -677,7 +653,7 @@ Address: %4 - + URI handling URI 핞듀링 @@ -736,7 +712,7 @@ Address: %4 - + %n second(s) %n 쎈 @@ -764,7 +740,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File 파음(&F) @@ -779,17 +785,12 @@ Address: %4 - - &Advanced - - - - + &Help 도움말(&H) - + Processed %n block(s) of transaction history. %n 뾔럭 만큌의 거래 êž°ëĄìŽ ìȘ늏됚. @@ -801,12 +802,12 @@ Address: %4 í˜„ìžŹêčŒì§€ - + Catching up... 뾔록 ë”°ëŒìžĄêž°... - + Sent transaction 거래 ëłŽë‚Žêž° @@ -816,16 +817,12 @@ Address: %4 ë“€ì–Žì˜€êł  있는 거래 - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 지갑읎 암혞화 ë˜ì—ˆêł  í˜„ìžŹ ì°šë‹ší•Žì œ 되었슔니닀 - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> 지갑읎 암혞화 ë˜ì—ˆêł  í˜„ìžŹ 잠êČšì ž 있슔니닀 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -915,10 +912,6 @@ Address: %4 (un)select all ëȘšë‘ 선택(하지 않음) - - List mode - ëŠŹìŠ€íŠž ëȘšë“œ - Amount @@ -1284,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1497,10 +1490,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP ì‚Źìš©ì€‘ìž &UPnP 포튾 맀핑 - - Proxy &IP: - í”„ëĄì‹œ &IP: - &Port: @@ -1734,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1795,7 +1792,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1807,7 +1804,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A 없음 @@ -1827,12 +1824,12 @@ This label turns red, if the priority is smaller than "medium". 시작 시간 - + Gridcoin - Debug Console - + Boost version @@ -1907,7 +1904,12 @@ This label turns red, if the priority is smaller than "medium". ì—Žêž°(&O) - + + &Scraper + + + + Command-line options ëȘ…ë č쀄 옔션 @@ -1992,7 +1994,7 @@ This label turns red, if the priority is smaller than "medium". ì‚Źìš©í•  수 있는 ëȘ…ë č을 ë‘˜ëŸŹëłŽë €ë©Ž <b>help</b>ë„Œ 입렄하십시였. - + %1 B %1 바읎튞 @@ -2027,7 +2029,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2294,22 +2296,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: êžˆì•Ą(&M): - + Pay &To: ì†Ąêžˆí•  대상(&T): - + &Label: 띌ëČš(&L): - + Alt+A Alt+A @@ -2350,22 +2352,17 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Form 유형 - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2612,22 +2609,17 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS - - - - + TX ID @@ -2669,7 +2661,37 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + unknown @@ -2691,10 +2713,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - ì •ëłŽ - label @@ -2778,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". 읎 찜은 거래의 섞부낎역을 ëłŽì—Źì€ë‹ˆë‹€ - - View Attachment - - - - + Execute Contract @@ -2792,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose ë‹«êž°(&L) - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date 날짜 @@ -2841,32 +2844,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. - + Open for %n more block(s) @@ -2903,7 +2886,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with 받은 ìŁŒì†Œ @@ -2923,12 +2906,42 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3117,17 +3130,10 @@ This label turns red, if the priority is smaller than "medium". 상대방 - - UpgradeDialog - - Hide - 숚ꞰꞰ - - VotingChartDialog - + Poll Results @@ -3271,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3304,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3312,12 +3318,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: 옔션: - + This help message @@ -3352,12 +3358,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3367,7 +3373,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3377,7 +3383,7 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) @@ -3387,22 +3393,22 @@ This label turns red, if the priority is smaller than "medium". 플얎 ìŁŒì†Œë„Œ 받Ʞ 위핎 녞드에 연êČ°í•˜êł , 받은 후에 연êČ°ì„ 끊슔니닀 - + Specify your own public address êł”ìž ìŁŒì†Œë„Œ 지정하십시였 - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3412,22 +3418,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3522,6 +3528,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3582,6 +3598,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3647,11 +3668,6 @@ This label turns red, if the priority is smaller than "medium". Message 메시지 - - - Messate Type - - Miner: @@ -3688,12 +3704,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3703,12 +3714,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3788,12 +3794,12 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3803,12 +3809,12 @@ This label turns red, if the priority is smaller than "medium". ëȘ…ë čì€„êłŒ JSON-RPC ëȘ…ë č 수띜 - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3818,7 +3824,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3828,7 +3834,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3838,7 +3844,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3848,7 +3854,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3858,7 +3864,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -3873,7 +3879,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -3893,7 +3899,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3903,7 +3909,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3953,12 +3959,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3973,12 +3999,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -3998,17 +4024,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4018,22 +4044,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4043,10 +4069,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4063,17 +4094,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4083,7 +4114,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4098,22 +4129,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4133,17 +4164,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4153,47 +4184,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Run in the background as a daemon and accept commands 데ëȘŹìœŒëĄœ 백귞띌욎드에서 ì‹€í–‰í•˜êł  ëȘ…ë č을 허용 - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) 지갑 거래가 바뀌멎 ëȘ…ë č을 싀행합니닀.(%s 안의 ëȘ…ë čì–Žê°€ TxID로 바뀝니닀) @@ -4203,12 +4234,12 @@ This label turns red, if the priority is smaller than "medium". 뾔록 생성 옔션: - + Failed to listen on any port. Use -listen=0 if you want this. ì–Žë–€ 포튾도 반응하지 않슔니닀. ì‚Źìš©ìž 반응=0 만앜 원한닀멎 - + Specify wallet file (within data directory) 데읎터 폮더 안에 지갑 파음을 선택하섞요. @@ -4233,7 +4264,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC 연êČ°ì— ì‚Źìš©í•  암혞 - + Execute command when the best block changes (%s in cmd is replaced by block hash) ì”œêł ì˜ 랔럭읎 ëł€í•˜ë©Ž ëȘ…ë č을 싀행(cmd 에 있는 %s 는 뾔럭 핎시에 의핎 대ìČŽë˜ì–Ž 짐) @@ -4243,12 +4274,12 @@ This label turns red, if the priority is smaller than "medium". -addnode, -seednode, -connect 옔션에 대핮 DNS 탐색 허용 - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4280,12 +4311,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: ì‚Źìš©ëȕ: @@ -4295,7 +4326,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -4320,12 +4351,12 @@ If the file does not exist, create it with owner-readable-only file permissions. 잘ëȘ»ëœ -proxy ìŁŒì†Œìž…ë‹ˆë‹€: '%s' - + Unknown network specified in -onlynet: '%s' -onlynet에 지정한 ë„€íŠžì›ŒíŹë„Œ 알 수 없슔니닀: '%s' - + Insufficient funds 자ꞈ ë¶€ìĄ± @@ -4335,17 +4366,17 @@ If the file does not exist, create it with owner-readable-only file permissions. 뾔럭 읞덱슀넌 ë¶ˆëŸŹì˜€ëŠ” 쀑... - + Add a node to connect to and attempt to keep the connection open 녞드넌 ì¶”ê°€í•˜ì—Ź 연êČ°í•˜êł  연êČ°ìƒíƒœë„Œ êł„ì† ìœ ì§€í•˜ë €êł  시도합니닀. - + Loading wallet... 지갑을 ë¶ˆëŸŹì˜€ëŠ” 쀑... - + Cannot downgrade wallet 지갑을 닀욎귞레읎드 할 수 없슔니닀 @@ -4355,17 +4386,17 @@ If the file does not exist, create it with owner-readable-only file permissions. êž°ëłž êł„ìąŒì— êž°ëĄí•  수 없슔니닀 - + Rescanning... ìžŹêČ€ìƒ‰ 쀑... - + Done loading ëĄœë”© ì™„ëŁŒ - + Error 였넘 diff --git a/src/qt/locale/bitcoin_ky.ts b/src/qt/locale/bitcoin_ky.ts index b0252d3413..c69eca4102 100644 --- a/src/qt/locale/bitcoin_ky.ts +++ b/src/qt/locale/bitcoin_ky.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Transactions &ĐąŃ€Đ°ĐœĐ·Đ°ĐșŃ†ĐžŃĐ»Đ°Ń€ - + &Backup Wallet/Config... @@ -319,7 +319,7 @@ This product includes software developed by the OpenSSL Project for use in the O Đ‘ĐžĐ»ĐŽĐžŃ€ÒŻÒŻĐœÒŻ &Ń‚Đ”ĐșŃˆĐ”Ń€ÒŻÒŻ... - + Wallet КапчыĐș @@ -329,7 +329,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Overview @@ -440,28 +440,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -471,7 +485,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -561,7 +575,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File &ЀаĐčĐ» @@ -576,24 +590,19 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Advanced - - - - + &Help &Đ–Đ°Ń€ĐŽĐ°ĐŒ - + [testnet] - + Gridcoin client @@ -611,12 +620,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + Catching up... - + Last received block was generated %1. @@ -679,7 +688,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -694,7 +703,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -704,13 +713,13 @@ Address: %4 - + URI handling - + %n second(s) ago @@ -742,7 +751,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -785,7 +794,7 @@ Address: %4 - + %n second(s) @@ -817,12 +826,12 @@ Address: %4 - + Up to date Đ–Đ°ÒŁŃ‹Đ»Đ°ĐœĐłĐ°Đœ - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -830,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1277,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1723,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1784,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + &Information ĐœĐ°Đ°Đ»Ń‹ĐŒĐ°Ń‚ @@ -1806,7 +1823,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1941,7 +1958,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + &Open &Ачуу @@ -1956,7 +1978,7 @@ This label turns red, if the priority is smaller than "medium". ĐšĐŸĐœŃĐŸĐ»ĐŽŃƒ Ń‚Đ°Đ·Đ°Đ»ĐŸĐŸ - + Gridcoin - Debug Console @@ -1986,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2288,12 +2310,12 @@ This label turns red, if the priority is smaller than "medium". - + &Label: - + Enter a label for this address to add it to your address book @@ -2339,22 +2361,17 @@ This label turns red, if the priority is smaller than "medium". Đ‘ĐžĐ»ĐŽĐžŃ€ÒŻÒŻ: - + Send Custom Message to a Gridcoin Recipient - + A&mount: - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2603,22 +2620,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2737,10 +2779,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - ĐœĐ°Đ°Đ»Ń‹ĐŒĐ°Ń‚ - Amount @@ -2770,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2784,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Дата @@ -2871,7 +2894,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2891,32 +2914,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3113,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3257,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3290,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3298,12 +3331,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3318,12 +3351,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error Ката - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3355,7 +3388,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3365,7 +3398,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3405,12 +3438,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3460,7 +3513,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3470,7 +3523,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3560,6 +3613,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3620,6 +3683,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3680,11 +3748,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message Đ‘ĐžĐ»ĐŽĐžŃ€ÒŻÒŻ - - - Messate Type - - Miner: @@ -3721,12 +3784,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3741,12 +3799,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3821,12 +3874,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3836,12 +3889,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3851,12 +3904,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3866,22 +3919,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3891,27 +3944,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3921,7 +3974,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3931,12 +3984,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3946,7 +3999,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3956,7 +4009,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3966,7 +4019,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3996,7 +4049,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4006,12 +4059,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4021,12 +4074,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4036,7 +4089,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4051,12 +4104,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4071,12 +4124,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4086,12 +4139,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4111,17 +4164,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4131,22 +4184,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4156,7 +4209,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4166,7 +4219,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4176,7 +4229,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4186,22 +4239,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4226,20 +4279,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4251,12 +4309,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4266,12 +4324,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4291,22 +4349,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4316,27 +4374,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4346,12 +4404,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_la.ts b/src/qt/locale/bitcoin_la.ts index 9a97b5c645..aa089049cd 100644 --- a/src/qt/locale/bitcoin_la.ts +++ b/src/qt/locale/bitcoin_la.ts @@ -23,19 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Hoc est experimentale programma. - -Distributum sub MIT/X11 licentia programmatum, vide comitantem plicam COPYING vel http://www.opensource.org/licenses/mit-license.php. - -Hoc productum continet programmata composita ab OpenSSL Project pro utendo in OpenSSL Toolkit (http://www.openssl.org/) et programmata cifrarum scripta ab Eric Young (eay@cryptsoft.com) et UPnP programmata scripta ab Thomas Bernard. - AddressBookPage @@ -312,12 +299,12 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op BitcoinGUI - + Gridcoin - + Send coins to a Gridcoin address @@ -393,28 +380,42 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -424,7 +425,7 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op - + &Diagnostics @@ -489,24 +490,19 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op Exporta data in hac tabella in plicam - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -524,7 +520,7 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op - + Last received block was generated %1. @@ -584,7 +580,7 @@ Inscriptio: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -594,19 +590,7 @@ Inscriptio: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Dies: %1 -Quantitas: %2 -Typus: %3 -Inscriptio: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -665,7 +649,7 @@ Inscriptio: %4 - + %n second(s) @@ -697,7 +681,7 @@ Inscriptio: %4 - + &Overview &Summarium @@ -727,7 +711,7 @@ Inscriptio: %4 Exi applicatione - + &Options... &Optiones @@ -736,19 +720,11 @@ Inscriptio: %4 &Encrypt Wallet... &Cifra Cassidile... - - &Backup Wallet... - &Conserva Cassidile... - &Change Passphrase... &Muta tesseram... - - Backup wallet to another location - Conserva cassidile in locum alium - Change the passphrase used for wallet encryption @@ -770,12 +746,12 @@ Inscriptio: %4 &Verifica nuntium... - + Wallet Cassidile - + &Send &Mitte @@ -785,12 +761,12 @@ Inscriptio: %4 &Accipe - + &Show / Hide &Monstra/Occulta - + &File &Plica @@ -800,12 +776,12 @@ Inscriptio: %4 &Configuratio - + &Help &Auxilium - + %n second(s) ago @@ -842,12 +818,12 @@ Inscriptio: %4 Recentissimo - + Catching up... Persequens... - + Sent transaction Transactio missa @@ -857,16 +833,12 @@ Inscriptio: %4 Transactio incipiens - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Cassidile <b>cifratum</b> est et iam nunc <b>reseratum</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Cassidile <b>cifratum</b> est et iam nunc <b>seratum</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -874,7 +846,7 @@ Inscriptio: %4 ClientModel - + Network Alert Monitio Retis @@ -1321,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1539,10 +1511,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Designa portam utendo &UPnP - - Proxy &IP: - &IP vicarii: - &Port: @@ -1771,6 +1739,14 @@ This label turns red, if the priority is smaller than "medium". non synchronizato + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1832,7 +1808,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1844,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1924,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". Scribe <b>help</b> pro summario possibilium mandatorum. - + %1 B @@ -1959,12 +1935,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2064,7 +2040,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + Welcome to the Gridcoin RPC console! @@ -2331,22 +2312,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &Quantitas: - + Pay &To: Pensa &Ad: - + &Label: &Titulus: - + Alt+A Alt+A @@ -2366,12 +2347,12 @@ This label turns red, if the priority is smaller than "medium". Nuntius: - + Form Schema - + Enter a label for this address to add it to your address book Insero titulum huic inscriptioni ut eam in tuum librum inscriptionum addas. @@ -2392,17 +2373,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2651,26 +2627,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Fons - Generated - Generatum + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Ab @@ -2784,27 +2781,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID transactionis - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informatio - - - Transaction - Transactio - - - Inputs - Lectenda - Amount @@ -2834,12 +2815,7 @@ This label turns red, if the priority is smaller than "medium". Haec tabula monstrat descriptionem verbosam transactionis - - View Attachment - - - - + Execute Contract @@ -2848,21 +2824,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Dies @@ -2935,7 +2901,7 @@ This label turns red, if the priority is smaller than "medium". Generatum sed non acceptum - + Received with Acceptum cum @@ -2955,32 +2921,42 @@ This label turns red, if the priority is smaller than "medium". Pensitatio ad te ipsum - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Status transactionis. Supervola cum mure ut monstretur numerus confirmationum. @@ -3177,7 +3153,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3321,7 +3297,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3354,7 +3330,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3362,37 +3338,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Optiones: - + Specify data directory Specifica indicem datorum - + Connect to a node to retrieve peer addresses, and disconnect Conecta ad nodum acceptare inscriptiones parium, et disconecte - + Specify your own public address Specifica tuam propriam publicam inscriptionem - + Accept command line and JSON-RPC commands Accipe terminalis et JSON-RPC mandata. - + Run in the background as a daemon and accept commands Operare infere sicut daemon et mandata accipe - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Facere mandatum quotiescumque cassidilis transactio mutet (%s in mandato sbstituitur ab TxID) @@ -3417,7 +3393,7 @@ This label turns red, if the priority is smaller than "medium". Optiones creandi frustorum: - + Boinc Mining @@ -3427,7 +3403,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3467,12 +3443,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3557,7 +3553,7 @@ This label turns red, if the priority is smaller than "medium". Tessera pro conexionibus JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Pelle mandatum quando optissimum frustum mutat (%s in mandato substituitur ab hash frusti) @@ -3567,7 +3563,7 @@ This label turns red, if the priority is smaller than "medium". Permitte quaerenda DNS pro -addnode, -seednode, et -connect - + Loading addresses... Legens inscriptiones... @@ -3577,12 +3573,12 @@ This label turns red, if the priority is smaller than "medium". Inscriptio -proxy non valida: '%s' - + Unknown network specified in -onlynet: '%s' Ignotum rete specificatum in -onlynet: '%s' - + Insufficient funds Inopia nummorum @@ -3592,17 +3588,17 @@ This label turns red, if the priority is smaller than "medium". Legens indicem frustorum... - + Add a node to connect to and attempt to keep the connection open Adice nodum cui conectere et conare sustinere conexionem apertam - + Loading wallet... Legens cassidile... - + Cannot downgrade wallet Non posse cassidile regredi @@ -3612,27 +3608,27 @@ This label turns red, if the priority is smaller than "medium". Non posse scribere praedefinitam inscriptionem - + Rescanning... Iterum perlegens... - + Done loading Completo lengendi - + Error Error - + To use the %s option Ut utaris optione %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3666,12 +3662,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam legere sinatur. - + Gridcoin version - + Usage: Usus: @@ -3681,7 +3677,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + List commands Enumera mandata @@ -3696,7 +3692,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + This help message Hic nuntius auxilii @@ -3726,12 +3722,12 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Specifica tempumfati conexionis in millisecundis (praedefinitum: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3741,7 +3737,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3751,22 +3747,22 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Manutene non plures quam <n> conexiones ad paria (praedefinitum: 125) - + Connect only to the specified node(s) Conecte sole ad nodos specificatos (vel nodum specificatum) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Tantum conecte ad nodos in rete <net> (IPv4, IPv6 aut Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Discooperi propriam inscriptionem IP (praedefinitum: 1 quando auscultans et nullum -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Accipe conexiones externas (praedefinitum: 1 nisi -proxy neque -connect) @@ -3776,27 +3772,27 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Limen pro disconectendo paria improba (praedefinitum: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Numerum secundorum prohibere ne paria improba reconectant (praedefinitum: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maxima magnitudo memoriae pro datis accipendis singulis conexionibus, <n>*1000 octetis/bytes (praedefinitum: 5000) @@ -3806,7 +3802,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Maxima magnitudo memoriae pro datis mittendis singulis conexionibus, <n>*1000 octetis/bytes (praedefinitum: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Utere UPnP designare portam auscultandi (praedefinitum: 1 quando auscultans) @@ -3816,22 +3812,22 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Utere UPnP designare portam auscultandi (praedefinitum: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Utere rete experimentale - + Output extra debugging information. Implies all other -debug* options @@ -3841,7 +3837,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Prepend debug output with timestamp @@ -3851,7 +3847,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3861,7 +3857,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Permitte conexionibus JSON-RPC ex inscriptione specificata - + Send commands to node running on <ip> (default: 127.0.0.1) Mitte mandata nodo operanti in <ip> (praedefinitum: 127.0.0.1) @@ -3871,7 +3867,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3881,7 +3877,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Upgrade wallet to latest format Progredere cassidile ad formam recentissimam @@ -3896,7 +3892,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Iterum perlege catenam frustorum propter absentes cassidilis transactiones - + Attempt to recover private keys from a corrupt wallet.dat Conare recipere claves privatas de corrupto wallet.dat @@ -3991,6 +3987,16 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -4051,6 +4057,11 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege ERROR + + + Entire balance reserved + + Expires @@ -4121,11 +4132,6 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Message Nuntius - - - Messate Type - - Miner: @@ -4162,12 +4168,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - - No coins; - - - - + Offline; @@ -4177,12 +4178,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4207,12 +4203,12 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Optiones SSL: (vide vici de Bitcoin pro instructionibus SSL configurationis) @@ -4232,17 +4228,17 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Clavis privata daemonis moderans (praedefinitum: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Quantitas non valida pro -paytxfee=<quantitas>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Monitio: -paytxfee constitutum valde magnum! Hoc est merces transactionis solves si mittis transactionem. - + Invalid amount for -mininput=<amount>: '%s' @@ -4252,22 +4248,22 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4277,10 +4273,15 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Monitio: wallet.data corrupta, data salvata! Originalis wallet.dat salvata ut wallet.{timestamp}.bak in %s; si pendendum tuum vel transactiones pravae sunt, oportet ab conservato restituere. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4297,17 +4298,17 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege wallet.dat corrupta, salvare abortum est - + Unknown -socks proxy version requested: %i Ignota -socks vicarii versio postulata: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Non posse resolvere -bind inscriptonem: '%s' @@ -4317,7 +4318,7 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Non posse resolvere -externalip inscriptionem: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4332,22 +4333,22 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege Error legendi wallet.dat: Cassidile corruptum - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Monitio: error legendo wallet.dat! Omnes claves recte lectae, sed data transactionum vel libri inscriptionum fortasse desint vel prava sint. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Error legendi wallet.dat @@ -4367,17 +4368,17 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Non posse conglutinare ad %s in hoc computatro (conglutinare redidit errorem %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4387,41 +4388,37 @@ Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam lege - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Quantitas non valida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Monitio: Haec versio obsoleta est, progressio postulata! - - - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts index a97b575af7..c8d53d9da3 100644 --- a/src/qt/locale/bitcoin_lt.ts +++ b/src/qt/locale/bitcoin_lt.ts @@ -23,19 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Tai eksperimentinė programa. - -Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www.opensource.org/licenses/mit-license.php. - -Ć iame produkte yra OpenSSL projekto kuriamas OpenSSL Toolkit (http://www.openssl.org/), Eric Young paraĆĄyta kriptografinė programinė ÄŻranga bei Thomas Bernard sukurta UPnP programinė ÄŻranga. - AddressBookPage @@ -312,12 +299,12 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. BitcoinGUI - + Sign &message... PasiraĆĄyti ĆŸi&nutę... - + &Overview &ApĆŸvalga @@ -413,7 +400,7 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. IĆĄjungti programą - + &Options... &Parinktys... @@ -427,19 +414,11 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Encrypt or decrypt wallet - - &Backup Wallet... - &Backup piniginę... - &Change Passphrase... &Keisti slaptafrazę... - - Backup wallet to another location - Daryti piniginės atsarginę kopiją - Change the passphrase used for wallet encryption @@ -491,7 +470,7 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. &Tikrinti ĆŸinutę... - + Wallet Piniginė @@ -501,7 +480,7 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Gridcoin - + &Send &SiĆłsti @@ -521,28 +500,12 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -552,7 +515,7 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - + &Diagnostics @@ -582,14 +545,14 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - + [testnet] [testavimotinklas] - + Gridcoin client @@ -608,7 +571,7 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - + Date: %1 Amount: %2 Type: %3 @@ -622,7 +585,7 @@ Adresas: %4 {1 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -669,7 +632,7 @@ Adresas: %4 {1 - + %n second(s) @@ -715,7 +678,37 @@ Adresas: %4 {1 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Failas @@ -730,17 +723,12 @@ Adresas: %4 {1 - - &Advanced - - - - + &Help &Pagalba - + %n second(s) ago @@ -781,12 +769,12 @@ Adresas: %4 {1 Atnaujinta - + Catching up... Vejamasi... - + Last received block was generated %1. @@ -841,18 +829,7 @@ Adresas: %4 {1 Ateinantis sandoris - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -Suma: %2 -Tipas: %3 -Adresas: %4 - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -863,17 +840,13 @@ Adresas: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Piniginė <b>uĆŸĆĄifruota</b> ir ĆĄiuo metu <b>atrakinta</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Piniginė <b>uĆŸĆĄifruota</b> ir ĆĄiuo metu <b>uĆŸrakinta</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -881,7 +854,7 @@ Adresas: %4 ClientModel - + Network Alert Tinklo ÄŻspėjimas @@ -963,10 +936,6 @@ Adresas: %4 Priority - - List mode - SąraĆĄo reĆŸimas - Amount @@ -1332,7 +1301,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1550,10 +1519,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP PersiĆłsti prievadą naudojant &UPnP - - Proxy &IP: - Tarpinio serverio &IP: - &Port: @@ -1782,6 +1747,14 @@ This label turns red, if the priority is smaller than "medium". nesinchronizuota + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1843,7 +1816,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1855,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A nėra @@ -1950,7 +1923,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B %1 B @@ -1985,12 +1958,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2079,6 +2052,11 @@ This label turns red, if the priority is smaller than "medium". Out: + + + &Scraper + + SendCoinsDialog @@ -2342,22 +2320,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Su&ma: - + Pay &To: Mokėti &gavėjui: - + &Label: Ćœ&ymė: - + Alt+A Alt+A @@ -2377,12 +2355,12 @@ This label turns red, if the priority is smaller than "medium". Ćœinutė: - + Form Forma - + Enter a label for this address to add it to your address book Äźveskite ĆŸymę ĆĄiam adresui kad galėtumėte ÄŻtraukti jÄŻ ÄŻ adresĆł knygelę @@ -2403,17 +2381,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2664,26 +2637,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Ć altinis - Generated - Sugeneruotas + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Nuo @@ -2798,23 +2792,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - Sandorio ID - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informacija - - - Transaction - Sandoris - Amount @@ -2844,12 +2826,7 @@ This label turns red, if the priority is smaller than "medium". Ć is langas sandorio detalĆł apraĆĄymą - - View Attachment - - - - + Execute Contract @@ -2858,21 +2835,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &UĆŸverti - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2946,7 +2913,7 @@ This label turns red, if the priority is smaller than "medium". IĆĄgauta bet nepriimta - + Received with Gauta su @@ -2966,32 +2933,42 @@ This label turns red, if the priority is smaller than "medium". Mokėjimas sau - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) nepasiekiama - + Transaction status. Hover over this field to show number of confirmations. Sandorio bĆ«klė. UĆŸvedus pelės ĆŸymeklÄŻ ant ĆĄios srities matysite patvirtinimĆł skaičiĆł. @@ -3188,7 +3165,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3332,7 +3309,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3365,7 +3342,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3373,12 +3350,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Parinktys: - + This help message Pagalbos ĆŸinutė @@ -3413,12 +3390,12 @@ This label turns red, if the priority is smaller than "medium". Nustatyti sujungimo trukm? milisekund?mis (pagal nutyl?jim?: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3428,7 +3405,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3438,7 +3415,7 @@ This label turns red, if the priority is smaller than "medium". Palaikyti ne daugiau <n> jung?i? kolegoms (pagal nutyl?jim?: 125) - + Connect only to the specified node(s) Prisijungti tik prie nurodyto mazgo @@ -3448,22 +3425,22 @@ This label turns red, if the priority is smaller than "medium". - + Specify your own public address Nurodykite savo nuosavą vieơą adresą - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3473,22 +3450,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Atjungimo d?l netinkamo koleg? elgesio riba (pagal nutyl?jim?: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) SekundĆŸi? kiekis eikiamas palaikyti ryĆĄ? d?l lygiarangi? nestabilumo (pagal nutyl?jim?: 86.400) @@ -3508,7 +3485,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3518,7 +3495,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3563,12 +3540,32 @@ This label turns red, if the priority is smaller than "medium". Maksimalus buferis siuntimo sujungimui <n>*1000 bit? (pagal nutyl?jim?: 1000) - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3598,12 +3595,12 @@ This label turns red, if the priority is smaller than "medium". Bandymas naudoti UPnP strukt?ra klausymosi prievadui (default: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3703,6 +3700,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3763,6 +3770,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3818,11 +3830,6 @@ This label turns red, if the priority is smaller than "medium". Message Ćœinutė - - - Messate Type - - Miner: @@ -3859,12 +3866,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3874,12 +3876,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3949,7 +3946,7 @@ This label turns red, if the priority is smaller than "medium". Naudoti testavimo tinkl? - + Output extra debugging information. Implies all other -debug* options @@ -3959,7 +3956,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3974,7 +3971,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3984,12 +3981,12 @@ This label turns red, if the priority is smaller than "medium". Leisti JSON-RPC tik iĆĄ nurodyt? IP adres? - + Send commands to node running on <ip> (default: 127.0.0.1) Si?sti komand? mazgui dirban?iam <ip> (pagal nutyl?jim?: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -3999,12 +3996,12 @@ This label turns red, if the priority is smaller than "medium". - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4014,7 +4011,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format Atnaujinti pinigin? ? naujausi? format? @@ -4029,12 +4026,12 @@ This label turns red, if the priority is smaller than "medium". IeĆĄkoti prarast? pinigin?s sandori? blok? grandin?je - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4049,12 +4046,12 @@ This label turns red, if the priority is smaller than "medium". - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4064,12 +4061,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL opcijos (ĆŸr.e Bitcoin Wiki for SSL setup instructions) @@ -4089,17 +4086,17 @@ This label turns red, if the priority is smaller than "medium". Serverio privatus raktas (pagal nutyl?jim?: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Neteisinga suma -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. ?sp?jimas: -paytxfee yra nustatytas per didelis. Tai sandorio mokestis, kur? tur?site mok?ti, jei si?site sandor?. - + Invalid amount for -mininput=<amount>: '%s' @@ -4109,22 +4106,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4134,10 +4131,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4154,7 +4156,7 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i @@ -4164,27 +4166,27 @@ This label turns red, if the priority is smaller than "medium". - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4199,32 +4201,32 @@ This label turns red, if the priority is smaller than "medium". wallet.dat pakrovimo klaida, wallet.dat sugadintas - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat wallet.dat pakrovimo klaida - + Cannot downgrade wallet - + Importing blockchain data file. @@ -4239,17 +4241,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Nepavyko susieti ĆĄiame kompiuteryje prievado %s (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4259,42 +4261,42 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Neteisinga suma - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Send trace/debug info to console instead of debug.log file SiĆłsti atsekimo/derinimo info ÄŻ konsolę vietoj debug.log failo @@ -4309,17 +4311,17 @@ This label turns red, if the priority is smaller than "medium". SlaptaĆŸodis JSON-RPC sujungimams - + Allow DNS lookups for -addnode, -seednode and -connect Leisti DNS paieĆĄką sujungimui ir mazgo pridėjimui - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4351,12 +4353,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: Naudojimas: @@ -4366,7 +4368,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands Komand? s?raĆĄas @@ -4401,32 +4403,32 @@ If the file does not exist, create it with owner-readable-only file permissions. Äźkeliamas blokĆł indeksas... - + Add a node to connect to and attempt to keep the connection open Pridėti mazgą prie sujungti su and attempt to keep the connection open - + Loading wallet... UĆŸkraunama piniginė... - + Cannot write default address Negalima paraĆĄyti ÄŻprasto adreso - + Rescanning... PerĆŸiĆ«ra - + Done loading Äźkėlimas baigtas - + Error Klaida diff --git a/src/qt/locale/bitcoin_lv_LV.ts b/src/qt/locale/bitcoin_lv_LV.ts index 1936db775d..a2c0a03226 100644 --- a/src/qt/locale/bitcoin_lv_LV.ts +++ b/src/qt/locale/bitcoin_lv_LV.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... ParakstÄ«t &ziƆojumu... - + &Overview &Pārskats @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O Aizvērt programmu - + &Options... &Iespējas... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &MaciƆa Rezerves Kopija... - &Change Passphrase... MainÄ«t &Paroli... - - Backup wallet to another location - Izveidot maciƆa rezerves kopiju citur - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O &PārbaudÄ«t ziƆojumu... - + Wallet MaciƆơ @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &SĆ«tÄ«t @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -595,7 +571,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -610,7 +586,7 @@ Adrese: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -657,7 +633,7 @@ Adrese: %4 - + %n second(s) @@ -703,7 +679,37 @@ Adrese: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Fails @@ -718,17 +724,12 @@ Adrese: %4 - - &Advanced - - - - + &Help &PalÄ«dzÄ«ba - + %n second(s) ago @@ -769,12 +770,12 @@ Adrese: %4 Sinhronizēts - + Catching up... Sinhronizējos... - + Last received block was generated %1. @@ -829,19 +830,7 @@ Adrese: %4 IenākoĆĄa transakcija - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datums: %1 -Daudzums: %2 -Tips: %3 -Adrese: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -852,17 +841,13 @@ Adrese: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - MaciƆơ ir <b>ĆĄifrēts</b> un paĆĄlaik <b>atslēgts</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> MaciƆơ ir <b>ĆĄifrēts</b> un paĆĄlaik <b>slēgts</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -870,7 +855,7 @@ Adrese: %4 ClientModel - + Network Alert T?kla br?din?jums @@ -952,10 +937,6 @@ Adrese: %4 Priority - - List mode - Saraksta reĆŸÄ«ms - Amount @@ -1321,7 +1302,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1534,10 +1515,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Kartēt portu, izmantojot &UPnP - - Proxy &IP: - Starpniekservera &IP: - &Port: @@ -1771,6 +1748,14 @@ This label turns red, if the priority is smaller than "medium". nav sinhroniz?ts + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1832,7 +1817,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1844,7 +1829,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1864,12 +1849,12 @@ This label turns red, if the priority is smaller than "medium". Sākuma laiks - + Gridcoin - Debug Console - + Boost version @@ -1974,7 +1959,12 @@ This label turns red, if the priority is smaller than "medium". &Konsole - + + &Scraper + + + + &Network Traffic &TÄ«kla Satiksme @@ -2029,7 +2019,7 @@ This label turns red, if the priority is smaller than "medium". Ierakstiet <b>help</b> lai iegĆ«tu pieejamo komandu sarakstu. - + %1 B %1 B @@ -2064,7 +2054,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2331,22 +2321,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Apjo&ms - + Pay &To: &SaƆēmējs: - + &Label: &Nosaukums: - + Alt+A Alt+A @@ -2366,12 +2356,12 @@ This label turns red, if the priority is smaller than "medium". ZiƆojums: - + Form Forma - + Enter a label for this address to add it to your address book Lai pievienotu adresi adreĆĄu gr?matai, tai j?dod nosaukums @@ -2392,17 +2382,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2653,22 +2638,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2788,10 +2798,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informācija - Amount @@ -2821,12 +2827,7 @@ This label turns red, if the priority is smaller than "medium". Ć is panelis parāda transakcijas detaÄŒas - - View Attachment - - - - + Execute Contract @@ -2835,21 +2836,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Aizvērt - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datums @@ -2923,7 +2914,7 @@ This label turns red, if the priority is smaller than "medium". ?ener?ts, ta?u nav akcept?ts - + Received with Sa?emts ar @@ -2943,32 +2934,42 @@ This label turns red, if the priority is smaller than "medium". Maks?jums sev - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (nav pieejams) - + Transaction status. Hover over this field to show number of confirmations. Transakcijas statuss. Turiet peli virs ĆĄ? lauka, lai redz?tu apstiprin?jumu skaitu. @@ -3165,7 +3166,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3309,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3342,7 +3343,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3350,42 +3351,42 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Iespējas: - + Specify data directory Norādiet datu direktoriju - + Connect to a node to retrieve peer addresses, and disconnect Pievienoties mezglam, lai iegĆ«tu citu mezglu adreses, un atvienoties - + Specify your own public address Norādiet savu publisko adresi - + Accept command line and JSON-RPC commands PieƆemt komandrindas un JSON-RPC komandas - + Run in the background as a daemon and accept commands Darbināt fonā kā servisu un pieƆemt komandas - + Block creation options: Bloka izveidoĆĄanas iestatÄ«jumi: - + Send trace/debug info to console instead of debug.log file Debug/trace informāciju izvadÄ«t konsolē, nevis debug.log failā @@ -3400,7 +3401,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC savienojumu parole - + Execute command when the best block changes (%s in cmd is replaced by block hash) IzpildÄ«t komandu, kad labāk atbilstoĆĄais bloks izmainās (%s cmd aizvieto ar bloka heĆĄu) @@ -3410,7 +3411,7 @@ This label turns red, if the priority is smaller than "medium". AtÄŒaut DNS uzmeklēơanu priekĆĄ -addnode, -seednode un -connect - + Loading addresses... Ielādē adreses... @@ -3420,12 +3421,12 @@ This label turns red, if the priority is smaller than "medium". NederÄ«ga -proxy adrese: '%s' - + Unknown network specified in -onlynet: '%s' -onlynet komandā norādÄ«ts nepazÄ«stams tÄ«kls: '%s' - + Insufficient funds Nepietiek bitkoinu @@ -3435,17 +3436,17 @@ This label turns red, if the priority is smaller than "medium". Ielādē bloku indeksu... - + Add a node to connect to and attempt to keep the connection open Pievienot mezglu, kam pievienoties un turēt savienojumu atvērtu - + Loading wallet... Ielādē maciƆu... - + Cannot downgrade wallet Nevar maciƆa formātu padarÄ«t vecāku @@ -3455,27 +3456,27 @@ This label turns red, if the priority is smaller than "medium". Nevar ierakstÄ«t adresi pēc noklusēơanas - + Rescanning... Skanēju no jauna... - + Done loading Ielāde pabeigta - + Error KÄŒĆ«da - + To use the %s option Izmantot opciju %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3599,6 +3600,16 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3659,6 +3670,11 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.ERROR + + + Entire balance reserved + + Expires @@ -3719,11 +3735,6 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.Message - - - Messate Type - - Miner: @@ -3760,12 +3771,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - - No coins; - - - - + Offline; @@ -3775,12 +3781,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3865,7 +3866,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + List commands Komandu saraksts @@ -3880,7 +3881,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + This help message Ć is pal?dz?bas pazi?ojums @@ -3910,12 +3911,12 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3925,7 +3926,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3935,22 +3936,22 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.Uztur?t l?dz <n> savienojumiem ar citiem mezgliem(p?c noklus?ĆĄanas: 125) - + Connect only to the specified node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3960,27 +3961,27 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Slieksnis p?rk?p?jmezglu atvienoĆĄanai (p?c noklus?ĆĄanas: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Sekundes, cik ilgi attur?t p?rk?p?jmezglus no atk?rtotas pievienoĆĄan?s (p?c noklus?ĆĄanas: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3990,7 +3991,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Use UPnP to map the listening port (default: 1 when listening) @@ -4000,22 +4001,22 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Izmantot testa t?klu - + Output extra debugging information. Implies all other -debug* options @@ -4025,7 +4026,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Prepend debug output with timestamp @@ -4040,7 +4041,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4050,22 +4051,22 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.At?aut JSON-RPC savienojumus no nor?d?t?s IP adreses - + Send commands to node running on <ip> (default: 127.0.0.1) Nos?t?t komandas mezglam, kas darbojas adres? <ip> (p?c noklus?ĆĄanas: 127.0.0.1) - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4075,7 +4076,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Upgrade wallet to latest format Atjaunot maci?a form?tu uz jaun?ko @@ -4090,7 +4091,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.Atk?rtoti skan?t bloku virkni, mekl?jot tr?kstoĆĄ?s maci?a transakcijas - + Attempt to recover private keys from a corrupt wallet.dat @@ -4110,7 +4111,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Boinc Mining @@ -4120,7 +4121,7 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Error obtaining next project. Error 06172014. @@ -4170,12 +4171,32 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4190,12 +4211,12 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4215,17 +4236,17 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.Servera priv?t? atsl?ga (p?c noklus?ĆĄanas: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Neder?gs daudzums priekĆĄ -paytxfree=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4235,22 +4256,22 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4260,10 +4281,15 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4280,32 +4306,32 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Unknown -socks proxy version requested: %i Piepras?ta nezin?ma -socks proxy versija: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Nevar uzmekl?t -bind adresi: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' Nevar atrisin?t -externalip adresi: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4320,22 +4346,22 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam.Nevar iel?d?t wallet.dat: maci?ĆĄ boj?ts - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat K??da iel?d?jot wallet.dat @@ -4355,17 +4381,17 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Nevar pievienoties pie %s ĆĄaj? dator? (pievienoĆĄan?s atgrieza k??du %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4375,37 +4401,37 @@ Ja fails neeksist?, izveidojiet to ar at?auju las?ĆĄanai tikai ?paĆĄniekam. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Neder?gs daudzums - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_ms_MY.ts b/src/qt/locale/bitcoin_ms_MY.ts index a6d15e5022..ad534345b8 100644 --- a/src/qt/locale/bitcoin_ms_MY.ts +++ b/src/qt/locale/bitcoin_ms_MY.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... - + &Overview @@ -334,7 +334,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Wallet @@ -344,7 +344,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send @@ -430,28 +430,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -461,7 +445,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -552,7 +536,7 @@ Alihkan fail data ke dalam tab semasa - + &File @@ -567,24 +551,19 @@ Alihkan fail data ke dalam tab semasa - - &Advanced - - - - + &Help - + [testnet] - + Gridcoin client @@ -606,12 +585,12 @@ Alihkan fail data ke dalam tab semasa - + Catching up... - + Last received block was generated %1. @@ -674,7 +653,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -689,7 +668,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -699,13 +678,43 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -733,7 +742,7 @@ Address: %4 - + URI handling @@ -776,7 +785,7 @@ Address: %4 - + %n second(s) @@ -804,7 +813,7 @@ Address: %4 - + &Encrypt Wallet... @@ -814,7 +823,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -822,7 +831,7 @@ Address: %4 ClientModel - + Network Alert @@ -1269,7 +1278,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1715,6 +1724,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1781,7 +1798,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1803,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1952,6 +1969,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1978,7 +2000,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2280,12 +2302,12 @@ This label turns red, if the priority is smaller than "medium". - + &Label: - + Enter a label for this address to add it to your address book @@ -2331,22 +2353,17 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - + A&mount: - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2593,22 +2610,17 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS - - - - + From @@ -2727,7 +2739,37 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + Amount @@ -2755,12 +2797,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2769,21 +2806,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Tutup - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date @@ -2855,7 +2882,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2875,32 +2902,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3097,7 +3134,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3241,7 +3278,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3274,7 +3311,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3282,12 +3319,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3302,12 +3339,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3339,7 +3376,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3349,7 +3386,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3389,12 +3426,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3444,7 +3501,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3454,7 +3511,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3544,6 +3601,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3604,6 +3671,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3664,11 +3736,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3705,12 +3772,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3725,12 +3787,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3805,12 +3862,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3820,12 +3877,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3835,12 +3892,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3850,22 +3907,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3875,27 +3932,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3905,7 +3962,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3915,12 +3972,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3930,7 +3987,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3940,7 +3997,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3950,7 +4007,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3980,7 +4037,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3990,12 +4047,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4005,12 +4062,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4020,7 +4077,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4035,12 +4092,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4055,12 +4112,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4070,12 +4127,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4095,17 +4152,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4115,22 +4172,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4140,7 +4197,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4150,7 +4207,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4160,7 +4217,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4170,22 +4227,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4210,20 +4267,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4235,12 +4297,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4250,12 +4312,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4275,22 +4337,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4300,27 +4362,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4330,12 +4392,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index 9c9e9ec35b..9cf24d5459 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Dette er eksperimentell programvare. - -Distribuert under MIT/X11 programvarelisensen, se medfĂžlgende fil COPYING eller http://www.opensource.org/licenses/mit-license.php. - -Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i OpenSSL Toolkit (http://www.openssl.org/) og kryptografisk programvare skrevet av Eric Young (eay@cryptsoft.com) og UPnP programvare skrevet av Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i BitcoinGUI - + Sign &message... Signer &melding... - + &Overview &Oversikt @@ -414,7 +400,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i Avslutt applikasjonen - + &Options... &Innstillinger... @@ -428,19 +414,11 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i Encrypt or decrypt wallet Krypter eller dekrypter lommeboken - - &Backup Wallet... - Lag &Sikkerhetskopi av Lommebok... - &Change Passphrase... &Endre Adgangsfrase... - - Backup wallet to another location - Sikkerhetskopier lommebok til annet sted - Change the passphrase used for wallet encryption @@ -492,7 +470,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i &Verifiser melding... - + Wallet Lommebok @@ -502,7 +480,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i - + &Send &Send @@ -522,28 +500,12 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -553,7 +515,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i - + &Diagnostics @@ -583,14 +545,14 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i - + [testnet] [testnett] - + Gridcoin client @@ -600,23 +562,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i - %1 second(s) ago - %1 sekunder siden - - - %1 minute(s) ago - %1 minutt siden - - - %1 hour(s) ago - %1 time siden - - - %1 day(s) ago - %1 dag siden - - - + Last received block was generated %1. @@ -676,7 +622,7 @@ Adresse: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -723,7 +669,7 @@ Adresse: %4 - + %n second(s) %n sekund @@ -765,7 +711,37 @@ Adresse: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Fil @@ -780,17 +756,12 @@ Adresse: %4 - - &Advanced - - - - + &Help &Hjelp - + Processed %n block(s) of transaction history. Lastet %n blokk med transaksjonshistorikk. @@ -835,12 +806,12 @@ Adresse: %4 Oppdatert - + Catching up... Laster ned... - + Sent transaction Sendt transaksjon @@ -850,19 +821,7 @@ Adresse: %4 Innkommende transaksjon - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Dato: %1 -BelĂžp: %2 -Type: %3 -Adresse: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -873,17 +832,13 @@ Adresse: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Lommeboken er <b>kryptert</b> og for tiden <b>lĂ„st opp</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Lommeboken er <b>kryptert</b> og for tiden <b>lĂ„st</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -891,7 +846,7 @@ Adresse: %4 ClientModel - + Network Alert Nettverksvarsel @@ -973,10 +928,6 @@ Adresse: %4 (un)select all velg (fjern) alle - - List mode - Listevisning - Amount @@ -1344,7 +1295,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. NewPollDialog - + Create Poll @@ -1557,10 +1508,6 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Map port using &UPnP Sett opp port ved hjelp av &UPnP - - Proxy &IP: - Proxy &IP: - &Port: @@ -1794,6 +1741,14 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. ute av synk + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1855,7 +1810,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. RPCConsole - + @@ -1867,7 +1822,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + N/A - @@ -1947,7 +1902,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Ut: - + + &Scraper + + + + Debug log file Loggfil for feilsĂžk @@ -1977,7 +1937,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Skriv <b>help</b> for en oversikt over kommandoer. - + %1 B %1 B @@ -2012,12 +1972,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Gridcoin - Debug Console - + Boost version @@ -2087,7 +2047,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Klientnavn - + Welcome to the Gridcoin RPC console! @@ -2354,22 +2314,22 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. SendCoinsEntry - + A&mount: &BelĂžp: - + Pay &To: Betal &Til: - + &Label: &Merkelapp: - + Alt+A Alt+A @@ -2389,12 +2349,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Melding: - + Form Skjema - + Enter a label for this address to add it to your address book Skriv inn en merkelapp for denne adressen for Ă„ legge den til i din adressebok @@ -2415,17 +2375,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Fjern denne mottakeren - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2627,12 +2582,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - - Generated, PoS - - - - + From Fra @@ -2664,12 +2614,8 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Comment Kommentar - - Transaction ID - Transaksjons-ID - - + Open for %n more block(s) Åpen for %n blokk til @@ -2721,12 +2667,42 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Source Kilde - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + TX ID @@ -2761,10 +2737,6 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Transaction Inputs - - Generated - Generert - @@ -2816,18 +2788,6 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informasjon - - - Transaction - Transaksjon - - - Inputs - Inndata - Amount @@ -2857,12 +2817,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Her vises en detaljert beskrivelse av transaksjonen - - View Attachment - - - - + Execute Contract @@ -2871,21 +2826,11 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. C&lose &Lukk - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Dato @@ -2948,7 +2893,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Generert men ikke akseptert - + Received with Mottatt med @@ -2963,32 +2908,42 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Betaling til deg selv - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - - + Transaction status. Hover over this field to show number of confirmations. Transaksjonsstatus. Hold muspekeren over dette feltet for Ă„ se antall bekreftelser. @@ -3013,7 +2968,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. BelĂžp fjernet eller lagt til saldo. - + Offline @@ -3023,7 +2978,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Ubekreftet - + Sent to Sendt til @@ -3197,17 +3152,10 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. til - - UpgradeDialog - - Hide - Skjul - - VotingChartDialog - + Poll Results @@ -3351,7 +3299,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. VotingVoteDialog - + PlaceVote @@ -3384,7 +3332,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. WalletModel - + Sending... Sender... @@ -3392,12 +3340,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. bitcoin-core - + Options: Innstillinger: - + This help message Denne hjelpemeldingen @@ -3432,12 +3380,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Angi tidsavbrudd for forbindelse i millisekunder (standardverdi: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3447,7 +3395,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3457,7 +3405,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Hold maks <n> koblinger Ă„pne til andre noder (standardverdi: 125) - + Connect only to the specified node(s) Koble kun til angitt(e) node(r) @@ -3467,22 +3415,22 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Koble til node for Ă„ hente adresser til andre noder, koble sĂ„ fra igjen - + Specify your own public address Angi din egen offentlige adresse - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Koble kun til noder i nettverket <nett> (IPv4, IPv6 eller Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Oppdag egen IP-adresse (standardverdi: 1 ved lytting og uten -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Ta imot tilkoblinger fra utsiden (standardverdi: 1 hvis uten -proxy eller -connect) @@ -3492,22 +3440,22 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Grenseverdi for Ă„ koble fra noder med dĂ„rlig oppfĂžrsel (standardverdi: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Antall sekunder noder med dĂ„rlig oppfĂžrsel hindres fra Ă„ koble til pĂ„ nytt (standardverdi: 86400) @@ -3602,6 +3550,16 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3662,6 +3620,11 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. ERROR + + + Entire balance reserved + + Expires @@ -3727,11 +3690,6 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Message Melding - - - Messate Type - - Miner: @@ -3768,12 +3726,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - - No coins; - - - - + Offline; @@ -3783,12 +3736,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3868,12 +3816,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Bruk UPnP for lytteport (standardverdi: 0) - + Fee per KB to add to transactions you send Gebyr per KB som skal legges til transaksjoner du sender - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3883,12 +3831,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Ta imot kommandolinje- og JSON-RPC-kommandoer - + Use the test network Bruk testnettverket - + Output extra debugging information. Implies all other -debug* options @@ -3898,7 +3846,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Prepend debug output with timestamp @@ -3908,7 +3856,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3918,7 +3866,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Tillat JSON-RPC tilkoblinger fra angitt IP-adresse - + Send commands to node running on <ip> (default: 127.0.0.1) Send kommandoer til node pĂ„ <ip> (standardverdi: 127.0.0.1) @@ -3928,7 +3876,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3938,7 +3886,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Upgrade wallet to latest format OppgradĂ©r lommebok til nyeste format @@ -3953,7 +3901,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Se gjennom blokk-kjeden etter manglende lommeboktransaksjoner - + Attempt to recover private keys from a corrupt wallet.dat ForsĂžk Ă„ berge private nĂžkler fra en korrupt wallet.dat @@ -3973,7 +3921,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Boinc Mining @@ -3983,7 +3931,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Error obtaining next project. Error 06172014. @@ -4033,12 +3981,32 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4053,12 +4021,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL valg: (se Bitcoin Wiki for instruksjoner for oppsett av SSL) @@ -4078,17 +4046,17 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Servers private nĂžkkel (standardverdi: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Ugyldig belĂžp for -paytxfee=<belĂžp>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Advarsel: -paytxfee er satt veldig hĂžyt! Dette er transaksjonsgebyret du betaler nĂ„r du sender transaksjoner. - + Invalid amount for -mininput=<amount>: '%s' @@ -4098,22 +4066,22 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Wallet %s resides outside data directory %s. Lommeboken %s holder til utenfor data mappen %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... Verifiserer databasens integritet... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4123,10 +4091,15 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Advarsel: wallet.dat korrupt, data reddet! Original wallet.dat lagret som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaksjoner ikke er korrekte bĂžr du gjenopprette fra en backup. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4143,17 +4116,17 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. wallet.dat korrupt, bergning feilet - + Unknown -socks proxy version requested: %i Ukjent -socks proxy versjon angitt: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Kunne ikke slĂ„ opp -bind adresse: '%s' @@ -4163,7 +4136,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Kunne ikke slĂ„ opp -externalip adresse: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4178,22 +4151,22 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Feil ved lasting av wallet.dat: Lommeboken er skadet - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Advarsel: Feil ved lesing av wallet.dat! Alle taster lest riktig, men transaksjon dataene eller adresse innlegg er kanskje manglende eller feil. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Feil ved lasting av wallet.dat @@ -4213,17 +4186,17 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Kan ikke binde til %s pĂ„ denne datamaskinen (bind returnerte feil %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4233,51 +4206,47 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed Feil: Opprettelse av transaksjonen mislyktes - + Sending... Sender... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Ugyldig belĂžp - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Advarsel: Denne versjonen er foreldet, oppgradering kreves! - - - + Warning: Disk space is low! Advarsel: Lite lagringsplass! - + Run in the background as a daemon and accept commands KjĂžr i bakgrunnen som daemon og ta imot kommandoer - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) KjĂžr kommando nĂ„r en lommeboktransaksjon endres (%s i kommando er erstattet med TxID) @@ -4287,12 +4256,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Valg for opprettelse av blokker: - + Failed to listen on any port. Use -listen=0 if you want this. Kunne ikke lytte pĂ„ noen port. Bruk -listen=0 hvis det er dette du vil. - + Specify wallet file (within data directory) Angi lommebokfil (inne i datamappe) @@ -4317,7 +4286,7 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Passord for JSON-RPC forbindelser - + Execute command when the best block changes (%s in cmd is replaced by block hash) UtfĂžr kommando nĂ„r beste blokk endrer seg (%s i kommandoen erstattes med blokkens hash) @@ -4327,12 +4296,12 @@ Dette betyr at det trengs en avgift pĂ„ minimum %2. Tillat oppslag i DNS for -addnode, -seednode og -connect - + To use the %s option For Ă„ bruke %s opsjonen - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4366,12 +4335,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen. - + Gridcoin version - + Usage: Bruk: @@ -4381,7 +4350,7 @@ Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen. - + List commands List opp kommandoer @@ -4406,12 +4375,12 @@ Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen.Ugyldig -proxy adresse: '%s' - + Unknown network specified in -onlynet: '%s' Ukjent nettverk angitt i -onlynet '%s' - + Insufficient funds Utilstrekkelige midler @@ -4421,17 +4390,17 @@ Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen.Laster blokkindeks... - + Add a node to connect to and attempt to keep the connection open Legg til node for tilkobling og hold forbindelsen Ă„pen - + Loading wallet... Laster lommebok... - + Cannot downgrade wallet Kan ikke nedgradere lommebok @@ -4441,17 +4410,17 @@ Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen.Kan ikke skrive standardadresse - + Rescanning... Leser gjennom... - + Done loading Ferdig med lasting - + Error Feil diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index 22843a9584..1990ec10ef 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Dit is experimentele software. - -Gedistribueerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand COPYING of http://www.opensource.org/licenses/mit-license.php. - -Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in de OpenSSL Toolkit (http://www.openssl.org/) en cryptografische software gemaakt door Eric Young (eay@cryptsoft.com) en UPnP software geschreven door Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d BitcoinGUI - + Sign &message... &Onderteken bericht... - + &Overview &Overzicht @@ -414,7 +400,7 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Programma afsluiten - + &Options... &Opties... @@ -429,7 +415,7 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Versleutel of ontsleutel de portemonnee - + %n second(s) ago %n seconden geleden @@ -461,7 +447,7 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d - + Date: %1 Amount: %2 Type: %3 @@ -476,7 +462,7 @@ Adres: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -486,17 +472,39 @@ Adres: %4 - &Backup Wallet... - &Backup Portemonnee... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Wijzig Wachtwoord + + Scraper: superblock not needed - inactive. + - Backup wallet to another location - Backup portemonnee naar een andere locatie + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Wijzig Wachtwoord @@ -549,7 +557,7 @@ Adres: %4 &VerifiĂ«er bericht... - + Wallet Portemonnee @@ -559,7 +567,7 @@ Adres: %4 Gridcoin - + &Send &Verstuur @@ -579,28 +587,12 @@ Adres: %4 Toon informatie over Gridcoin - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -610,7 +602,7 @@ Adres: %4 - + &Diagnostics @@ -640,14 +632,14 @@ Adres: %4 - + [testnet] [testnetwerk] - + Gridcoin client Gridcoin client @@ -657,23 +649,7 @@ Adres: %4 %1 actieve verbinding naar Gridcoin netwerk - %1 second(s) ago - %1 seconden geleden - - - %1 minute(s) ago - %1 minuut geleden - - - %1 hour(s) ago - %1 uur geleden - - - %1 day(s) ago - %1 dag geleden - - - + Last received block was generated %1. Laatst ontvangen blok is gegenereerd op %1. @@ -718,19 +694,7 @@ Adres: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Bedrag: %2 -Type: %3 -Adres: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI kan niet ontleedt worden! Mogelijke oorzaken zijn een ongeldig Gridcoin adres of incorrecte URI parameters. @@ -789,7 +753,7 @@ Adres: %4 - + %n second(s) %n seconde @@ -821,27 +785,7 @@ Adres: %4 - Not staking because wallet is locked - Niet staking omdat portemonnee aan het beveiligd is - - - Not staking because wallet is offline - Niet staking omdat portemonnee aan het offline is - - - Not staking because wallet is syncing - Niet staking omdat portemonnee aan het synchroniseren is. - - - Not staking because you don't have mature coins - Niet staking omdat je geen mature munten hebt - - - Not staking - Niet aan het staken. - - - + &File &Bestand @@ -856,17 +800,12 @@ Adres: %4 - - &Advanced - - - - + &Help &Hulp - + Processed %n block(s) of transaction history. %n blok aan transactiegeschiedenis verwerkt. @@ -879,12 +818,12 @@ Adres: %4 Bijgewerkt - + Catching up... Aan het bijwerken... - + Sent transaction Verstuurde transactie @@ -894,16 +833,12 @@ Adres: %4 Binnenkomende transactie - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Portemonnee is <b>versleuteld</b> en momenteel <b>geopend</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Een fatale fout . Gridcoin kan niet langer veilig doorgaan en sluit af. @@ -911,7 +846,7 @@ Adres: %4 ClientModel - + Network Alert Netwerkwaarschuwing @@ -993,10 +928,6 @@ Adres: %4 (un)select all (de)selecteer alles - - List mode - Lijst modus - Amount @@ -1376,7 +1307,7 @@ Dit betekend dat een fee van %2 is vereist. NewPollDialog - + Create Poll @@ -1589,10 +1520,6 @@ Dit betekend dat een fee van %2 is vereist. Map port using &UPnP Portmapping via &UPnP - - Proxy &IP: - Proxy &IP: - &Port: @@ -1826,6 +1753,14 @@ Dit betekend dat een fee van %2 is vereist. niet gesynchroniseerd + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1887,7 +1822,7 @@ Dit betekend dat een fee van %2 is vereist. RPCConsole - + @@ -1899,7 +1834,7 @@ Dit betekend dat een fee van %2 is vereist. - + N/A N.v.t. @@ -1979,7 +1914,12 @@ Dit betekend dat een fee van %2 is vereist. Uit: - + + &Scraper + + + + Debug log file Debuglogbestand @@ -2009,7 +1949,7 @@ Dit betekend dat een fee van %2 is vereist. Typ <b>help</b> voor een overzicht van de beschikbare opdrachten. - + %1 B %1 B @@ -2044,12 +1984,12 @@ Dit betekend dat een fee van %2 is vereist. - + Gridcoin - Debug Console - + Boost version @@ -2119,7 +2059,7 @@ Dit betekend dat een fee van %2 is vereist. Clientnaam - + Welcome to the Gridcoin RPC console! @@ -2386,22 +2326,22 @@ Dit betekend dat een fee van %2 is vereist. SendCoinsEntry - + A&mount: B&edrag: - + Pay &To: Betaal &Aan: - + &Label: &Label: - + Alt+A Alt+A @@ -2427,12 +2367,12 @@ Dit betekend dat een fee van %2 is vereist. Vul een label in voor dit adres om het toe te voegen aan uw adresboek - + Form Vorm - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2447,17 +2387,12 @@ Dit betekend dat een fee van %2 is vereist. Verwijder deze ontvanger - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2675,16 +2610,42 @@ Dit betekend dat een fee van %2 is vereist. - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE - Information - Informatie + + MINED - UNKNOWN + + + + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - + %1/offline %1/offline @@ -2715,26 +2676,17 @@ Dit betekend dat een fee van %2 is vereist. - + Source Bron - Generated - Gegenereerd - - - + Generated in CoinBase - - Generated, PoS - - - - + From Van @@ -2848,18 +2800,6 @@ Dit betekend dat een fee van %2 is vereist. Transaction Inputs - - Transaction ID - Transactie-ID - - - Transaction - Transactie - - - Inputs - Inputs - Amount @@ -2889,12 +2829,7 @@ Dit betekend dat een fee van %2 is vereist. Dit venster laat een uitgebreide beschrijving van de transactie zien - - View Attachment - - - - + Execute Contract @@ -2903,21 +2838,11 @@ Dit betekend dat een fee van %2 is vereist. C&lose S&luiten - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datum @@ -2952,32 +2877,12 @@ Dit betekend dat een fee van %2 is vereist. - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Ontvangend adres van transactie. - + Open for %n more block(s) Open voor nog %n blok @@ -3015,7 +2920,7 @@ Dit betekend dat een fee van %2 is vereist. Gegenereerd maar niet geaccepteerd - + Received with Ontvangen met @@ -3035,12 +2940,42 @@ Dit betekend dat een fee van %2 is vereist. Betaling aan uzelf - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (nvt) - + Transaction status. Hover over this field to show number of confirmations. Transactiestatus. Houd de cursor boven dit veld om het aantal bevestigingen te laten zien. @@ -3229,17 +3164,10 @@ Dit betekend dat een fee van %2 is vereist. naar - - UpgradeDialog - - Hide - Verbergen - - VotingChartDialog - + Poll Results @@ -3383,7 +3311,7 @@ Dit betekend dat een fee van %2 is vereist. VotingVoteDialog - + PlaceVote @@ -3416,7 +3344,7 @@ Dit betekend dat een fee van %2 is vereist. WalletModel - + Sending... Versturen... @@ -3424,12 +3352,12 @@ Dit betekend dat een fee van %2 is vereist. bitcoin-core - + Options: Opties: - + This help message Dit helpbericht @@ -3464,12 +3392,12 @@ Dit betekend dat een fee van %2 is vereist. Specificeer de time-outtijd in milliseconden (standaard: 5000) - + Connect through socks proxy Verbind door socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Selecteer de versie van socks proxy (4-5, default: 5) @@ -3479,7 +3407,7 @@ Dit betekend dat een fee van %2 is vereist. Gebruik proxy tor verborgen diensten (standaard: zelfde als -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Luister voor verbindingen op <poort> (standaard: 15714 of testnet: 25714) {32749 ?} {32748)?} @@ -3489,7 +3417,7 @@ Dit betekend dat een fee van %2 is vereist. Onderhoud maximaal <n> verbindingen naar peers (standaard: 125) - + Connect only to the specified node(s) Verbind alleen naar de gespecificeerde node(s) @@ -3499,26 +3427,22 @@ Dit betekend dat een fee van %2 is vereist. Verbind naar een node om adressen van anderen op te halen, en verbreek vervolgens de verbinding - + Specify your own public address Specificeer uw eigen publieke adres - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Verbind alleen naar nodes in netwerk <net> (IPv4, IPv6 of Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Ontdek eigen IP-adres (standaard: 1 als er wordt geluisterd en geen -externalip is opgegeven) - Find peers using internet relay chat (default: 0) - Zoek peers door gebruik van Internet Relay Chat (standaard: 1) {? 0)} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Accepteer verbindingen van buitenaf (standaard: 1 als geen -proxy of -connect is opgegeven) @@ -3528,26 +3452,22 @@ Dit betekend dat een fee van %2 is vereist. Koppel aan gegeven adres. Gebruik [host]:poort notatie voor IPv6 - + Find peers using DNS lookup (default: 1) Zoek peers doormiddel van DNS lookup (standaard: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synchroniseer tijd met andere connecties. Uitschakelen als de tijd op uw systeem nauwkeurig is bijv. synchroniseren met NTP (standaard: 1) - Sync checkpoints policy (default: strict) - Sync checkpoints beleid (standaard: strikt) - - - + Threshold for disconnecting misbehaving peers (default: 100) Drempel om verbinding te verbreken naar zich misdragende peers (standaard: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Aantal seconden dat zich misdragende peers niet opnieuw mogen verbinden (standaard: 86400) @@ -3642,6 +3562,16 @@ Dit betekend dat een fee van %2 is vereist. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3702,6 +3632,11 @@ Dit betekend dat een fee van %2 is vereist. ERROR + + + Entire balance reserved + + Expires @@ -3767,11 +3702,6 @@ Dit betekend dat een fee van %2 is vereist. Message Bericht - - - Messate Type - - Miner: @@ -3808,12 +3738,7 @@ Dit betekend dat een fee van %2 is vereist. - - No coins; - - - - + Offline; @@ -3823,12 +3748,7 @@ Dit betekend dat een fee van %2 is vereist. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3908,12 +3828,12 @@ Dit betekend dat een fee van %2 is vereist. Gebruik UPnP om de luisterende poort te mappen (standaard: 0) - + Fee per KB to add to transactions you send Vergoeding per KB toe te voegen aan de transacties die u verzendt - + When creating transactions, ignore inputs with value less than this (default: 0.01) Bij het maken van transacties, negeer ingangen met waarde minder dan dit (standaard: 0,01) @@ -3923,12 +3843,12 @@ Dit betekend dat een fee van %2 is vereist. Aanvaard opdrachtregel- en JSON-RPC-opdrachten - + Use the test network Gebruik het testnetwerk - + Output extra debugging information. Implies all other -debug* options Geef extra debugging informatie weer. Impliceert alle andere debug * opties @@ -3938,7 +3858,7 @@ Dit betekend dat een fee van %2 is vereist. Geef extra netwerk debug informatie weer - + Prepend debug output with timestamp Voeg een tijdstempel toe aan debug output @@ -3948,7 +3868,7 @@ Dit betekend dat een fee van %2 is vereist. Stuur trace/debug info naar de debugger - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Wacht op JSON-RPC-connecties op <poort> (standaard: 15715 of testnet: 25715) @@ -3958,7 +3878,7 @@ Dit betekend dat een fee van %2 is vereist. Sta JSON-RPC verbindingen van opgegeven IP-adres toe - + Send commands to node running on <ip> (default: 127.0.0.1) Verstuur commando's naar proces dat op <ip> draait (standaard: 127.0.0.1) @@ -3968,7 +3888,7 @@ Dit betekend dat een fee van %2 is vereist. Vereist een bevestiging voor verandering (standaard: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Dwing transactie scripts gebruik van canonieke PUSH operatoren (standaard: 1) @@ -3978,7 +3898,7 @@ Dit betekend dat een fee van %2 is vereist. Voer opdracht uit zodra een relevante waarschuwing wordt ontvangen (%s in cmd wordt vervangen door bericht) - + Upgrade wallet to latest format Vernieuw portemonnee naar nieuwste versie @@ -3993,7 +3913,7 @@ Dit betekend dat een fee van %2 is vereist. Doorzoek de blokketen op ontbrekende portemonnee-transacties - + Attempt to recover private keys from a corrupt wallet.dat Poog de geheime sleutels uit een corrupt wallet.dat bestand terug te halen @@ -4013,7 +3933,7 @@ Dit betekend dat een fee van %2 is vereist. - + Boinc Mining @@ -4023,7 +3943,7 @@ Dit betekend dat een fee van %2 is vereist. - + Error obtaining next project. Error 06172014. @@ -4073,12 +3993,32 @@ Dit betekend dat een fee van %2 is vereist. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4093,12 +4033,12 @@ Dit betekend dat een fee van %2 is vereist. Stel maximale block grootte in bytes in (standaard: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Stel maximale grootte van high-priority/low-fee transacties in bytes (standaard: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL-opties: (zie de Bitcoin wiki voor SSL-instructies) @@ -4118,21 +4058,17 @@ Dit betekend dat een fee van %2 is vereist. Geheime sleutel voor server (standaard: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Aanvaardbare cijfers (standaard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Ongeldig bedrag voor -paytxfee=<bedrag>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Waarschuwing: -paytxfee is zeer hoog ingesteld. Dit zijn de transactiekosten die u betaalt bij het versturen van een transactie. - + Invalid amount for -mininput=<amount>: '%s' Ongeldig bedrag voor -mininput = <bedrag>: '%s' @@ -4142,22 +4078,22 @@ Dit betekend dat een fee van %2 is vereist. - + Wallet %s resides outside data directory %s. Portemonnee %s bevindt zich buiten de datamap %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Kan een slot op data directory %s niet verkrijgen. Gridcoin wordt waarschijnlijk al uitgevoerd. - + Verifying database integrity... Database integriteit wordt geverifieĂ«rd - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Fout bij het ??initialiseren van de database omgeving %s! Om te herstellen, BACKUP die directory, verwijder dan alles van behalve het wallet.dat. @@ -4167,10 +4103,15 @@ Dit betekend dat een fee van %2 is vereist. Waarschuwing: wallet.dat is corrupt, data is veiliggesteld! Originele wallet.dat is opgeslagen als wallet.{tijdstip}.bak in %s; als uw balans of transacties incorrect zijn dient u een backup terug te zetten. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4187,17 +4128,17 @@ Dit betekend dat een fee van %2 is vereist. wallet.dat corrupt, veiligstellen mislukt - + Unknown -socks proxy version requested: %i Onbekende -socks proxyversie aangegeven: %i - + Invalid -tor address: '%s' Ongeldig-tor adres: '%s' - + Cannot resolve -bind address: '%s' Kan -bind adres niet herleiden: '%s' @@ -4207,16 +4148,10 @@ Dit betekend dat een fee van %2 is vereist. Kan -externlip adres niet herleiden: '%s' - + Invalid amount for -reservebalance=<amount> Ongeldig bedrag voor -reservebalance = <bedrag> - - Unable to sign checkpoint, wrong checkpointkey? - - Kan checkpoint niet ondertekenen, verkeerde checkpoint sleutel? - - Error loading blkindex.dat @@ -4228,22 +4163,22 @@ Dit betekend dat een fee van %2 is vereist. Fout bij laden wallet.dat: Portemonnee corrupt - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Waarschuwing: Fout bij het lezen van wallet.dat! Alle sleutels zijn in goede orde uitgelezen, maar transactiedata of adresboeklemma's zouden kunnen ontbreken of fouten bevatten. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Fout bij laden van wallet.dat: Portemonnee vereist een nieuwere versie van Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Portemonnee moet herschreven worden: herstart Gridcoin om te voltooien - + Error loading wallet.dat Fout bij laden wallet.dat @@ -4263,17 +4198,17 @@ Dit betekend dat een fee van %2 is vereist. Fout: kan geen verbinding maken met node - + Unable to bind to %s on this computer. Gridcoin is probably already running. Niet mogelijk om %s op deze computer. Gridcoin is waarschijnlijk al geopened. - + Unable to bind to %s on this computer (bind returned error %d, %s) Niet in staat om aan %s te binden op deze computer (bind gaf error %d, %s) - + Error: Wallet locked, unable to create transaction Fout: Portemonnee is op slot, niet mogelijk een transactie te creĂ«ren. @@ -4283,59 +4218,47 @@ Dit betekend dat een fee van %2 is vereist. Fout: Portemonnee ontgrendeld voor alleen staking, niet in staat om de transactie te maken. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Fout: Deze transactie vereist een transactie vergoeding van ten minste %s vanwege de hoeveelheid, complexiteit, of het gebruik van recent ontvangen gelden - + Error: Transaction creation failed Fout: CreĂ«ren van transactie mislukt. - + Sending... Versturen... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fout: De transactie was geweigerd, Dit kan gebeuren als sommige munten in je portemonnee al gebruikt zijn, door het gebruik van een kopie van wallet.dat en de munten in de kopie zijn niet gemarkeerd als gebruikt. - + Invalid amount Ongeldig bedrag - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Waarschuwing: Controleer of de datum en tijd van de computer juist zijn! Als uw klok verkeerd is Gridcoin zal niet goed werken. - Warning: This version is obsolete, upgrade required! - Waarschuwing: Deze versie is verouderd, een upgrade is vereist! - - - WARNING: synchronized checkpoint violation detected, but skipped! - WAARSCHUWING: gesynchroniseerd checkpoint overtreding is geconstateerd, maar overgeslagen! - - - + Warning: Disk space is low! Waarschuwing: Hardeschijf raakt vol! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - WAARSCHUWING: Ongeldig controlepunt gevonden! Weergegeven transacties kunnen niet kloppen! Het is mogelijk dat je moet upgraden, of developers moet waarschuwen. - - - + Run in the background as a daemon and accept commands Draai in de achtergrond als daemon en aanvaard opdrachten - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID) @@ -4345,12 +4268,12 @@ Dit betekend dat een fee van %2 is vereist. Blokcreatie-opties: - + Failed to listen on any port. Use -listen=0 if you want this. Mislukt om op welke poort dan ook te luisteren. Gebruik -listen=0 as u dit wilt. - + Specify wallet file (within data directory) Specificeer het portemonnee bestand (vanuit de gegevensmap) @@ -4375,7 +4298,7 @@ Dit betekend dat een fee van %2 is vereist. Wachtwoord voor JSON-RPC-verbindingen - + Execute command when the best block changes (%s in cmd is replaced by block hash) Voer opdracht uit zodra het beste blok verandert (%s in cmd wordt vervangen door blokhash) @@ -4385,12 +4308,12 @@ Dit betekend dat een fee van %2 is vereist. Sta DNS-naslag toe voor -addnode, -seednode en -connect - + To use the %s option Om de %s optie te gebruiken - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4424,12 +4347,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie. - + Gridcoin version Gridcoin versie - + Usage: Gebruik: @@ -4439,7 +4362,7 @@ Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie.< - + List commands Lijst van commando's @@ -4464,12 +4387,12 @@ Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie.< Ongeldig -proxy adres: '%s' - + Unknown network specified in -onlynet: '%s' Onbekend netwerk gespecificeerd in -onlynet: '%s' - + Insufficient funds Ontoereikend saldo @@ -4479,17 +4402,17 @@ Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie.< Blokindex aan het laden... - + Add a node to connect to and attempt to keep the connection open Voeg een node om naar te verbinden toe en probeer de verbinding open te houden - + Loading wallet... Portemonnee aan het laden... - + Cannot downgrade wallet Kan portemonnee niet downgraden @@ -4499,17 +4422,17 @@ Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie.< Kan standaardadres niet schrijven - + Rescanning... Blokketen aan het herscannen... - + Done loading Klaar met laden - + Error Fout diff --git a/src/qt/locale/bitcoin_pam.ts b/src/qt/locale/bitcoin_pam.ts index 521ff80520..e719840603 100644 --- a/src/qt/locale/bitcoin_pam.ts +++ b/src/qt/locale/bitcoin_pam.ts @@ -23,18 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Metung ya ining experimental software. -Me-distribute ya lalam na ning lisensya na ning MIT/X11 software, lawan ye ing makayabeng file COPYING o http://www.opensource.org/licenses/mit-license.php. -Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project para gamit king OpenSSL Toolkit(http://www.openssl.org/) at cryptographic software a sinulat ng Eric Young (eay@cryptsoft.com) at UPnp software a sinulat ng Thomas Bernard. - AddressBookPage @@ -311,17 +299,17 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p BitcoinGUI - + Sign &message... I-sign ing &mensayi - + Gridcoin - + &Overview &Overview @@ -437,28 +425,42 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -468,7 +470,7 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - + &Diagnostics @@ -528,24 +530,19 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -562,7 +559,7 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - + Last received block was generated %1. @@ -622,7 +619,7 @@ Address: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -632,19 +629,7 @@ Address: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Aldo: %1 -Alaga: %2 -Type: %3 -Address: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -703,7 +688,7 @@ Address: %4 - + %n second(s) @@ -731,7 +716,7 @@ Address: %4 - + &Options... &Pipamilian... @@ -740,19 +725,11 @@ Address: %4 &Encrypt Wallet... I-&Encrypt in Wallet... - - &Backup Wallet... - I-&Backup ing Wallet... - &Change Passphrase... &Alilan ing Passphrase... - - Backup wallet to another location - I-backup ing wallet king aliwang lugal - Change the passphrase used for wallet encryption @@ -774,17 +751,17 @@ Address: %4 &Beripikan ing message... - + Wallet Wallet - + &Show / Hide &Ipalto / Isalikut - + &File &File @@ -794,12 +771,12 @@ Address: %4 &Pamag-ayus - + &Help &Saup - + %n second(s) ago @@ -832,12 +809,12 @@ Address: %4 Makatuki ya king aldo - + Catching up... Catching up... - + Sent transaction Mipadalang transaksion @@ -847,16 +824,12 @@ Address: %4 Paparatang a transaksion - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Maka-<b>encrypt</b> ya ing wallet at kasalukuyan yang maka-<b>unlocked</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Maka-<b>encrypt</b> ya ing wallet at kasalukuyan yang maka-<b>locked</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -864,7 +837,7 @@ Address: %4 ClientModel - + Network Alert Alertu ning Network @@ -1311,7 +1284,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1529,10 +1502,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Mapa ng ning port gamit ing &UPnP - - Proxy &IP: - Proxy &IP: - &Port: @@ -1761,6 +1730,14 @@ This label turns red, if the priority is smaller than "medium". ali ya maka-sync + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1822,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1834,7 +1811,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1919,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". I-type ing <b>help</b> ban akit la reng ati at magsilbing commands. - + %1 B @@ -1954,12 +1931,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2054,7 +2031,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + Welcome to the Gridcoin RPC console! @@ -2321,22 +2303,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: A&laga: - + Pay &To: Ibayad &kang: - + &Label: &Label: - + Alt+A Alt+A @@ -2356,12 +2338,12 @@ This label turns red, if the priority is smaller than "medium". Mensayi: - + Form Form - + Enter a label for this address to add it to your address book Magpalub kang label para king address a ini ban a-iabe me king aklat dareng address @@ -2382,17 +2364,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2639,26 +2616,47 @@ This label turns red, if the priority is smaller than "medium". - + Source Pikuanan - Generated - Megawa + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From Menibat @@ -2771,23 +2769,11 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID ning Transaksion - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - &Impormasion - - - Transaction - Transaksion - Amount @@ -2817,12 +2803,7 @@ This label turns red, if the priority is smaller than "medium". Ining pane a ini magpakit yang detalyadung description ning transaksion - - View Attachment - - - - + Execute Contract @@ -2831,21 +2812,11 @@ This label turns red, if the priority is smaller than "medium". C&lose I&sara - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Kaaldauan @@ -2917,7 +2888,7 @@ This label turns red, if the priority is smaller than "medium". Me-generate ya oneng ali ya metanggap - + Received with Atanggap kayabe ning @@ -2937,32 +2908,42 @@ This label turns red, if the priority is smaller than "medium". Kabayaran keka - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Status ning Transaksion: Itapat me babo na ning field a ini ban ipakit dala reng bilang dareng me-kumpirma na @@ -3159,7 +3140,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3303,7 +3284,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3336,7 +3317,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3344,37 +3325,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Pipamilian: - + Specify data directory Pilinan ing data directory - + Connect to a node to retrieve peer addresses, and disconnect Kumunekta king note ban ayakua mula reng peer address, at mako king panga konekta - + Specify your own public address Sabyan me ing kekang pampublikong address - + Accept command line and JSON-RPC commands Tumanggap command line at JSON-RPC commands - + Run in the background as a daemon and accept commands Gumana king gulut bilang daemon at tumanggap commands - + Block creation options: Pipamilian king pamag-gawang block: @@ -3469,6 +3450,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3529,6 +3520,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3589,11 +3585,6 @@ This label turns red, if the priority is smaller than "medium". Message Mensayi - - - Messate Type - - Miner: @@ -3630,12 +3621,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3645,12 +3631,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3740,7 +3721,7 @@ This label turns red, if the priority is smaller than "medium". Password para king JSON-RPC koneksion - + Execute command when the best block changes (%s in cmd is replaced by block hash) I-execute ing command istung mialilan ya ing best block (%s in cmd is replaced by block hash) @@ -3750,7 +3731,7 @@ This label turns red, if the priority is smaller than "medium". Payagan ing pamaglawe DNS para king -addnode, -seednode and -connect - + Loading addresses... Lo-load da ne ing address... @@ -3760,12 +3741,12 @@ This label turns red, if the priority is smaller than "medium". Ali katanggap-tanggap a -proxy addresss: '%s' - + Unknown network specified in -onlynet: '%s' E kilalang network ing mepili king -onlynet: '%s' - + Insufficient funds Kulang a pondo @@ -3775,17 +3756,17 @@ This label turns red, if the priority is smaller than "medium". Lo-load dane ing block index... - + Add a node to connect to and attempt to keep the connection open Magdagdag a node ban kumunekta at subuknan apanatili yang makabuklat ing koneksion - + Loading wallet... Lo-load dane ing wallet... - + Cannot downgrade wallet Ali ya magsilbing i-downgrade ing wallet @@ -3795,27 +3776,27 @@ This label turns red, if the priority is smaller than "medium". Eya misulat ing default address - + Rescanning... I-scan deng pasibayu... - + Done loading Yari ne ing pamag-load - + Error Mali - + To use the %s option Para agamit ing %s a pimamilian - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3849,12 +3830,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Gridcoin version - + Usage: Pamanggamit: @@ -3864,7 +3845,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + List commands Listahan dareng commands @@ -3879,7 +3860,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + This help message Ining saup a mensayi @@ -3909,12 +3890,12 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3924,7 +3905,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3934,22 +3915,22 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions.Mag-maintain peka <n> koneksion keng peers (default: 125) - + Connect only to the specified node(s) Kumunekta mu king mepiling node(s) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) I-discover ing sariling IP address (default: 1 istung makiramdam at -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) Tumanggap koneksion menibat king kilwal (default: 1 if no -proxy or -connect) @@ -3959,27 +3940,27 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3989,7 +3970,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3999,22 +3980,22 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network Gamitan ing test network - + Output extra debugging information. Implies all other -debug* options @@ -4024,7 +4005,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4039,7 +4020,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4049,22 +4030,22 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions.Payagan ya i JSON-RPC koneksion para king metung a IP address - + Send commands to node running on <ip> (default: 127.0.0.1) Magpadalang command king node a gagana king <ip>(default: 127.0.0.1) - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4074,7 +4055,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Upgrade wallet to latest format I-upgrade ing wallet king pekabayung porma @@ -4089,7 +4070,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions.I-scan pasibayu ing block chain para kareng mauaualang transaksion - + Attempt to recover private keys from a corrupt wallet.dat @@ -4109,7 +4090,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Boinc Mining @@ -4119,7 +4100,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -4169,12 +4150,32 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4189,12 +4190,12 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Pipamilian ning SSL: (lawen ye ing Bitcoin Wiki para king SSL setup instructions) @@ -4214,17 +4215,17 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions.Server private key (default: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Eya maliari ing alaga keng -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Kapabaluan: Sobra ya katas ing makalage king -paytxfee. Ini ing maging bayad mu para king bayad na ning transaksion istung pepadala me ing transaksion a ini. - + Invalid amount for -mininput=<amount>: '%s' @@ -4234,22 +4235,22 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4259,10 +4260,15 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4279,17 +4285,17 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i E kilalang -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' Eya me-resolve ing -bind address: '%s' @@ -4299,7 +4305,7 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions.Eya me-resolve ing -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4314,22 +4320,22 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions.Me-mali ya ing pamag-load king wallet.dat: Me-corrupt ya ing wallet - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Me-mali ya ing pamag-load king wallet.dat @@ -4349,17 +4355,17 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Ali ya magsilbing mag-bind keng %s kening kompyuter a ini (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4369,41 +4375,37 @@ Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Ing alaga e ya katanggap-tanggap - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Kapabaluan: Ing bersioin a ini laus ne, kailangan nang mag-upgrade! - - - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index bf420fd5e9..8b4ff61242 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -26,20 +26,6 @@ Oprogramowanie eksperymentalne. Rozprowadzane na licencji MIT/X11, zobacz plik 'COPYING' lub http://www.opensource.org/licenses/mit-license.php. -Ten produkt zawiera oprogramowanie stworzone przez OpenSSL Project do uĆŒytku przez OpenSSL Toolkit (http://www.openssl.org/). Oprogramowanie kryptograficzne napisane przez Eric'a Young (eay@cryptsoft.com) i oprogramowanie UPnP napisane przez Thomas'a Bernard. - - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Oprogramowanie eksperymentalne. - -Rozprowadzane na licencji MIT/X11, zobacz plik 'COPYING' lub http://www.opensource.org/licenses/mit-license.php. - Ten produkt zawiera oprogramowanie stworzone przez OpenSSL Project do uĆŒytku przez OpenSSL Toolkit (http://www.openssl.org/). Oprogramowanie kryptograficzne napisane przez Eric'a Young (eay@cryptsoft.com) i oprogramowanie UPnP napisane przez Thomas'a Bernard. @@ -318,12 +304,12 @@ Ten produkt zawiera oprogramowanie stworzone przez OpenSSL Project do uĆŒytku pr BitcoinGUI - + Sign &message... Podpisz wiado&moƛć... - + &Overview P&odsumowanie @@ -419,7 +405,7 @@ Ten produkt zawiera oprogramowanie stworzone przez OpenSSL Project do uĆŒytku pr Zamknij program - + &Options... &Opcje... @@ -434,7 +420,7 @@ Ten produkt zawiera oprogramowanie stworzone przez OpenSSL Project do uĆŒytku pr Zaszyfruj lub rozszyfruj portfel - + %n second(s) ago @@ -470,7 +456,7 @@ Ten produkt zawiera oprogramowanie stworzone przez OpenSSL Project do uĆŒytku pr - + Date: %1 Amount: %2 Type: %3 @@ -485,7 +471,7 @@ Adres: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -495,17 +481,39 @@ Adres: %4 - &Backup Wallet... - &Wykonaj kopię zapasową... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &ZmieƄ hasƂo... + + Scraper: superblock not needed - inactive. + - Backup wallet to another location - Wykonaj kopię zapasową portfela w inne miejsce + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &ZmieƄ hasƂo... @@ -558,7 +566,7 @@ Adres: %4 &Zweryfikuj wiadomoƛć... - + Wallet Portfel @@ -568,7 +576,7 @@ Adres: %4 Gridcoin - + &Send &Wyƛlij @@ -578,37 +586,7 @@ Adres: %4 Odbie&rz - - &Rebuild Block Chain - &Odbuduj ƂaƄcuch blokĂłw - - - - Rebuild Block Chain - Odbuduj ƂaƄcuch blokĂłw - - - - &Download Blocks - &Pobierz bloki - - - - Download Blocks - Pobierz bloki - - - - &Upgrade Client - &Aktualizuj program - - - - Upgrade Client - Aktualizuj program - - - + &About Gridcoin &O Gridcoin @@ -618,37 +596,12 @@ Adres: %4 PokaĆŒ informacje o Gridcoin - - &Neural Network - Sieć &neuronowa - - - - Neural Network - Sieć neuronowa - - - - &Advanced Configuration - Konfiguracj&a zaawansowana - - - - Advanced Configuration - Konfiguracja zaawansowana - - - - &New User Wizard - &Nowy kreator uĆŒytkownika - - - + New User Wizard Nowy kreator uĆŒytkownika - + &Voting &GƂosowanie @@ -658,17 +611,7 @@ Adres: %4 GƂosowanie - - &Foundation - &Fundacja - - - - Foundation - Fundacja - - - + &Diagnostics &Diagnostyka @@ -677,16 +620,6 @@ Adres: %4 Diagnostics Diagnostyka - - - FA&Q - - - - - Interactive FAQ - Interaktywne FAQ - Modify configuration options for Gridcoin @@ -708,12 +641,14 @@ Adres: %4 + [testnet] [testnet] + Gridcoin client Klient Gridcoin @@ -723,27 +658,7 @@ Adres: %4 %1 aktywnych poƂączeƄ do sieci Gridcoin - - %1 second(s) ago - %1 sekund(y) temu - - - - %1 minute(s) ago - %1 minut(y) temu - - - - %1 hour(s) ago - %1 godzin(y) temu - - - - %1 day(s) ago - %1 dni temu - - - + Last received block was generated %1. Ostatni odebrany blok zostaƂ wygenerowany %1. @@ -788,19 +703,7 @@ Adres: %4 Uwaga! - Problem ze ƛcięzką do BOINC! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -Kwota: %2 -Typ: %3 -Adres: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI nie moĆŒe zostać sparsowane! MoĆŒe to być spowodowane zƂym adresem Gridcoin lub zƂymi parametrami URI. @@ -859,7 +762,7 @@ Adres: %4 - + %n second(s) %n sekunda @@ -895,47 +798,7 @@ Adres: %4 - - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - Twoja waga wynosi %1<br>Waga sieci to %2<br><b>Szacowany</b> czas do uzyskania nagrody to %3. %4 - - - - Not staking because wallet is locked - Brak gromadzenia (staking) poniewaĆŒ twĂłj portfel jest zablokowany - - - - Not staking because wallet is offline - Brak gromadzenia (staking) poniewaĆŒ twĂłj portfel jest odƂączony od sieci - - - - Not staking because wallet is syncing - Brak gromadzenia (staking) poniewaĆŒ twĂłj portfel się synchronizuje - - - - Not staking because you don't have mature coins and stake weight is too low. - Brak gromadzenia (staking) poniewaĆŒ nie masz "dojrzaƂych" monet i twoja waga gromadzenia jest za niska. - - - - Not staking because you don't have mature coins - Brak gromadzenia (staking) poniewaĆŒ nie masz "dojrzaƂych" monet - - - - Searching for mature coins... Please wait - Szukanie "dojrzaƂych" monet... proszę czekać - - - - Not staking - Brak gromadzenia (staking) - - - + &File &Plik @@ -950,17 +813,12 @@ Adres: %4 SpoƂe&cznoƛć - - &Advanced - Z&aawansowane - - - + &Help Pomo&c - + Processed %n block(s) of transaction history. Przetworzono %n blokĂłw historii transakcji. @@ -974,12 +832,12 @@ Adres: %4 Aktualny - + Catching up... Trwa synchronizacja
 - + Sent transaction Transakcja wysƂana @@ -989,16 +847,12 @@ Adres: %4 Transakcja przychodząca - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Portfel jest <b>zaszyfrowany</b> i obecnie <b>odblokowany</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Portfel jest <b>zaszyfrowany</b> i obecnie <b>zablokowany</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. BƂąd krytyczny. Portfel gridcoin nie moĆŒe kontynuować i się zamknie. @@ -1006,7 +860,7 @@ Adres: %4 ClientModel - + Network Alert OstrzeĆŒenie sieci @@ -1088,10 +942,6 @@ Adres: %4 (un)select all Zaznacz/Odznacz wszystko - - List mode - Widok listy - Amount @@ -1288,23 +1138,13 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Diagnostics - + Diagnostyka Verify CPID is in Neural Network - - - The label associated with this address book entry - Etykieta jest związana z tym wpisem ksiÄ…ĆŒki adresowej - - - - The address associated with this address book entry. This can only be modified for sending addresses. - Adres jest związany z tym wpisem ksiÄ…ĆŒki adresowej. MoĆŒna edytować tylko dla adresĂłw wyjƛciowych. - Verify BOINC path @@ -1381,12 +1221,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " The label associated with this address book entry - + Etykieta jest związana z tym wpisem ksiÄ…ĆŒki adresowej The address associated with this address book entry. This can only be modified for sending addresses. - + Adres jest związany z tym wpisem ksiÄ…ĆŒki adresowej. MoĆŒna edytować tylko dla adresĂłw wyjƛciowych. @@ -1480,7 +1320,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " NewPollDialog - + Create Poll UtwĂłrz gƂosowanie @@ -1693,10 +1533,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Map port using &UPnP Mapuj port uĆŒywając &UPnP - - Proxy &IP: - &IP proxy: - &Port: @@ -1858,11 +1694,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Net Weight: Waga sieci: - - - DPOR Weight: - Waga DPOR: - Error Messages: @@ -1894,12 +1725,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Aktualne gƂosowanie: - - Client Messages: - Wiadomoƛci: - - - + Available: Dostępne: @@ -1940,6 +1766,14 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " desynchronizacja + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -2001,7 +1835,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " RPCConsole - + @@ -2013,7 +1847,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + N/A NIEDOSTĘPNE @@ -2093,7 +1927,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Wyjƛcie: - + + &Scraper + + + + Debug log file Plik logowania debugowania @@ -2123,7 +1962,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Wpisz <b>help</b> aby uzyskać listę dostępnych komend. - + %1 B %1 B @@ -2158,12 +1997,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " %1 g %2 m - + Gridcoin - Debug Console Gridcoin - konsola debugowania - + Boost version Wersja Boost @@ -2233,7 +2072,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Nazwa klienta - + Welcome to the Gridcoin RPC console! Witaj w konsoli RPC! @@ -2500,22 +2339,22 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " SendCoinsEntry - + A&mount: Su&ma: - + Pay &To: A&dres przelewu: - + &Label: &Etykieta: - + Alt+A Alt+A @@ -2535,12 +2374,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Wiadomoƛć: - + Form Formularz - + Enter a label for this address to add it to your address book WprowadĆș etykietę dla tego adresu by dodać go do ksiÄ…ĆŒki adresowej @@ -2561,22 +2400,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " UsuƄ tego odbiorcę - + Send Custom Message to a Gridcoin Recipient Wyƛlij swoją wiadomoƛć do odbiorcy - - Track Coins - ƚledĆș monety - - - - Add Attachment - ZaƂącznik - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) WprowadĆș adres Gridcoin (n.p. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2827,22 +2656,47 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + Source ĆčrĂłdƂo - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + TX ID @@ -2877,10 +2731,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Transaction Inputs - - Generated - Wygenerowano - @@ -2941,29 +2791,11 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Comment Komentarz - - Transaction ID - ID transakcji - - - - Block Type - Typ bloku - - - - Block Number - Numer bloku - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. Wygenerowane money musza "dojrzeć" przez 110 blokĂłw zanim mogą zostać uĆŒyte. Kiedy wygenerowaƂeƛ ten blok, ogƂoszenie zostaƂo rozesƂane do sieci aby go dodać do sieci blokĂłw. Jeƛli się nie powiedzie, jego status zostanie zmieniony na "brak akceptacji" i nie będzie moĆŒna go uĆŒyć. MoĆŒe się to czasem zdarzyć jeƛli inna gaƂąĆș wygeneruje blok w przeciągu kilku sekund od twojego. - - Information - Informacje - label @@ -2984,14 +2816,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Message Wiadomoƛć - - Transaction - Transakcja - - - Inputs - Wejƛcia - Amount @@ -3021,12 +2845,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Ten panel pokazuje szczegóƂowy opis transakcji - - View Attachment - Zobacz zaƂącznik - - - + Execute Contract Wykonaj kontrakt @@ -3035,21 +2854,11 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " C&lose Z&amknij - - - Gridcoin Documents - Dokumenty Gridcoin - - - - Document cannot be found on P2P server. - Dokument nie moĆŒe zostać znaleziony na serwerze P2P. - TransactionTableModel - + Date Data @@ -3103,7 +2912,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Ten blok nie zostaƂ odebrany przez inne gaƂęzie<br> i prawdopodobnie nie zostanie zaakceptowany! - + Received with Otrzymane przez @@ -3118,32 +2927,42 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " PƂatnoƛć do siebie - - Mined - DPOR - Wykopane - DPOR + + MINED - POS + - - Minted - (Local) DPOR - Wykopane - (lokalnie) DPOR + + MINED - POR + - - Mined - PoR - Wykopane - PoR + + MINED - ORPHANED + - - Mined - Interest - Wykopane - UdziaƂ + + POS SIDE STAKE + - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (brak) - + Transaction status. Hover over this field to show number of confirmations. Status transakcji. NajedĆș na pole, aby zobaczyć liczbę potwierdzeƄ. @@ -3168,7 +2987,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Kwota usunięta lub dodana do konta. - + Offline Offline @@ -3188,7 +3007,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Wygenerowane ale nie zaakceptowane - + Sent to WysƂane do @@ -3362,33 +3181,10 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " do - - UpgradeDialog - - - Gridcoin Upgrading Facility - Aktualizowanie oprogramowania Gridcoin - - - - Retry Download - Pobierz ponownie - - - - Upgrade - Aktualizuj - - - - Hide - Ukryj - - VotingChartDialog - + Poll Results Wyniki ankiety @@ -3479,18 +3275,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Typ udziaƂu - - Question - Pytanie - - - - - Answers - Odpowiedzi - - - + # Voters # GƂosujący @@ -3500,12 +3285,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Kompletny udziaƂ - - URL - URL - - - + Best Answer Najlepsza odpowiedĆș @@ -3531,11 +3311,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - Question. - Pytanie. - - - Total Participants. UczestnikĂłw razem. @@ -3544,11 +3319,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Total Shares. UdziaƂów razem. - - - URL. - URL. - Best Answer. @@ -3558,7 +3328,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " VotingVoteDialog - + PlaceVote ZagƂosuj @@ -3591,7 +3361,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " WalletModel - + Sending... WysyƂanie... @@ -3599,22 +3369,17 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " bitcoin-core - + Options: Opcje: - + This help message Ta wiadomoƛć pomocy - - Specify configuration file (default: gridcoin.conf) - Okreƛl plik konfiguracyjny (domyƛlnie: gridcoin.con) - - - + Specify pid file (default: gridcoind.pid) Okreƛl plik PID (domyƛlnie: gridcoin.pid) @@ -3644,12 +3409,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " WskaĆŒ czas oczekiwania bezczynnoƛci poƂączenia w milisekundach (domyƛlnie: 5000) - + Connect through socks proxy PoƂącz przez socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Wybierz ktĂłrą wersję socks proxy uĆŒyć (4-5, domyƛlnie: 5) @@ -3659,7 +3424,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " UĆŒyj proxy do poƂączenia z usƂugą TOR (domyƛlnie: takie samo jak proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) NasƂuchuj poƂaczeƄ na <porcie> (domyƛlnie: 32749 lub testnet: 32748) @@ -3669,7 +3434,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Utrzymuj maksymalnie <n> poƂączeƄ z peerami (domyƛlnie: 125) - + Connect only to the specified node(s) PoƂącz tylko do wskazanego węzƂa @@ -3679,27 +3444,22 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " PodƂącz się do węzƂa aby otrzymać adresy peerĂłw i rozƂącz - + Specify your own public address Podaj swĂłj publiczny adres - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) PoƂącz z węzƂami tylko w sieci <net> (IPv4, IPv6 lub Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Odkryj wƂasny adres IP (domy?lnie: 1 kiedy w trybie nas?uchu i brak -externalip ) - - Find peers using internet relay chat (default: 0) - ZnajdĆș peerĂłw korzystających z IRC - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Akceptuj poƂączenia z zewnątrz (domyƛlnie: 1 jeĆŒli nie ustawiono -proxy lub -connect) @@ -3709,32 +3469,27 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " PowiÄ…ĆŒ z podanym adresem. UĆŒyj zapisu [host]:port dla IPv6 - + Find peers using DNS lookup (default: 1) ZnajdĆș uĆŒytkownikĂłw korzystających z wyszukiwania DNS (domyƛlnie: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Czas synchronizacji z innymi gaƂęziami. WyƂącz jeƛli czas na twoim systemie jest dokƂadny n.p. synchronizuje się przez NTP (domyƛlnie: 1) - - Sync checkpoints policy (default: strict) - Synchronizuj zasady punktu kontrolnego (default: ƛcisƂy) - - - + Threshold for disconnecting misbehaving peers (default: 100) PrĂłg po ktĂłrym nast?pi rozƂączenie nietrzymających się zasad peerĂłw (domyƛlnie: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Czas w sekundach, przez jaki nietrzymający się zasad peerzy nie będą mogli ponownie się podƂączyć (domyƛlnie: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksymalny bufor odbioru na poƂączenie, <n>*1000 bajtĂłw (domyƛlnie: 5000) @@ -3744,26 +3499,27 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Maksymalny bufor wysyƂu na poƂączenie, <n>*1000 bajtĂłw (domyƛlnie: 1000) - + Use UPnP to map the listening port (default: 1 when listening) UĆŒywaj UPnP do mapowania portu nasƂuchu (domy?lnie: 1 gdy nas?uchuje) - + Use UPnP to map the listening port (default: 0) UĆŒywaj UPnP do mapowania portu nasƂuchu (domy?lnie: 0) - + Fee per KB to add to transactions you send OpƂata za KB dodana do transakcji ktĂłrą wysyƂasz - + When creating transactions, ignore inputs with value less than this (default: 0.01) Przy tworzeniu transakcji, ignoruj wpisy większe niĆŒ to (domyƛlnie: 0.01) + None @@ -3809,12 +3565,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + Use the test network UĆŒyj sieci testowej - + Output extra debugging information. Implies all other -debug* options Wyƛwietl dodatkowe informacje debugowania. Zawiera wszystkie inne opcje -debug* @@ -3824,52 +3580,52 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Wyƛwietl dodatkowe informacje debugowania o sieci - + Prepend debug output with timestamp Poprzedzaj informacje debuggera znacznikiem czasu - + Send trace/debug info to debugger Wyƛlij wyƛledzone/zdebugowane informacje do debuggera - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) NasƂuchuj poƂączeƄ JSON-RPC na <porcie> (domyƛlnie: 15715 lub testnet: 25715) - + Allow JSON-RPC connections from specified IP address Przyjmuj poƂączenia JSON-RPC ze wskazanego adresu IP - + Send commands to node running on <ip> (default: 127.0.0.1) WysyƂaj polecenia do węzƂa dziaƂającego na <ip> (domyƛlnie: 127.0.0.1) - + Require a confirmations for change (default: 0) Wymagaj potwierdzenia dla zmian - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Wymuƛ by skrypty transakcyjne uĆŒywaƂy konanicznych operatorĂłw PUSH - + Execute command when a relevant alert is received (%s in cmd is replaced by message) Uruchom komendę przy odebraniu odpowiedniego alarmu (%s w cmd jest zastąpione wiadomoƛcią) - + Upgrade wallet to latest format Zaktualizuj portfel do najnowszego formatu - + Address Adres @@ -3886,7 +3642,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Answers - + Odpowiedzi @@ -3913,6 +3669,16 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3973,6 +3739,11 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " ERROR + + + Entire balance reserved + + Expires @@ -4028,11 +3799,6 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Message Wiadomoƛć - - - Messate Type - - Miner: @@ -4069,12 +3835,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - - No coins; - - - - + Offline; @@ -4084,19 +3845,14 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key Question - + Pytanie @@ -4116,7 +3872,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Share Type - + Typ udziaƂu @@ -4136,12 +3892,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Title - + TytuƂ URL - + URL @@ -4159,12 +3915,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + Accept command line and JSON-RPC commands Akceptuj linię poleceƄ oraz polecenia JSON-RPC - + Set key pool size to <n> (default: 100) Ustaw rozmiar puli kluczy na <n> (domyƛlnie: 100) @@ -4174,7 +3930,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Przeskanuj blok ƂaƄcuchĂłw ĆŒeby znaleĆșć zaginione transakcje portfela - + Attempt to recover private keys from a corrupt wallet.dat PrĂłbuj odzyskać klucze prywatne z uszkodzonego wallet.dat @@ -4194,7 +3950,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + Boinc Mining @@ -4204,7 +3960,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + Error obtaining next project. Error 06172014. @@ -4254,12 +4010,32 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4274,12 +4050,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Ustaw maksymalny rozmiar bloku w bajtach (domyƛlnie: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Ustaw maksymalny rozmiar transakcji wysokiego-priorytetu/niskiej-opƂaty w bajtach - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Opcje SSL: (odwiedĆș Bitcoin Wiki w celu uzyskania instrukcji) @@ -4299,22 +4075,17 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Klucz prywatny serwera (domyƛlnie: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Akceptowane szyfry (domyƛlnie: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' NieprawidƂowa kwota dla -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. OstrzeĆŒenie: -paytxfee jest bardzo duĆŒy. To jest prowizja za transakcje, ktĂłrą pƂacisz, gdy wysyƂasz monety. - + Invalid amount for -mininput=<amount>: '%s' NieprawidƂowa kwota dla -mininput=<amount>: '%s' @@ -4324,22 +4095,22 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Inicjalizacja poprawnoƛci dziaƂa nie udaƂa się. Aplikacja gridcoin wyƂączy się. - + Wallet %s resides outside data directory %s. Portfel %s znajduje się poza folderem z danymi %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Nie moĆŒna uzyskać blokady na folderze %s. Aplikacja Gridcoin jest juĆŒ prawdopodobnie uruchomiona. - + Verifying database integrity... Sprawdzanie integralnoƛci bazy danych... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. BƂad inicjalizacji bazy danych %s! Aby odzyskać, ZRÓB KOPIĘ ZAPASOWĄ FOLDERU, dopiero usuƄ z niego wszystko POMIJAJĄC wallet.dat. @@ -4349,8 +4120,13 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " OstrzeĆŒenie: Odtworzono dane z uszkodzonego pliku wallet.dat! Oryginalny wallet.dat zostaƂ zapisany jako wallet.{timestamp}.bak w %s; jeĆŒli twoje saldo lub transakcje są niepoprawne powinieneƛ odtworzyć kopię zapasową. - + Vote + GƂos + + + + Waiting for coins to mature @@ -4369,17 +4145,17 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " wallet.dat uszkodzony, odtworzenie się nie powiodƂo - + Unknown -socks proxy version requested: %i Nieznana wersja proxy w -socks: %i - + Invalid -tor address: '%s' NieprawidƂowy adres -tor: '%s' - + Cannot resolve -bind address: '%s' Nie moĆŒna uzyskać adresu -bind: '%s' @@ -4389,17 +4165,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Nie moĆŒna uzyskać adresu -externalip: '%s' - + Invalid amount for -reservebalance=<amount> NieprawidƂowa kwota dla -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - Nie moĆŒna podpisać punktu kontrolnego. ZƂy klucz punktu kontrolnego? - - - + Error loading blkindex.dat BƂad Ƃadowania blkindex.dat @@ -4409,22 +4180,22 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " BƂąd Ƃadowania wallet.dat: Uszkodzony portfel - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. OstrzeĆŒenie: bƂąd odczytu wallet.dat! Wszystkie klucze zostaƂy odczytane, ale moĆŒe brakować pewnych danych transakcji lub wpisĂłw w ksiÄ…ĆŒce adresowej lub mogą one być nieprawidƂowe. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin BƂąd Ƃadowania wallet.dat: Portfel wymaga nowej wersji aplikacji Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Portfel potrzebuje być zapisany: uruchom ponownie aplikację Gridcoin aby zakoƄczyć - + Error loading wallet.dat BƂąd Ƃadowania wallet.dat @@ -4444,17 +4215,17 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " BƂąd: nie udaƂo się wystartować gaƂęzi - + Unable to bind to %s on this computer. Gridcoin is probably already running. Nie moĆŒna przywiązać %s na tym komputerze. Aplikacja Gridcoin jest juĆŒ prawdopodobnie uruchomiona. - + Unable to bind to %s on this computer (bind returned error %d, %s) Nie moĆŒna przywiązać %s na tym komputerze (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction BƂąd: Portfel zablokowany, nie mozna utworzyć transakcji @@ -4464,61 +4235,47 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " BƂąd: Portfel odblokowany tylko do gromadzenia (staking), nie moĆŒna utworzyć transakcji. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds BƂad: Ta transakcja wymaga opƂaty transakcyjnej wysokoƛci conajmniej %s z powodu jej rozmiaru, kompleksowoƛci lub uĆŒycia dopiero otrzymanych ƛrodkĂłw - + Error: Transaction creation failed BƂad: Utworzenie transakcji nie powiodƂo się - + Sending... WysyƂanie... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. BƂąd: Transakcja odrzucona. MoĆŒe się tak zdarzyć jeƛli niektĂłre z monet w twoich portfelu zostaƂy juĆŒ wydane, czyli jeƛli uĆŒyƂeƛ kopii zapasowej wallet.dat i monety zostaƂy wydany w kopii ale nie zostaƂy oznaczone jako wydane tutaj. - + Invalid amount NieprawidƂowa kwota - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. OstrzeĆŒenie: Proszę sprawdzić czy data i czas twojego komputera są prawidƂowe! Jeƛli twĂłj zegar jest Ćșle ustawiony, aplikacja Gridcoin nie będzie prawidƂowo pracować. - Warning: This version is obsolete, upgrade required! - Uwaga: Ta wersja jest przestarzaƂa, aktualizacja wymagana! - - - - WARNING: synchronized checkpoint violation detected, but skipped! - OstrzeĆŒenie: Wykryto naruszenie zsynchronizowanego punktu kontrolnego, ale zostaƂo pominięte! - - - + Warning: Disk space is low! OstrzeĆŒenie: MaƂo miejsca na dysku! - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - OstrzeĆŒenie: Znaleziono nieprawidƂowy punkt kontrolny! Wyƛwietlane informacje mogą być nieprawidƂowe! Powinieneƛ zaktualizować oprogramowanie lub powiadomić programistĂłw. - - - + Run in the background as a daemon and accept commands Uruchom w tle jako daemon i przyjmuj polecenia - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Wykonaj polecenie, kiedy transakcja portfela ulegnie zmianie (%s w poleceniu zostanie zastąpione przez TxID) @@ -4528,12 +4285,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " Opcje tworzenia bloku: - + Failed to listen on any port. Use -listen=0 if you want this. PrĂłba nasƂuchiwania na jakimkolwiek porcie nie powiodƂa się. UĆŒyj -listen=0 jeƛli tego chcesz. - + Specify wallet file (within data directory) Okreƛl plik portfela (w obrębie folderu danych) @@ -4558,7 +4315,7 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " HasƂo do poƂączeƄ JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Wykonaj polecenie kiedy najlepszy blok ulegnie zmianie (%s w komendzie zastanie zastąpione przez hash bloku) @@ -4568,12 +4325,12 @@ Wartoƛci poniĆŒej 0.546*minimalna wartoƛć przekazu. są traktowane jako " ZezwĂłl -addnode, -seednode i -connect na Ƃączenie się z serwerem DNS - + To use the %s option Aby uĆŒyć opcji %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4617,12 +4374,12 @@ If the file does not exist, create it with owner-readable-only file permissions. JeĆŒeli plik nie istnieje, utwĂłrz go z uprawnieniami wƂaćciciela-tylko-do-odczytu. - + Gridcoin version Wersja Gridcoin - + Usage: UĆŒycie: @@ -4632,7 +4389,7 @@ JeĆŒeli plik nie istnieje, utwĂłrz go z uprawnieniami wƂaćciciela-tylko-do-odc Wyƛlij komendę do -server lub gridcoin - + List commands Lista poleceƄ @@ -4657,12 +4414,12 @@ JeĆŒeli plik nie istnieje, utwĂłrz go z uprawnieniami wƂaćciciela-tylko-do-odc NieprawidƂowy adres -proxy: '%s' - + Unknown network specified in -onlynet: '%s' Nieznana sieć w -onlynet: '%s' - + Insufficient funds Niewystarczające ƛrodki @@ -4672,17 +4429,17 @@ JeĆŒeli plik nie istnieje, utwĂłrz go z uprawnieniami wƂaćciciela-tylko-do-odc Ɓadowanie indeksu bloku... - + Add a node to connect to and attempt to keep the connection open Dodaj węzeƂ do podƂączenia się i prĂłbuj utrzymać to poƂączenie - + Loading wallet... Wczytywanie portfela... - + Cannot downgrade wallet Nie moĆŒna dezaktualizować portfela @@ -4692,17 +4449,17 @@ JeĆŒeli plik nie istnieje, utwĂłrz go z uprawnieniami wƂaćciciela-tylko-do-odc Nie moĆŒna zapisać domyƛlnego adresu - + Rescanning... Ponowne skanowanie... - + Done loading Wczytywanie zakoƄczone - + Error BƂąd diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts index 1186f9f0e6..68c866b945 100644 --- a/src/qt/locale/bitcoin_pt_BR.ts +++ b/src/qt/locale/bitcoin_pt_BR.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - ? -Este Ă© um software experimental.? -? -Distribuido sob a licença de software MIT/X11, veja o arquivo anexo COPYING ou http://www.opensource.org/licenses/mit-license.php.? -? -Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenSSL Toolkit (http://www.openssl.org/), software de criptografia escrito por Eric Young (eay@cryptsoft.com) e sofware UPnP escrito por Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS BitcoinGUI - + Sign &message... Assinar &mensagem... - + &Overview &VisĂŁo geral @@ -414,7 +400,7 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Sair da aplicação - + &Options... &OpçÔes... @@ -429,7 +415,7 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Cryptografar ou Decryptografar carteira - + %n second(s) ago @@ -461,7 +447,7 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS - + Date: %1 Amount: %2 Type: %3 @@ -475,7 +461,7 @@ Endereço: %4 {1 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -485,17 +471,39 @@ Endereço: %4 {1 - &Backup Wallet... - &Backup da carteira... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Mudar frase de segurança... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + - Backup wallet to another location - Fazer cĂłpia de segurança da carteira para uma outra localização + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Mudar frase de segurança... @@ -548,7 +556,7 @@ Endereço: %4 {1 &Verificar mensagem... - + Wallet Carteira @@ -558,7 +566,7 @@ Endereço: %4 {1 - + &Send &Enviar @@ -578,28 +586,12 @@ Endereço: %4 {1 - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -609,7 +601,7 @@ Endereço: %4 {1 - + &Diagnostics @@ -639,14 +631,14 @@ Endereço: %4 {1 - + [testnet] [testnet] - + Gridcoin client @@ -656,7 +648,7 @@ Endereço: %4 {1 - + Last received block was generated %1. @@ -701,18 +693,7 @@ Endereço: %4 {1 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -Quantidade: %2 -Tipo: %3 -Endereço: %4 - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -771,7 +752,7 @@ Endereço: %4 - + %n second(s) %n segundo @@ -803,7 +784,7 @@ Endereço: %4 - + &File &Arquivo @@ -818,17 +799,12 @@ Endereço: %4 - - &Advanced - - - - + &Help A&juda - + Processed %n block(s) of transaction history. %n bloco processado do histĂłrico de transaçÔes. @@ -841,12 +817,12 @@ Endereço: %4 Atualizado - + Catching up... Recuperando o atraso ... - + Sent transaction Transação enviada @@ -856,16 +832,12 @@ Endereço: %4 Transação recebida - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Carteira estĂĄ <b>criptografada</b> e atualmente <b>desbloqueada</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Carteira estĂĄ <b>criptografada</b> e atualmente <b>bloqueada</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -873,7 +845,7 @@ Endereço: %4 ClientModel - + Network Alert Alerta da Rede @@ -955,10 +927,6 @@ Endereço: %4 (un)select all (de)selecionar tudo - - List mode - Modo lista - Amount @@ -1324,7 +1292,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1537,10 +1505,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Mapear porta usando &UPnP - - Proxy &IP: - &IP do proxy: - &Port: @@ -1774,6 +1738,14 @@ This label turns red, if the priority is smaller than "medium". fora de sincronia + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1835,7 +1807,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1847,7 +1819,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A N/A @@ -1927,7 +1899,12 @@ This label turns red, if the priority is smaller than "medium". SaĂ­da: - + + &Scraper + + + + Debug log file Arquivo de log de depuração @@ -1962,7 +1939,7 @@ This label turns red, if the priority is smaller than "medium". Digite <b>help</b> para uma visĂŁo geral dos comandos disponĂ­veis. - + %1 B %1 B @@ -1997,12 +1974,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2334,22 +2311,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Q&uantidade: - + Pay &To: Pagar &Para: - + &Label: &RĂłtulo: - + Alt+A Alt+A @@ -2375,12 +2352,12 @@ This label turns red, if the priority is smaller than "medium". Digite um rĂłtulo para este endereço para adicionĂĄ-lo ao catĂĄlogo de endereços - + Form FormulĂĄrio - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2395,17 +2372,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2654,16 +2626,12 @@ This label turns red, if the priority is smaller than "medium". - + Source Fonte - Generated - Gerado - - - + From De @@ -2674,21 +2642,42 @@ This label turns red, if the priority is smaller than "medium". - Information - Informação + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + unknown desconhecido @@ -2723,8 +2712,8 @@ This label turns red, if the priority is smaller than "medium". matures in %n more block(s) - maduro em mais %n bloco - maduro em mais %n blocos + maduro em mais %n bloco + maduro em mais %n blocos @@ -2796,18 +2785,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID da transação - - - Transaction - Transação - - - Inputs - Entradas - Amount @@ -2837,12 +2814,7 @@ This label turns red, if the priority is smaller than "medium". Este painel mostra uma descrição detalhada da transação - - View Attachment - - - - + Execute Contract @@ -2851,21 +2823,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &Fechar - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2900,32 +2862,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Endereço de destino da transação. - + Open for %n more block(s) Aberto por mais %n bloco @@ -2963,7 +2905,7 @@ This label turns red, if the priority is smaller than "medium". Gerado mas nĂŁo aceito - + Received with Recebido @@ -2983,12 +2925,42 @@ This label turns red, if the priority is smaller than "medium". Pagamento para vocĂȘ mesmo - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Status da transação. Passe o mouse sobre este campo para mostrar o nĂșmero de confirmaçÔes. @@ -3177,17 +3149,10 @@ This label turns red, if the priority is smaller than "medium". para - - UpgradeDialog - - Hide - Ocultar - - VotingChartDialog - + Poll Results @@ -3331,7 +3296,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3364,7 +3329,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3372,12 +3337,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: OpçÔes: - + This help message Esta mensagem de ajuda @@ -3412,12 +3377,12 @@ This label turns red, if the priority is smaller than "medium". Especifique o tempo limite (timeout) da conexĂŁo em milissegundos (padrĂŁo: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3427,7 +3392,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3437,7 +3402,7 @@ This label turns red, if the priority is smaller than "medium". Manter no mĂĄximo <n> conexĂ”es aos peers (padrĂŁo: 125) - + Connect only to the specified node(s) Conectar apenas a nĂł(s) especĂ­fico(s) @@ -3447,22 +3412,22 @@ This label turns red, if the priority is smaller than "medium". Conectar a um nĂł para receber endereços de participantes, e desconectar. - + Specify your own public address Especificar seu prĂłprio endereço pĂșblico - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Apenas conectar em nĂłs na rede <net> (IPv4, IPv6, ou Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descobrir os prĂłprios endereços IP (padrĂŁo: 1 quando no modo listening e opção -externalip nĂŁo estiver presente) - + Accept connections from outside (default: 1 if no -proxy or -connect) Aceitar conexĂ”es externas (padrĂŁo: 1 se opçÔes -proxy ou -connect nĂŁo estiverem presentes) @@ -3472,22 +3437,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) Limite para desconectar peers mal comportados (padrĂŁo: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) NĂșmero de segundos para impedir que peers mal comportados reconectem (padrĂŁo: 86400) @@ -3582,6 +3547,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3642,6 +3617,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3707,11 +3687,6 @@ This label turns red, if the priority is smaller than "medium". Message Mensagem - - - Messate Type - - Miner: @@ -3748,12 +3723,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3763,12 +3733,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3848,12 +3813,12 @@ This label turns red, if the priority is smaller than "medium". Usar UPnP para mapear porta de escuta (padrĂŁo: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3863,12 +3828,12 @@ This label turns red, if the priority is smaller than "medium". Aceitar linha de comando e comandos JSON-RPC - + Use the test network Usar rede de teste - + Output extra debugging information. Implies all other -debug* options @@ -3878,7 +3843,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3888,7 +3853,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3898,7 +3863,7 @@ This label turns red, if the priority is smaller than "medium". Permitir conexĂ”es JSON-RPC de endereços IP especĂ­ficos - + Send commands to node running on <ip> (default: 127.0.0.1) Enviar comando para nĂł rodando em <ip> (pardĂŁo: 127.0.0.1) @@ -3908,7 +3873,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3918,7 +3883,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format Atualizar carteira para o formato mais recente @@ -3933,7 +3898,7 @@ This label turns red, if the priority is smaller than "medium". Re-escanear blocos procurando por transaçÔes perdidas da carteira - + Attempt to recover private keys from a corrupt wallet.dat Tentar recuperar chaves privadas de um arquivo wallet.dat corrompido @@ -3953,7 +3918,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3963,7 +3928,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4013,12 +3978,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4033,12 +4018,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) OpçÔes SSL: (veja a Wiki do Bitcoin para instruçÔes de configuração SSL) @@ -4058,17 +4043,17 @@ This label turns red, if the priority is smaller than "medium". Chave privada do servidor (padrĂŁo: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' Quantidade invĂĄlida para -paytxfee=<quantidade>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Cuidado: valor de -paytxfee escolhido Ă© muito alto! Este Ă© o valor da taxa de transação que vocĂȘ irĂĄ pagar se enviar a transação. - + Invalid amount for -mininput=<amount>: '%s' @@ -4078,22 +4063,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4103,10 +4088,15 @@ This label turns red, if the priority is smaller than "medium". Aviso: wallet.dat corrompido, dados recuperados! Arquivo wallet.dat original salvo como wallet.{timestamp}.bak em %s; se seu saldo ou transaçÔes estiverem incorretos, vocĂȘ deve restauras o backup. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4123,17 +4113,17 @@ This label turns red, if the priority is smaller than "medium". wallet.dat corrompido, recuperação falhou - + Unknown -socks proxy version requested: %i VersĂŁo desconhecida do proxy -socks requisitada: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' ImpossĂ­vel encontrar o endereço -bind: '%s' @@ -4143,7 +4133,7 @@ This label turns red, if the priority is smaller than "medium". ImpossĂ­vel encontrar endereço -externalip: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4158,22 +4148,22 @@ This label turns red, if the priority is smaller than "medium". Erro ao carregar wallet.dat: Carteira corrompida - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Cuidado: erro ao ler arquivo wallet.dat! Todas as chaves foram lidas corretamente, mas dados transaçÔes e do catĂĄlogo de endereços podem estar faltando ou estar incorretas. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat Erro ao carregar wallet.dat @@ -4193,17 +4183,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) ImpossĂ­vel vincular a %s neste computador (bind retornou erro %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4213,51 +4203,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount Quantidade invĂĄlida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - Warning: This version is obsolete, upgrade required! - Cuidado: Esta versĂŁo estĂĄ obsoleta, atualização exigida! - - - + Warning: Disk space is low! - + Run in the background as a daemon and accept commands Rodar em segundo plano como serviço e aceitar comandos - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executa um comando quando uma transação da carteira mudar (%s no comando serĂĄ substituĂ­do por TxID) @@ -4267,12 +4253,12 @@ This label turns red, if the priority is smaller than "medium". OpçÔes de criação de blocos: - + Failed to listen on any port. Use -listen=0 if you want this. Falha ao escutar em qualquer porta. Use -listen=0 se vocĂȘ quiser isso. - + Specify wallet file (within data directory) Especifique o arquivo da carteira (dentro do diretĂłrio de dados) @@ -4297,7 +4283,7 @@ This label turns red, if the priority is smaller than "medium". Senha para conexĂ”es JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Executa um comando quando o melhor bloco mudar (%s no comando serĂĄ substituĂ­do pelo hash do bloco) @@ -4307,12 +4293,12 @@ This label turns red, if the priority is smaller than "medium". Permitir consultas DNS para -addnode, -seednode e -connect - + To use the %s option Para usar a opção %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4346,12 +4332,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Se o arquivo nĂŁo existir, crie um com permissĂŁo de leitura apenas pelo dono - + Gridcoin version - + Usage: Uso: @@ -4361,7 +4347,7 @@ Se o arquivo nĂŁo existir, crie um com permissĂŁo de leitura apenas pelo dono - + List commands Lista de comandos @@ -4386,12 +4372,12 @@ Se o arquivo nĂŁo existir, crie um com permissĂŁo de leitura apenas pelo donoEndereço -proxy invĂĄlido: '%s' - + Unknown network specified in -onlynet: '%s' Rede desconhecida especificada em -onlynet: '%s' - + Insufficient funds Saldo insuficiente @@ -4401,17 +4387,17 @@ Se o arquivo nĂŁo existir, crie um com permissĂŁo de leitura apenas pelo donoCarregando Ă­ndice de blocos... - + Add a node to connect to and attempt to keep the connection open Adicionar um cliente para se conectar e tentar manter a conexĂŁo ativa - + Loading wallet... Carregando carteira... - + Cannot downgrade wallet NĂŁo Ă© possĂ­vel fazer downgrade da carteira @@ -4421,17 +4407,17 @@ Se o arquivo nĂŁo existir, crie um com permissĂŁo de leitura apenas pelo donoNĂŁo foi possĂ­vel escrever no endereço padrĂŁo - + Rescanning... Re-escaneando... - + Done loading Carregamento terminado! - + Error Erro diff --git a/src/qt/locale/bitcoin_pt_PT.ts b/src/qt/locale/bitcoin_pt_PT.ts index 49e8023911..446f834260 100644 --- a/src/qt/locale/bitcoin_pt_PT.ts +++ b/src/qt/locale/bitcoin_pt_PT.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Este Ă© um programa experimental. - -DistribuĂ­do sob uma licença de software MIT/X11, por favor verifique o ficheiro anexo license.txt ou http://www.opensource.org/licenses/mit-license.php. - -Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no OpenSSL Toolkit (http://www.openssl.org/), software criptogrĂĄfico escrito por Eric Young (eay@cryptsoft.com) e software UPnP escrito por Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open BitcoinGUI - + Sign &message... Assinar &mensagem... - + &Overview &Resumo @@ -414,7 +400,7 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Sair da aplicação - + &Options... &OpçÔes... @@ -429,7 +415,7 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Encriptar ou desencriptar carteira - + %n second(s) ago %n hĂĄ segundo @@ -461,7 +447,7 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open - + Date: %1 Amount: %2 Type: %3 @@ -476,7 +462,7 @@ Endereço: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -486,17 +472,39 @@ Endereço: %4 - &Backup Wallet... - Efetuar &CĂłpia de Segurança da Carteira... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - Alterar &Frase de Segurança... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + - Backup wallet to another location - Efetue uma cĂłpia de segurança da carteira para outra localização + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + Alterar &Frase de Segurança... @@ -549,7 +557,7 @@ Endereço: %4 &Verificar mensagem... - + Wallet Carteira @@ -559,7 +567,7 @@ Endereço: %4 Gridcoin - + &Send &Enviar @@ -568,30 +576,6 @@ Endereço: %4 &Receive &Receber - - &Rebuild Block Chain - &Reconstruir Cadeia de Blocos - - - Rebuild Block Chain - Reconstruir Cadeia de Blocos - - - &Download Blocks - &Transferir Blocos - - - Download Blocks - Transferir Blocos - - - &Upgrade Client - & Actualizar Cliente - - - Upgrade Client - Actualizar Cliente - &About Gridcoin @@ -603,36 +587,12 @@ Endereço: %4 Mostrar informaçÔe sobre o Grdicoin - - &Neural Network - &Rede Neural - - - - Neural Network - Rede Neural - - - &Advanced Configuration - &ConfiguraçÔes Avançadas - - - Advanced Configuration - ConfiguraçÔes Avançadas - - - - &New User Wizard - &Assistente de Novo Utilizador - - - - + New User Wizard Assistente de Novo Utilizador - + &Voting &VotaçÔes @@ -642,15 +602,7 @@ Endereço: %4 VotaçÔes - &Foundation - &Instituição - - - Foundation - Instituição - - - + &Diagnostics &DiagnĂłsticos @@ -659,14 +611,6 @@ Endereço: %4 Diagnostics DiagnĂłsticos - - FA&Q - FA&Q - - - Interactive FAQ - FAQ - Modify configuration options for Gridcoin @@ -688,14 +632,14 @@ Endereço: %4 - + [testnet] [rede de testes] - + Gridcoin client Cliente Gridcoin @@ -705,23 +649,7 @@ Endereço: %4 %1 ligação ativa Ă  rede Gridcoin - %1 second(s) ago - %1 hĂĄ segundo - - - %1 minute(s) ago - hĂĄ %1 minuto - - - %1 hour(s) ago - hĂĄ %1 hora - - - %1 day(s) ago - hĂĄ %1 dia - - - + Last received block was generated %1. O Ășltimo bloco recebido foi gerado %1. @@ -766,19 +694,7 @@ Endereço: %4 Atenção! - Erro na Diretoria do Boinc! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -Quantia: %2 -Tipo: %3 -Endereço: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. O URI nĂŁo pode ser analisado! Isto pode ser causado por um endereço invĂĄlido de Gridcoin ou parĂąmetros de URI mal-formados. @@ -837,7 +753,7 @@ Endereço: %4 - + %n second(s) %n segundo @@ -869,39 +785,7 @@ Endereço: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - A realizar Staking.<br>O seu peso Ă© de %1<br>Peso da rede Ă© %2<br><b>Tempo</b> estimado para ganhar recompensa +e de %3. %4 - - - Not staking because wallet is locked - NĂŁo estĂĄ a fazer stake porque a carteira estĂĄ trancada - - - Not staking because wallet is offline - NĂŁo estĂĄ a fazer stake porque a carteita estĂĄ offline - - - Not staking because wallet is syncing - NĂŁo estĂĄ a fazer stale porque a carteira esta a sincronizar - - - Not staking because you don't have mature coins and stake weight is too low. - NĂŁo estĂĄ a realizar stake porque nĂŁo tem' moedas maduras e o peso do stake Ă© muito baixo. - - - Not staking because you don't have mature coins - NĂŁo a fazer stake porque nĂŁo tem moedas maduras - - - Searching for mature coins... Please wait - Procurando por moedas maduras... Por favor aguarde - - - Not staking - NĂŁo realizando stake - - - + &File &Ficheiro @@ -916,17 +800,12 @@ Endereço: %4 &Comunidade - - &Advanced - &Avançado - - - + &Help &Ajuda - + Processed %n block(s) of transaction history. Processado %n bloco do histĂłrico de transaçÔes. @@ -939,12 +818,12 @@ Endereço: %4 Atualizado - + Catching up... Recuperando o atraso... - + Sent transaction Transação enviada @@ -954,16 +833,12 @@ Endereço: %4 Transação recebida - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - A carteira estĂĄ <b>encriptada</b> e atualmente <b>desbloqueada</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> A carteira estĂĄ <b>encriptada</b> e atualmente <b>bloqueada</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Ocorreu um erro fatal. O Gridcoin nĂŁo consegue continuar em segurança e vai fechar. @@ -971,7 +846,7 @@ Endereço: %4 ClientModel - + Network Alert Alerta da Rede @@ -1053,10 +928,6 @@ Endereço: %4 (un)select all (des)selecionar todos - - List mode - Modo de lista - Amount @@ -1434,7 +1305,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. NewPollDialog - + Create Poll Criar Votação @@ -1647,10 +1518,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Map port using &UPnP Mapear porta, utilizando &UPnP - - Proxy &IP: - &IP do proxy: - &Port: @@ -1817,10 +1684,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Error Messages: - - DPOR Weight: - Peso DPOR: - Magnitude: @@ -1846,10 +1709,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Current Poll: Votação Atual: - - Client Messages: - Mensagens do Cliente: - Available: @@ -1892,6 +1751,14 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. fora de sincronia + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1953,7 +1820,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. RPCConsole - + @@ -1965,7 +1832,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - + N/A N/D @@ -2045,7 +1912,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. SaĂ­da: - + + &Scraper + + + + Debug log file Ficheiro de registo de depuração @@ -2075,7 +1947,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Insira <b>help</b> para visualizar os comandos disponĂ­veis. - + %1 B %1 B @@ -2110,12 +1982,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. %1 h %2 m - + Gridcoin - Debug Console Gridcoin- Consola de Depuração - + Boost version VersĂŁo de Boost @@ -2185,7 +2057,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Nome do cliente - + Welcome to the Gridcoin RPC console! Bem-vindo Ă  consola RPC Grdicoin! @@ -2452,22 +2324,22 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. SendCoinsEntry - + A&mount: Qu&antia: - + Pay &To: &Pagar A: - + &Label: RĂłtu&lo: - + Alt+A Alt+A @@ -2487,12 +2359,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Mensagem: - + Form FormulĂĄrio - + Enter a label for this address to add it to your address book Escreva um rĂłtulo para este endereço para o adicionar ao seu livro de endereços @@ -2513,21 +2385,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Remover este destinatĂĄrio - + Send Custom Message to a Gridcoin Recipient Enviar Mensagem Personalizada a um DestinatĂĄrio Gridcoin - Track Coins - Rastrear Moedas - - - - Add Attachment - Adicionar Anexo - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Insira um endereço Gridcoin (exemplo:S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2755,16 +2618,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - + Source Origem - Generated - Gerado - - - + From De @@ -2787,23 +2646,11 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. own address endereço prĂłprio - - Block Type - Tipo de Bloco - - - Block Number - NĂșmero do Bloco - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. As moedas gerados pelo Gridcoin devem maturar durante 110 blocos antes de poderem ser gastas. Quando gerou este bloco, ele foi transmitido Ă  rede para ser adicionado Ă  cadeia de blocos. Se falhar a entrada na cadeia, o seu estado serĂĄ alterado para "nĂŁo aceite" e nĂŁo serĂĄ' possivel de usar. Isto pode acontecer ocasionalmente se outro mĂłdulo gerar um bloxo com segundos de diferença do seu. - - Information - Informação - label @@ -2832,7 +2679,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. DĂ©bito - + Open for %n more block(s) Aberta por mais %n bloco @@ -2858,12 +2705,37 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - - Generated, PoS + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN - + matures in %n more block(s) matura daqui por %n bloco @@ -2926,18 +2798,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Transaction Inputs - - Transaction ID - ID da Transação - - - Transaction - Transação - - - Inputs - Entradas - Amount @@ -2967,12 +2827,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Esta janela mostra uma descrição detalhada da transação - - View Attachment - Ver Anexos - - - + Execute Contract Executar Contrato @@ -2981,21 +2836,11 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. C&lose F&echar - - - Gridcoin Documents - Documentos do Gridcoin - - - - Document cannot be found on P2P server. - Documento nĂŁo encontrado no servidor P2P. - TransactionTableModel - + Date Data @@ -3038,27 +2883,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Esye bloco nĂŁo foi recebido por outros nĂłdulos<br> e provavelmente nĂŁo serĂĄ aceite! - - Mined - DPOR - Minada - DPOR - - - - Minted - (Local) DPOR - Minted - DPOR (Local) - - - - Mined - PoR - Minada - PoR - - - - Mined - Interest - Minada - Interesse - - - + Date and time that the transaction was received. Data e hora a que esta transação foi recebida. @@ -3073,7 +2898,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Quantia retirada ou adicionada ao saldo. - + Open until %1 Aberto atĂ© %1 @@ -3103,7 +2928,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Gerado mas nĂŁo aceite - + Received with Recebido com @@ -3123,12 +2948,42 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Pagamento ao prĂłprio - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/d) - + Transaction status. Hover over this field to show number of confirmations. Estado da transação. Colocar ponteiro por cima deste campo para mostrar o nĂșmero de confirmaçÔes. @@ -3307,29 +3162,10 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. para - - UpgradeDialog - - Gridcoin Upgrading Facility - Instalação de Actualização do Gridcoin - - - Retry Download - Tentar TransferĂȘncia novamente - - - Upgrade - Actualizar - - - Hide - Ocultar - - VotingChartDialog - + Poll Results Resultados da Votação @@ -3419,14 +3255,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Share Type Tipo de Partilha - - Question - QuestĂŁo - - - Answers - Respostas - # Voters @@ -3437,10 +3265,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Total Shares Total de Partilhas - - URL - URL - Best Answer @@ -3466,10 +3290,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Share Type. Tipo de Partilha. - - Question. - QuestĂŁo. - Total Participants. @@ -3480,10 +3300,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Total Shares. Total de Partilhas. - - URL. - URL. - Best Answer. @@ -3493,7 +3309,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. VotingVoteDialog - + PlaceVote ColocarVoto @@ -3526,7 +3342,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. WalletModel - + Sending... Enviando... @@ -3534,19 +3350,15 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. bitcoin-core - + Options: OpçÔes: - + This help message Esta mensagem de ajuda - - Specify configuration file (default: gridcoin.conf) - Especificar ficheiro de configuração (por defeito: gridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -3578,12 +3390,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Especificar tempo de espera da ligação em millisegundos (por defeito: 5000) - + Connect through socks proxy Ligar atravĂ©s de socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Seleccione a versĂŁo do socks proxy a utilizar (4-5. por defeito: 5) @@ -3593,7 +3405,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Utilizar proxy para verificar serviços ocultos do tor (por defeito: o mesmo que -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Escutar ligaçÔes em on <port> (por defeito: 32749 na testnet: 32748) @@ -3603,7 +3415,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Manter no mĂĄximo <n> ligaçÔes a peers (por defeito: 125) - + Connect only to the specified node(s) Ligar apenas ao(s) nĂłdulo(s) especificado(s) @@ -3613,26 +3425,22 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Ligar a um nĂł para recuperar endereços de pares, e desligar - + Specify your own public address Especifique o seu endereço pĂșblico - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Apenas ligar a nĂłdulos na rede <net> (IPv4, IPv6 ou Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descobrir endereço IP prĂłprio (por defeito: 1 ao escutar e sem -externalip) - Find peers using internet relay chat (default: 0) - Encontrar peers utilizando irc (por defeito: 0) - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Aceitar ligaçÔes externas (por defeito: 1 sem -proxy ou -connect) @@ -3642,26 +3450,22 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Ligar ao endereço fornecido. Usar [host]:por notação para IPv6 - + Find peers using DNS lookup (default: 1) Encontrar peers utilizando o DNS lookup - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sincronizar tempo com outros nĂłdulos. Desabilitar se o tempo no seu sistema for preciso, por exemplo a sincronizar com NTP (por defeito: 1) - Sync checkpoints policy (default: strict) - Sincronizar politĂ­ca de checkpoints (por defeito: rigoroso) - - - + Threshold for disconnecting misbehaving peers (default: 100) TolerĂąncia para desligar peers mal-formados (por defeito: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) NĂșmero de segundos a impedir que peers mal-formados se liguem de novo (por defeito: 86400) @@ -3756,6 +3560,16 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3816,6 +3630,11 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. ERROR + + + Entire balance reserved + + Expires @@ -3881,11 +3700,6 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Message Mensagem - - - Messate Type - - Miner: @@ -3922,12 +3736,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - - No coins; - - - - + Offline; @@ -3937,12 +3746,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4022,12 +3826,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Usar UPnP para mapear a porta de escuta (padrĂŁo: 0) - + Fee per KB to add to transactions you send Taxa por kb para adicionar Ă s transaçÔes que enviou - + When creating transactions, ignore inputs with value less than this (default: 0.01) Quando criando transaçÔes, ignorar entradas com valor inferior a este (por defeito: 0.01) @@ -4037,12 +3841,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Aceitar comandos de linha de comandos e JSON-RPC - + Use the test network Utilizar a rede de testes - testnet - + Output extra debugging information. Implies all other -debug* options Informação de depuração de saĂ­da. implica todas as outras opçÔes de -debug* @@ -4052,7 +3856,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Informação de depuração da rede de saĂ­da - + Prepend debug output with timestamp Prepend debug output with timestamp @@ -4062,7 +3866,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Enviar informaçÔes rastreio/depuração para o debugger - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Escuta para ligaçÔes JSON-RPC em <port> (por defeito: 15715 ou testnet: 25715) @@ -4072,7 +3876,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Permitir ligaçÔes JSON-RPC do endereço IP especificado - + Send commands to node running on <ip> (default: 127.0.0.1) Enviar comandos para o nĂłdulo a correr em <ip> (por defeito: 127.0.0.1) @@ -4082,7 +3886,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Necessita de confirmação para alteração (por defeito: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Forçar scripts de transação a utilizarem operadores de PUSH @@ -4092,7 +3896,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Executar comando quando um alerta relevante foi recebido (%s no cmd Ă© substituido pela mensagem) - + Upgrade wallet to latest format Atualize a carteira para o formato mais recente @@ -4107,7 +3911,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Reexaminar a cadeia de blocos para transaçÔes em falta na carteira - + Attempt to recover private keys from a corrupt wallet.dat Tentar recuperar chaves privadas de um wallet.dat corrupto @@ -4127,7 +3931,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - + Boinc Mining @@ -4137,7 +3941,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - + Error obtaining next project. Error 06172014. @@ -4187,12 +3991,32 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4207,12 +4031,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Definir tamanho do bloco em bytes (por defeito: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Definir tamanho mĂĄximo das transaçÔes de alta prioridade/baixa taxa em bytes (por defeito: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) OpçÔes SSL: (ver a Wiki Bitcoin para instruçÔes de configuração SSL) @@ -4232,21 +4056,17 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Chave privada do servidor (por defeito: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifras aceitĂĄveus (por defeito: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Quantia invĂĄlida para -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Atenção: -paytxfee estĂĄ definida com um valor muito elevado! Esta Ă© a taxa que irĂĄ pagar se enviar uma transação. - + Invalid amount for -mininput=<amount>: '%s' Quantia invĂĄlida para -mininput=<amount>: '%s' @@ -4256,22 +4076,22 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Inicialização de verificação de sanidade falhou. Gridcoin estĂĄ a encerrar. - + Wallet %s resides outside data directory %s. A carteira %s reside fora da directoria de dados %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. NĂŁo foi possivel cadear a diretoria de dados %s. O Gridcoin jĂĄ estĂĄ provavelmente em execução. - + Verifying database integrity... Verificando integridade da base de dados... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Erro ao iniciar o ambiente da base de dados %s! Para recuperar, GUARDE ESSA DIRETORIA, depois remova tudo, exceto o wallet.dat. @@ -4281,10 +4101,15 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Atenção: wallet.dat corrupto, dados recuperados! wallet.dat original salvo como wallet.{timestamp}.bak em %s; se o seu saldo ou transaçÔes estiverem incorretos, deverĂĄ recuperar uma cĂłpia de segurança. - + Vote Voto + + + Waiting for coins to mature + + Wallet locked; @@ -4301,17 +4126,17 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. wallet.dat corrupta, recuperação falhou - + Unknown -socks proxy version requested: %i VersĂŁo de proxy desconhecida -socks necessĂĄria: %i - + Invalid -tor address: '%s' Endereço -tor invĂĄlido: '%s' - + Cannot resolve -bind address: '%s' NĂŁo foi possivel resolver o endereço -bind: '%s' @@ -4321,15 +4146,10 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. NĂŁo foi possivel resolver o endereço -externalip: '%s' - + Invalid amount for -reservebalance=<amount> Quantia invĂĄlida para - reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - Incapaz de verificar checkpoint, chave de checkpoint errada? - Error loading blkindex.dat @@ -4341,22 +4161,22 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Erro ao carregar wallet.dat: Carteira corrompida - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Atenção: erro ao ler wallet.dat! Todas as chaves foram lidas correctamente, mas dados de transação ou do livro de endereços podem estar em falta ou incorretos. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Erro ao carregar wallet.dat: A carteira necessira de uma versĂŁo mais recente do Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete A carteira precisa de ser reescrita: reinicie o Gridcoin para concluir - + Error loading wallet.dat Erro ao carregar wallet.dat @@ -4376,17 +4196,17 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Erro: NĂŁo possivel começar o nĂłdulo - + Unable to bind to %s on this computer. Gridcoin is probably already running. NĂŁo foi possĂ­vel ligar %s neste computador. O Gridcoin jĂĄ estĂĄ possivelmente a ser executado. - + Unable to bind to %s on this computer (bind returned error %d, %s) Incapaz de vincular a %s neste computador (ligação retornou erro %d, %s) - + Error: Wallet locked, unable to create transaction Erro: Carteira bloqueada, incapaz de criar transação @@ -4396,59 +4216,47 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Erro: Carteira desbloqueada para stake apenas, incapaz de criar transação. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Erro: Esta transação necessita de uma taxa de transação de pelo menos %s devido a esta quantia, complexidade, ou utilização de fundos recebidos recentemente - + Error: Transaction creation failed Erro: Criação de transação fallhou - + Sending... Enviando... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Erro: A transação foi rejeitada. Isto pode acontecer se algumas das moedas na sua carteira jĂĄ tiverem sido gastas, por exemplo se as usou na cĂłpia da sua wallet.dat, mas nĂŁo foram marcadas como gastas aqui. - + Invalid amount Quantia invĂĄlida - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Aviso: Por favor verifique que a data e tempo 's do seu computador estĂŁo corretos! Se o seu relĂłgio estiver incorreto, o Gridcoin nĂŁo funcionarĂĄ bem. - Warning: This version is obsolete, upgrade required! - Atenção: Esta versĂŁo estĂĄ obsoleta, actualização necessĂĄria! - - - WARNING: synchronized checkpoint violation detected, but skipped! - AVISO: violação detetada na sincronização de checkpoint, mas ignorada! - - - + Warning: Disk space is low! Aviso: Pouco disco em espaço! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - AVISO: Checkpoint invĂĄlido encontrado! As transaçÔes mostradas podem nĂŁo ser corretas! Pode necessitar de actualizar ou notificar os desenvolvedorees. - - - + Run in the background as a daemon and accept commands Correr o processo em segundo plano e aceitar comandos - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executar o comando quando uma transação da carteira muda (no comando, %s Ă© substituĂ­do pela Id. da Transação) @@ -4458,12 +4266,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. OpçÔes da criação de bloco: - + Failed to listen on any port. Use -listen=0 if you want this. Falhou a escutar em qualquer porta. Use -listen=0 se quiser isto. - + Specify wallet file (within data directory) Especifique ficheiro de carteira (dentro da pasta de dados) @@ -4488,7 +4296,7 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Palavra-passe para ligaçÔes JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Executar o comando quando o melhor bloco muda (no comando, %s Ă© substituĂ­do pela hash do bloco) @@ -4498,12 +4306,12 @@ Isto significa que uma taxa de pelo menos %2 Ă© necesĂĄria. Permitir procuras DNS para -addnode, -seednode e -connect - + To use the %s option Para usar as %s opçÔes %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4547,12 +4355,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Se o ficheiro nĂŁo existir, crie-o com permissĂ”es de leitura. - + Gridcoin version VersĂŁo do Gridcoin - + Usage: Utilização: @@ -4562,7 +4370,7 @@ Se o ficheiro nĂŁo existir, crie-o com permissĂ”es de leitura. Enviar comando ao -server ou gridcoin - + List commands Listar comandos @@ -4587,12 +4395,12 @@ Se o ficheiro nĂŁo existir, crie-o com permissĂ”es de leitura. Endereço -proxy invĂĄlido: '%s' - + Unknown network specified in -onlynet: '%s' Rede desconhecida especificada em -onlynet: '%s' - + Insufficient funds Fundos insuficientes @@ -4602,17 +4410,17 @@ Se o ficheiro nĂŁo existir, crie-o com permissĂ”es de leitura. A carregar o Ă­ndice de blocos... - + Add a node to connect to and attempt to keep the connection open Adicionar um nĂł para se ligar e tentar manter a ligação aberta - + Loading wallet... A carregar a carteira... - + Cannot downgrade wallet ImpossĂ­vel mudar a carteira para uma versĂŁo anterior @@ -4622,17 +4430,17 @@ Se o ficheiro nĂŁo existir, crie-o com permissĂ”es de leitura. ImpossĂ­vel escrever endereço por defeito - + Rescanning... Reexaminando... - + Done loading Carregamento concluĂ­do - + Error Erro diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts index c375f25802..a7fec5c61b 100644 --- a/src/qt/locale/bitcoin_ro_RO.ts +++ b/src/qt/locale/bitcoin_ro_RO.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Acesta este un software experimental. - -Distribuit sub licen?a MIT/X11, vezi fi?ierul Ăźnso?itor COPYING sau http://www.opensource.org/licenses/mit-license.php. - -Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi folosite Ăźn OpenSSL Toolkit (http://www.openssl.org/) ?i programe criptografice scrise de c?tre Eric Young (eay@cryptsoft.com) ?i programe UPnP scrise de c?tre Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo BitcoinGUI - + Sign &message... Semnează &mesaj... - + &Overview &Imagine de ansamblu @@ -414,7 +400,7 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo Închide aplicaĆŁia - + &Options... &OpĆŁiuni... @@ -428,19 +414,11 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo Encrypt or decrypt wallet Cripteaz? sau decripteaz? portofelul - - &Backup Wallet... - Face o copie de siguranƣă a portofelului... - &Change Passphrase... S&chimbă parola... - - Backup wallet to another location - Creează o copie de rezervă a portofelului Ăźntr-o locaĆŁie diferită - Change the passphrase used for wallet encryption @@ -492,7 +470,7 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo &Verifică mesaj... - + Wallet Portofel @@ -502,7 +480,7 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo Gridcoin - + &Send Trimite @@ -522,28 +500,12 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo Arat? informa?ii despre Gridcoin - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -553,7 +515,7 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo - + &Diagnostics @@ -583,14 +545,14 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo - + [testnet] [testnet] - + Gridcoin client Clientul Gridcoin @@ -600,23 +562,7 @@ Acest produs include programe dezvoltate de c?tre OpenSSL Project pentru a fi fo %1 conexiune activ? la reteaua Gridcoin - %1 second(s) ago - %1 secund? Ăźn urm? - - - %1 minute(s) ago - %1 minut Ăźn urm? - - - %1 hour(s) ago - %1 or? Ăźn urm? - - - %1 day(s) ago - %1 zi Ăźn urm? - - - + Last received block was generated %1. Ultimul bloc primit a fost generat %1. @@ -676,7 +622,7 @@ Adresa: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -723,7 +669,7 @@ Adresa: %4 - + %n second(s) @@ -769,27 +715,37 @@ Adresa: %4 - Not staking because wallet is locked - Nu este in modul stake deoarece portofelul este blocat + + Scraper: waiting on wallet to sync. + - Not staking because wallet is offline - Nu este in modul stake deoarece portofelul este offline + + Scraper: superblock not needed - inactive. + - Not staking because wallet is syncing - Nu este in modul stake deoarece portofelul se sincronizeaza + + Scraper: downloading and processing stats. + - Not staking because you don't have mature coins - Nu este in modul stake deoarece nu sunt destule monede maturate + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + - Not staking - Not staking + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &FiƟier @@ -804,17 +760,12 @@ Adresa: %4 - - &Advanced - - - - + &Help A&jutor - + Processed %n block(s) of transaction history. S-a procesat %n bloc din istoricul tranzacĆŁiilor. @@ -864,12 +815,12 @@ Adresa: %4 Actualizat - + Catching up... Se actualizează... - + Sent transaction TranzacĆŁie expediată @@ -879,19 +830,7 @@ Adresa: %4 TranzacĆŁie recepĆŁionată - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Data: %1 -Suma: %2 -Tipul: %3 -Adresa: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI nu poate fi parsatt! Cauza poate fi o adresa Gridcoin invalid? sau parametrii URI malforma?i. @@ -902,17 +841,13 @@ Adresa: %4 URI handling Manipulare URI - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Portofelul este <b>criptat</b> iar Ăźn momentul de faƣă este <b>deblocat</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Portofelul este <b>criptat</b> iar Ăźn momentul de faƣă este <b>blocat</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. A ap?rut o eroare fatal?. Gridcoin nu mai poate continua Ăźn condi?ii de siguran?? ?i va iesi. @@ -920,7 +855,7 @@ Adresa: %4 ClientModel - + Network Alert Alert? re?ea @@ -1002,10 +937,6 @@ Adresa: %4 (un)select all (de)selectare tot - - List mode - Mod listă - Amount @@ -1385,7 +1316,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? NewPollDialog - + Create Poll @@ -1598,10 +1529,6 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Map port using &UPnP Mapare port folosind &UPnP - - Proxy &IP: - Proxy &IP: - &Port: @@ -1835,6 +1762,14 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Nu este sincronizat + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1896,7 +1831,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? RPCConsole - + @@ -1908,7 +1843,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + N/A indisponibil @@ -1988,7 +1923,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? IeƟire: - + + &Scraper + + + + Debug log file FiƟier jurnal depanare @@ -2018,7 +1958,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? ScrieĆŁi <b>help</b> pentru a vedea comenzile disponibile. - + %1 B %1 B @@ -2053,12 +1993,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + Gridcoin - Debug Console - + Boost version @@ -2128,7 +2068,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Nume client - + Welcome to the Gridcoin RPC console! @@ -2395,22 +2335,22 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? SendCoinsEntry - + A&mount: Su&mă: - + Pay &To: PlăteƟte că&tre: - + &Label: &Etichetă: - + Alt+A Alt+A @@ -2430,12 +2370,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Mesaj: - + Form Formular - + Enter a label for this address to add it to your address book Introdu o etichet? pentru aceast? adres? pentru a fi ad?ugat? Ăźn lista ta de adrese @@ -2456,17 +2396,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Scoateti acest destinatar - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2717,26 +2652,47 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + Source Sursa - Generated - Generat + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From De la @@ -2851,27 +2807,11 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Transaction Inputs - - Transaction ID - ID-ul tranzactiei - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformaĆŁie - - - Transaction - Tranzac?ie - - - Inputs - Intrari - Amount @@ -2901,12 +2841,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Acest panou arată o descriere detaliată a tranzacĆŁiei - - View Attachment - - - - + Execute Contract @@ -2915,21 +2850,11 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? C&lose Închide - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -3003,7 +2928,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Generat dar neacceptat - + Received with Recep?ionat cu @@ -3023,32 +2948,42 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Plat? c?tre tine - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Starea tranzac?iei. Treci cu mausul peste acest cĂąmp pentru afi?area num?rului de confirm?ri. @@ -3242,17 +3177,10 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? c?tre - - UpgradeDialog - - Hide - Ascunde - - VotingChartDialog - + Poll Results @@ -3396,7 +3324,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? VotingVoteDialog - + PlaceVote @@ -3429,7 +3357,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? WalletModel - + Sending... Se trimite... @@ -3437,12 +3365,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? bitcoin-core - + Options: OpĆŁiuni: - + This help message Acest mesaj de ajutor @@ -3472,12 +3400,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Specific? intervalul maxim de conectare Ăźn milisecunde (implicit: 5000) - + Connect through socks proxy Conecteaz?-te printr-un proxy socks - + Select the version of socks proxy to use (4-5, default: 5) Selectati versiunea de proxy socks(4-5, implicit: 5) @@ -3487,7 +3415,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Utilizati proxy pentru a ajunge la serviciile tor (implicit: la fel ca proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Ascult? pentru conect?ri pe <port> (implicit: 15714 sau testnet: 25714) {32749 ?} {32748)?} @@ -3497,7 +3425,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Men?ine cel mult <n> conexiuni cu partenerii (implicit: 125) - + Connect only to the specified node(s) Conecteaza-te doar la nod(urile) specifice @@ -3507,26 +3435,22 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Se conectează la un nod pentru a obĆŁine adresele partenerilor, Ɵi apoi se deconectează - + Specify your own public address SpecificaĆŁi adresa dvs. publică - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Efectueaz? conexiuni doar c?tre nodurile din re?eaua <net> (IPv4, IPv6 sau Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Descopera propria ta adresa IP (intial: 1) - Find peers using internet relay chat (default: 0) - Gaseste noduri fosoling irc (implicit: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Accept? conexiuni din afar? (implicit: 1 dac? nu se folose?te -proxy sau -connect) @@ -3536,26 +3460,22 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Leaga la o adresa data. Utilizeaza notatie [host]:port pt IPv6 - + Find peers using DNS lookup (default: 1) Gaseste peers folosind cautare DNS(implicit: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sincronizeaz? timp cu alte noduri. Dezactiveaz? daca timpul de pe sistemul dumneavoastr? este precis ex: sincronizare cu NTP (implicit: 1) - Sync checkpoints policy (default: strict) - Sincronizeaza politica checkpoint(implicit: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) Prag pentru deconectarea partenerilor care nu func?ioneaz? corect (implicit: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Num?rul de secunde pentru a preveni reconectarea partenerilor care nu func?ioneaz? corect (implicit: 86400) @@ -3650,6 +3570,16 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3710,6 +3640,11 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? ERROR + + + Entire balance reserved + + Expires @@ -3775,11 +3710,6 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Message Mesaj - - - Messate Type - - Miner: @@ -3816,12 +3746,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - - No coins; - - - - + Offline; @@ -3831,12 +3756,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3916,12 +3836,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Foloseste UPnP pentru a vedea porturile (initial: 0) - + Fee per KB to add to transactions you send Comision pe kB de adaugat la tranzactiile pe care le trimiti - + When creating transactions, ignore inputs with value less than this (default: 0.01) CĂąnd crea?i tranzac?ii, ignora?i intr?ri cu valori mai mici decĂąt aceasta (implicit: 0,01) @@ -3931,7 +3851,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Acceptă comenzi din linia de comandă Ɵi comenzi JSON-RPC - + Run in the background as a daemon and accept commands Rulează Ăźn fundal ca un demon Ɵi acceptă comenzi @@ -3941,7 +3861,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Utilizeaz? re?eaua de test - + Output extra debugging information. Implies all other -debug* options Extra informatii despre depanare. Implica toate optiunile -debug* @@ -3951,7 +3871,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Extra informatii despre depanare retea. - + Prepend debug output with timestamp Ataseaza output depanare cu log de timp @@ -3961,7 +3881,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Trimite informa?iile trace/debug la consol? - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Ascult? pentru conexiuni JSON-RPC pe <port> (implicit:15715 sau testnet: 25715) @@ -3971,7 +3891,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Permite conexiuni JSON-RPC de la adresa IP specificat? - + Send commands to node running on <ip> (default: 127.0.0.1) Trimite comenzi la nodul care ruleaz? la <ip> (implicit: 127.0.0.1) @@ -3981,7 +3901,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Necesita confirmari pentru schimbare (implicit: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Enforseaza tranzactiile script sa foloseasca operatori canonici PUSH(implicit: 1) @@ -3991,7 +3911,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Execut? o comand? cĂąnd o alerta relevantĂą este primitĂą(%s in cmd este Ăźnlocuit de mesaj) - + Upgrade wallet to latest format Actualizeaz? portofelul la ultimul format @@ -4006,7 +3926,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Rescaneaz? lan?ul de bloc pentru tranzac?iile portofel lips? - + Attempt to recover private keys from a corrupt wallet.dat Încearc? recuperarea cheilor private dintr-un wallet.dat corupt @@ -4026,7 +3946,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + Boinc Mining @@ -4036,7 +3956,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + Error obtaining next project. Error 06172014. @@ -4086,12 +4006,32 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4106,12 +4046,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Seteaz? m?rimea maxima a blocului Ăźn bytes (implicit: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Setati valoarea maxima a prioritate mare/taxa scazuta in bytes(implicit: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) Optiuni SSl (vezi Bitcoin wiki pentru intructiunile de instalare) @@ -4131,21 +4071,17 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Cheia privat? a serverului (implicit: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifruri acceptabile (implicit: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Suma nevalid? pentru -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Atentie: setarea -paytxfee este foarte ridicata! Aceasta este taxa tranzactiei pe care o vei plati daca trimiti o tranzactie. - + Invalid amount for -mininput=<amount>: '%s' Suma invalida pentru -mininput=<amount>: '%s' @@ -4155,22 +4091,22 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? - + Wallet %s resides outside data directory %s. Portofelul %s este in afara directorului %s - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Nu se poate obtine un lock pe directorul de date &s. Blackoin probabil ruleaza deja. - + Verifying database integrity... Se verifica integritatea bazei de date... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Eroare la ini?ializarea mediu de baze de date %s! Pentru a recupera, SALVATI ACEL DIRECTORr, apoi scoate?i totul din el, cu excep?ia wallet.dat. @@ -4180,10 +4116,15 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Atentie: fisierul wallet.dat este corupt, date salvate! Fisierul original wallet.dat a fost salvat ca wallet.{timestamp}.bak in %s; daca balansul sau tranzactiile sunt incorecte ar trebui sa restaurati dintr-o copie de siguranta. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4200,17 +4141,17 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? wallet.dat corupt, recuperare e?uat? - + Unknown -socks proxy version requested: %i S-a cerut o versiune necunoscut? de proxy -socks: %i - + Invalid -tor address: '%s' Adresa -tor invalida: '%s' - + Cannot resolve -bind address: '%s' Nu se poate rezolva adresa -bind: '%s' @@ -4220,16 +4161,10 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Nu se poate rezolva adresa -externalip: '%s' - + Invalid amount for -reservebalance=<amount> Suma invalida pentru -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - În imposibilitatea de a semna checkpoint-ul, checkpointkey gre?it? - - Error loading blkindex.dat @@ -4241,22 +4176,22 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Eroare la Ăźnc?rcarea wallet.dat: Portofel corupt - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Atentie: eroare la citirea fisierului wallet.dat! Toate cheile sunt citite corect, dar datele tranzactiei sau anumite intrari din agenda sunt incorecte sau lipsesc. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Eroare la Ăźnc?rcarea wallet.dat: Portofelul necesita o versiune mai noua de Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete A fost nevoie de rescrierea portofelului: restarta?i Gridcoin pentru a finaliza - + Error loading wallet.dat Eroare la Ăźnc?rcarea wallet.dat @@ -4276,17 +4211,17 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Eroare: nodul nu a putut fi pornit - + Unable to bind to %s on this computer. Gridcoin is probably already running. Imposibil de conectat %s pe acest computer. Cel mai probabil Gridcoin ruleaza - + Unable to bind to %s on this computer (bind returned error %d, %s) Nu se poate folosi %s pe acest calculator (eroarea returnat? este %d, %s) - + Error: Wallet locked, unable to create transaction Eroare: portofel blocat, tranzactia nu s-a creat @@ -4296,54 +4231,42 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Eroare: portofel blocat doar pentru staking, tranzactia nu s-a creat. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Eroare: Aceast? tranzac?ie necesit? un comision de tranzac?ie de cel pu?in %s din cauza valorii sale, complexitate, sau utilizarea de fonduri recent primite - + Error: Transaction creation failed Eroare: crearea tranzac?iei a e?uat. - + Sending... Se trimite... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Eroare: tranzac?ia a fost respins?. Acest lucru s-ar putea ĂźntĂąmpla Ăźn cazul Ăźn care unele dintre monedele din portofel au fost deja cheltuite, cum si cum a?i utilizat o copie a wallet.dat ?i monedele au fost cheltuite Ăźn copie dar nu au fost marcate ca ?i cheltuite aici. - + Invalid amount Sum? nevalid? - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Atentie: Va rugam verificati ca timpul si data calculatorului sunt corete. Daca timpul este gresit Gridcoin nu va functiona corect. - Warning: This version is obsolete, upgrade required! - Aten?ie: aceast? versiune este dep??it?, este necesar? actualizarea! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ATENTIONARE: s-a detectat o violare a checkpoint-ului sincronizat, dar s-a ignorat! - - - + Warning: Disk space is low! Avertisment: spa?iul pe disc este sc?zut! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ATENTIONARE: checkpoint invalid! Trazatiile afisate pot fi incorecte! Posibil s? ave?i nevoie s? face?i upgrade, sau s? notificati dezvoltatorii. - - - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Execută comanda cĂźnd o tranzacĆŁie a portofelului se schimbă (%s Ăźn cmd este Ăźnlocuit de TxID) @@ -4353,12 +4276,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? OpĆŁiuni creare bloc: - + Failed to listen on any port. Use -listen=0 if you want this. Nu s-a reuƟit ascultarea pe orice port. FolosiĆŁi -listen=0 dacă vreĆŁi asta. - + Specify configuration file (default: gridcoinresearch.conf) @@ -4388,7 +4311,7 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Parola pentru conexiunile JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Execută comanda cĂźnd cel mai bun bloc se modifică (%s Ăźn cmd este Ăźnlocuit cu hash-ul blocului) @@ -4398,12 +4321,12 @@ Acest lucru Ăźnseamn? c? o tax? de cel pu?in %2 este necesar? Permite căutări DNS pentru -addnode, -seednode Ɵi -connect - + To use the %s option Pentru a folosi op?iunea %s - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4437,12 +4360,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Dac? fi?ierul nu exist?, creeaz?-l cu permisiuni de citire doar de c?tre proprietar. - + Gridcoin version Versiune Gridcoin - + Usage: Uz: @@ -4452,7 +4375,7 @@ Dac? fi?ierul nu exist?, creeaz?-l cu permisiuni de citire doar de c?tre proprie - + List commands List? de comenzi @@ -4477,12 +4400,12 @@ Dac? fi?ierul nu exist?, creeaz?-l cu permisiuni de citire doar de c?tre proprie Adresa -proxy nevalidă: '%s' - + Unknown network specified in -onlynet: '%s' ReĆŁeaua specificată Ăźn -onlynet este necunoscută: '%s' - + Insufficient funds Fonduri insuficiente @@ -4492,17 +4415,17 @@ Dac? fi?ierul nu exist?, creeaz?-l cu permisiuni de citire doar de c?tre proprie Încărcare index bloc... - + Add a node to connect to and attempt to keep the connection open Adaugă un nod la care te poĆŁi conecta pentru a menĆŁine conexiunea deschisă - + Loading wallet... Încărcare portofel... - + Cannot downgrade wallet Nu se poate retrograda portofelul @@ -4512,17 +4435,17 @@ Dac? fi?ierul nu exist?, creeaz?-l cu permisiuni de citire doar de c?tre proprie Nu se poate scrie adresa implicită - + Rescanning... Rescanare... - + Done loading Încărcare terminată - + Error Eroare diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index 16eb499987..6a05544a61 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -24,21 +24,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Đ­Ń‚ĐŸ эĐșŃĐżĐ”Ń€ĐžĐŒĐ”ĐœŃ‚Đ°Đ»ŃŒĐœĐŸĐ” ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐœĐŸĐ” ĐŸĐ±Đ”ŃĐżĐ”Ń‡Đ”ĐœĐžĐ”. - -Đ Đ°ŃĐżŃ€ĐŸŃŃ‚Ń€Đ°ĐœŃĐ”Ń‚ŃŃ ĐČ ŃĐŸĐŸŃ‚ĐČДтстĐČОО с Đ»ĐžŃ†Đ”ĐœĐ·ĐžĐ”Đč ĐœĐ° ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐœĐŸĐ” ĐŸĐ±Đ”ŃĐżĐ”Ń‡Đ”ĐœĐžĐ” MIT / X11, ŃĐŒ. ĐĄĐŸĐżŃ€ĐŸĐČĐŸĐŽĐžŃ‚Đ”Đ»ŃŒĐœŃ‹Đč фаĐčĐ» COPYING ОлО http://www.opensource.org/licenses/mit-license.php. - -Đ­Ń‚ĐŸŃ‚ ĐżŃ€ĐŸĐŽŃƒĐșт ĐČĐșлючаДт ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐœĐŸĐ” ĐŸĐ±Đ”ŃĐżĐ”Ń‡Đ”ĐœĐžĐ”, Ń€Đ°Đ·Ń€Đ°Đ±ĐŸŃ‚Đ°ĐœĐœĐŸĐ” OpenSSL Project ĐŽĐ»Ń ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°ĐœĐžŃ ĐČ OpenSSL Toolkit (http://www.openssl.org/) Đž ĐșŃ€ĐžĐżŃ‚ĐŸĐłŃ€Đ°Ń„ĐžŃ‡Đ”ŃĐșĐŸĐŒ ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐœĐŸĐŒ ĐŸĐ±Đ”ŃĐżĐ”Ń‡Đ”ĐœĐžĐž, ĐœĐ°ĐżĐžŃĐ°ĐœĐœĐŸĐŒ ЭроĐșĐŸĐŒ ĐŻĐœĐŸĐŒ (eay@cryptsoft.com) Đž ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐœŃ‹ĐŒ ĐŸĐ±Đ”ŃĐżĐ”Ń‡Đ”ĐœĐžĐ”ĐŒ UPnP, ĐœĐ°ĐżĐžŃĐ°ĐœĐœŃ‹ĐŒ ĐąĐŸĐŒĐ°ŃĐŸĐŒ Đ‘Đ”Ń€ĐœĐ°Ń€ĐŽĐŸĐŒ. - - AddressBookPage @@ -315,12 +300,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... &ĐŸĐŸĐŽĐżĐžŃĐ°Ń‚ŃŒ ŃĐŸĐŸĐ±Ń‰Đ”ĐœĐžĐ”... - + &Overview &ĐžĐ±Đ·ĐŸŃ€ @@ -416,7 +401,7 @@ This product includes software developed by the OpenSSL Project for use in the O ЗаĐșрыть ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” - + &Options... &ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Ń‹ @@ -431,7 +416,7 @@ This product includes software developed by the OpenSSL Project for use in the O Đ—Đ°ŃˆĐžŃ„Ń€ĐŸĐČать ОлО Ń€Đ°ŃŃˆĐžŃ„Ń€ĐŸĐČыĐČать Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐș - + %n second(s) ago %n сДĐșŃƒĐœĐŽ ĐœĐ°Đ·Đ°ĐŽ @@ -467,7 +452,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -482,7 +467,7 @@ Address: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -492,17 +477,39 @@ Address: %4 - &Backup Wallet... - &ĐĄĐŽĐ”Đ»Đ°Ń‚ŃŒ рДзДрĐČĐœŃƒŃŽ ĐșĐŸĐżĐžŃŽ Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ°... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Đ˜Đ·ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐżĐ°Ń€ĐŸĐ»ŃŒ... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + - Backup wallet to another location - ĐĄĐŽĐ”Đ»Đ°Ń‚ŃŒ рДзДрĐČĐœŃƒŃŽ ĐșĐŸĐżĐžŃŽ Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ° ĐČ ĐŽŃ€ŃƒĐłĐŸĐŒ ĐŒĐ”ŃŃ‚Đ” + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Đ˜Đ·ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐżĐ°Ń€ĐŸĐ»ŃŒ... @@ -555,7 +562,7 @@ Address: %4 &ĐŸŃ€ĐŸĐČĐ”Ń€ĐžŃ‚ŃŒ ŃĐŸĐŸĐ±Ń‰Đ”ĐœĐžĐ”... - + Wallet Đ‘ŃƒĐŒĐ°Đ¶ĐœĐžĐș @@ -565,7 +572,7 @@ Address: %4 Gridcoin - + &Send &ОтпраĐČоть @@ -574,30 +581,6 @@ Address: %4 &Receive &ĐŸĐŸĐ»ŃƒŃ‡ĐžŃ‚ŃŒ - - &Rebuild Block Chain - &ĐŸĐ”Ń€Đ”ŃŃ‚Ń€ĐŸĐžŃ‚ŃŒ Đ±Đ»ĐŸĐșчДĐčĐœ - - - Rebuild Block Chain - ĐŸĐ”Ń€Đ”ŃŃ‚Ń€ĐŸĐžŃ‚ŃŒ Đ±Đ»ĐŸĐșчДĐčĐœ - - - &Download Blocks - &Đ—Đ°ĐłŃ€ŃƒĐ·ĐžŃ‚ŃŒ Đ±Đ»ĐŸĐșĐž - - - Download Blocks - Đ—Đ°ĐłŃ€ŃƒĐ·ĐžŃ‚ŃŒ Đ±Đ»ĐŸĐșĐž - - - &Upgrade Client - &ĐžĐ±ĐœĐŸĐČоть ĐșĐ»ĐžĐ”ĐœŃ‚ - - - Upgrade Client - ĐžĐ±ĐœĐŸĐČоть ĐșĐ»ĐžĐ”ĐœŃ‚ - &About Gridcoin @@ -609,36 +592,12 @@ Address: %4 Đ˜ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ ĐŸ Gridcoin - - &Neural Network - &ĐĐ”ĐčŃ€ĐŸĐœĐœĐ°Ń ĐĄĐ”Ń‚ŃŒ - - - - Neural Network - ĐĐ”ĐčŃ€ĐŸĐœĐœĐ°Ń ĐĄĐ”Ń‚ŃŒ - - - &Advanced Configuration - &Đ”ĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœĐ°Ń ĐšĐŸĐœŃ„ĐžĐłŃƒŃ€Đ°Ń†ĐžŃ - - - Advanced Configuration - Đ”ĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœĐ°Ń ĐšĐŸĐœŃ„ĐžĐłŃƒŃ€Đ°Ń†ĐžŃ - - - - &New User Wizard - &ĐœĐ°ŃŃ‚Đ”Ń€ ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž ĐœĐŸĐČĐŸĐłĐŸ ĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°Ń‚Đ”Đ»Ń - - - - + New User Wizard ĐœĐ°ŃŃ‚Đ”Ń€ ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž ĐœĐŸĐČĐŸĐłĐŸ ĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°Ń‚Đ”Đ»Ń - + &Voting &Đ“ĐŸĐ»ĐŸŃĐŸĐČĐ°ĐœĐžĐ” @@ -648,15 +607,7 @@ Address: %4 Đ“ĐŸĐ»ĐŸŃĐŸĐČĐ°ĐœĐžĐ” - &Foundation - &ĐžŃ€ĐłĐ°ĐœĐžĐ·Đ°Ń†ĐžŃ - - - Foundation - ĐžŃ€ĐłĐ°ĐœĐžĐ·Đ°Ń†ĐžŃ - - - + &Diagnostics &Đ”ĐžĐ°ĐłĐœĐŸŃŃ‚ĐžĐșĐ° @@ -665,14 +616,6 @@ Address: %4 Diagnostics Đ”ĐžĐ°ĐłĐœĐŸŃŃ‚ĐžĐșĐ° - - FA&Q - FA&Q - - - Interactive FAQ - Đ˜ĐœŃ‚Đ”Ń€Đ°ĐșтоĐČĐœŃ‹Đč FAQ - Modify configuration options for Gridcoin @@ -694,14 +637,14 @@ Address: %4 - + [testnet] [Ń‚Đ”ŃŃ‚ĐŸĐČая ŃĐ”Ń‚ŃŒ] - + Gridcoin client Gridcoin ĐșĐ»ĐžĐ”ĐœŃ‚ @@ -711,23 +654,7 @@ Address: %4 %1 АĐșтоĐČĐœŃ‹Đ” ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžŃ ĐČ ŃĐ”Ń‚Đž Gridcoin - %1 second(s) ago - %1 сДĐșŃƒĐœĐŽ ĐœĐ°Đ·Đ°ĐŽ - - - %1 minute(s) ago - %1 ĐŒĐžĐœŃƒŃ‚ ĐœĐ°Đ·Đ°ĐŽ - - - %1 hour(s) ago - %1 Ń‡Đ°ŃĐŸĐČ ĐœĐ°Đ·Đ°ĐŽ - - - %1 day(s) ago - %1 Đ”ĐœĐ”Đč ĐœĐ°Đ·Đ°ĐŽ - - - + Last received block was generated %1. ĐŸĐŸŃĐ»Đ”ĐŽĐœĐžĐč ĐżĐŸĐ»ŃƒŃ‡Đ”ĐœĐœŃ‹Đč Đ±Đ»ĐŸĐș был ŃĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČĐ°Đœ %1. @@ -772,19 +699,7 @@ Address: %4 Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”! - Boinc ĐžŃˆĐžĐ±ĐșĐ° путо! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Дата: %1 -ĐĄŃƒĐŒĐŒĐ°: %2 -йОп: %3 -АЎрДс: %4 - - - - + URI handling ĐžĐ±Ń€Đ°Đ±ĐŸŃ‚ĐșĐ° URI @@ -843,7 +758,7 @@ Address: %4 - + %n second(s) %n сДĐșŃƒĐœĐŽĐ° @@ -879,39 +794,7 @@ Address: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł.<br> Ваша Đ·ĐœĐ°Ń‡ĐžĐŒĐŸŃŃ‚ŃŒ %1<br>ĐĄĐ”Ń‚ŃŒ %2<br><b>ĐŁŃŃ‚Đ°ĐœĐŸĐČĐ»Đ”ĐœĐŸĐ”</b> ĐČŃ€Đ”ĐŒŃ ĐŽĐŸ ĐœĐ°ĐłŃ€Đ°ĐŽŃ‹ %3. %4 - - - Not staking because wallet is locked - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČŃƒĐ”Ń‚, ĐżĐŸ ĐżŃ€ĐžŃ‡ĐžĐœĐ” Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐșĐž ĐșĐŸŃˆĐ”Đ»ŃŒĐșĐ° - - - Not staking because wallet is offline - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČŃƒĐ”Ń‚, ĐșĐŸŃˆĐ”Đ»Đ”Đș ĐŸŃ‚ĐșĐ»ŃŽŃ‡Đ”Đœ ĐŸŃ‚ сДтО - - - Not staking because wallet is syncing - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČŃƒĐ”Ń‚, таĐș ĐșĐ°Đș ОЎДт ŃĐžĐœŃ…Ń€ĐŸĐœĐžĐ·Đ°Ń†ĐžŃ ĐșĐŸŃˆĐ”Đ»ŃŒĐșĐ° - - - Not staking because you don't have mature coins and stake weight is too low. - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČŃƒĐ”Ń‚, ĐżĐŸŃ‚ĐŸĐŒŃƒ Ń‡Ń‚ĐŸ у ĐČас ĐœĐ”Ń‚ ŃŃ„ĐŸŃ€ĐŒĐžŃ€ĐŸĐČĐ°ĐČшохся срДЎстĐČ ĐŽĐ»Ń ŃŃ‚ĐŸĐłĐŸ, Đ° стаĐČĐșĐ° слОшĐșĐŸĐŒ ĐŒĐ°Đ»Đ°. - - - Not staking because you don't have mature coins - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČŃƒĐ”Ń‚, ĐżĐŸ ĐżŃ€ĐžŃ‡ĐžĐœĐ” ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČоя ĐŒĐŸĐœĐ”Ń‚ - - - Searching for mature coins... Please wait - ĐŸĐŸĐžŃĐș ĐŒĐŸĐœĐ”Ń‚... ĐŸĐŸĐ¶Đ°Đ»ŃƒĐčста ĐżĐŸĐŽĐŸĐ¶ĐŽĐžŃ‚Đ” - - - Not staking - ĐĄŃ‚Đ”ĐčĐșĐžĐœĐł ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČŃƒĐ”Ń‚ - - - + &File &ЀаĐčĐ» @@ -926,17 +809,12 @@ Address: %4 &ĐšĐŸĐŒŃŒŃŽĐœĐžŃ‚Đž - - &Advanced - &Đ”ĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœĐŸ - - - + &Help &ĐŸĐŸĐŒĐŸŃ‰ŃŒ - + Processed %n block(s) of transaction history. ĐžĐ±Ń€Đ°Đ±ĐŸŃ‚Đ°Đœ %n Đ±Đ»ĐŸĐș ĐžŃŃ‚ĐŸŃ€ĐžĐž Ń‚Ń€Đ°ĐœĐ·Đ°ĐșцоĐč. @@ -950,12 +828,12 @@ Address: %4 ĐĄĐžĐœŃ…Ń€ĐŸĐœĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐŸ - + Catching up... ĐĄĐžĐœŃ…Ń€ĐŸĐœĐžĐ·ĐžŃ€ŃƒĐ”Ń‚ŃŃ... - + Sent transaction Đ˜ŃŃ…ĐŸĐŽŃŃ‰Đ°Ń Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя @@ -965,16 +843,12 @@ Address: %4 Đ’Ń…ĐŸĐŽŃŃ‰Đ°Ń Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Đ‘ŃƒĐŒĐ°Đ¶ĐœĐžĐș <b>Đ·Đ°ŃˆĐžŃ„Ń€ĐŸĐČĐ°Đœ</b> Đž ĐČ ĐœĐ°ŃŃ‚ĐŸŃŃ‰Đ”Đ” ĐČŃ€Đ”ĐŒŃ <b>Ń€Đ°Đ·Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐ°Đœ</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Đ‘ŃƒĐŒĐ°Đ¶ĐœĐžĐș <b>Đ·Đ°ŃˆĐžŃ„Ń€ĐŸĐČĐ°Đœ</b> Đž ĐČ ĐœĐ°ŃŃ‚ĐŸŃŃ‰Đ”Đ” ĐČŃ€Đ”ĐŒŃ <b>Đ·Đ°Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐ°Đœ</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. ĐŸŃ€ĐŸĐžĐ·ĐŸŃˆĐ»Đ° ĐœĐ”ĐžŃĐżŃ€Đ°ĐČĐžĐŒĐ°Ń ĐŸŃˆĐžĐ±ĐșĐ°. Gridcoin ĐœĐ” ĐŒĐŸĐ¶Đ”Ń‚ Đ±Đ”Đ·ĐŸĐżĐ°ŃĐœĐŸ ĐżŃ€ĐŸĐŽĐŸĐ»Đ¶Đ°Ń‚ŃŒ Ń€Đ°Đ±ĐŸŃ‚Ńƒ Đž Đ±ŃƒĐŽĐ”Ń‚ Đ·Đ°Đșрыт. @@ -982,7 +856,7 @@ Address: %4 ClientModel - + Network Alert ХДтДĐČая йрДĐČĐŸĐłĐ° @@ -1064,10 +938,6 @@ Address: %4 (un)select all ĐžŃ‚ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐČŃ‹Đ±ĐŸŃ€ ĐČŃĐ”ĐłĐŸ - - List mode - Đ Đ”Đ¶ĐžĐŒ спОсĐșĐ° - Amount @@ -1448,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll ĐĄĐŸĐ·ĐŽĐ°Ń‚ŃŒ ĐŸĐżŃ€ĐŸŃ @@ -1661,10 +1531,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP ĐŸŃ€ĐŸĐ±Ń€ĐŸŃĐžŃ‚ŃŒ ĐżĐŸŃ€Ń‚ чДрДз &UPnP - - Proxy &IP: - &IP ĐŸŃ€ĐŸĐșсО: - &Port: @@ -1831,10 +1697,6 @@ This label turns red, if the priority is smaller than "medium". Error Messages: - - DPOR Weight: - DPOR Đ’Đ»ĐžŃĐœĐžĐ”: - Magnitude: @@ -1860,10 +1722,6 @@ This label turns red, if the priority is smaller than "medium". Current Poll: йДĐșущоĐč ĐžĐżŃ€ĐŸŃ: - - Client Messages: - ĐĄĐŸĐŸĐ±Ń‰Đ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃ‚Đ°: - Available: @@ -1906,6 +1764,14 @@ This label turns red, if the priority is smaller than "medium". ĐœĐ” ŃĐžĐœŃ…Ń€ĐŸĐœĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐŸ + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1972,7 +1838,7 @@ This label turns red, if the priority is smaller than "medium". Gridcoin - ĐšĐŸĐœŃĐŸĐ»ŃŒ ĐŸŃ‚Đ»Đ°ĐŽĐșĐž - + Boost version Boost ĐČĐ”Ń€ŃĐžŃ @@ -1989,7 +1855,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A Н/Д @@ -2134,7 +2000,12 @@ This label turns red, if the priority is smaller than "medium". Đ’Ń‹Ń…ĐŸĐŽ: - + + &Scraper + + + + Debug log file ĐžŃ‚Đ»Đ°ĐŽĐŸŃ‡ĐœŃ‹Đč Đ»ĐŸĐł-фаĐčĐ» @@ -2164,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". ĐĐ°ĐżĐžŃˆĐžŃ‚Đ” <b>help</b> ĐŽĐ»Ń ĐżŃ€ĐŸŃĐŒĐŸŃ‚Ń€Đ° ĐŽĐŸŃŃ‚ŃƒĐżĐœŃ‹Ń… ĐșĐŸĐŒĐ°ĐœĐŽ. - + %1 B %1 Б @@ -2199,7 +2070,7 @@ This label turns red, if the priority is smaller than "medium". %1 ч %2 ĐŒĐžĐœ - + Welcome to the Gridcoin RPC console! Đ”ĐŸĐ±Ń€ĐŸ ĐżĐŸĐ¶Đ°Đ»ĐŸĐČать ĐČ Gridcoin RPC ĐșĐŸĐœŃĐŸĐ»ŃŒ! @@ -2466,27 +2337,27 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: ĐšĐŸ&лОчДстĐČĐŸ: - + Pay &To: ĐŸĐŸĐ»Ńƒ&Ń‡Đ°Ń‚Đ”Đ»ŃŒ: - + Form Đ€ĐŸŃ€ĐŒĐ° - + &Label: &ĐœĐ”Ń‚ĐșĐ°: - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) АЎрДс ĐżĐŸĐ»ŃƒŃ‡Đ°Ń‚Đ”Đ»Ń (ĐœĐ°ĐżŃ€ĐžĐŒĐ”Ń€ Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2501,21 +2372,12 @@ This label turns red, if the priority is smaller than "medium". ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ ĐżĐŸĐ»ŃƒŃ‡Đ°Ń‚Đ”Đ»Ń - + Send Custom Message to a Gridcoin Recipient ОтпраĐČоть рДЎаĐșŃ‚ĐžŃ€ŃƒĐ”ĐŒĐŸĐ” ŃĐŸĐŸĐ±Ń‰Đ”ĐœĐžĐ” ĐżĐŸĐ»ŃƒŃ‡Đ°Ń‚Đ”Đ»ŃŽ Gridcoin - Track Coins - йрДĐșĐžĐœĐł срДЎстĐČ - - - - Add Attachment - Đ”ĐŸĐ±Đ°ĐČоть ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” - - - + Alt+A Alt+A @@ -2792,49 +2654,58 @@ This label turns red, if the priority is smaller than "medium". - + Source Đ˜ŃŃ‚ĐŸŃ‡ĐœĐžĐș - Generated - ĐĄĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČĐ°ĐœĐœĐŸ - - - + From От - Block Type - йОп Đ±Đ»ĐŸĐșĐ° + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + ĐĄĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹Đ” гроЮĐșĐŸĐčĐœ-ĐŒĐŸĐœĐ”Ń‚Ń‹ ĐŽĐŸĐ»Đ¶ĐœŃ‹ ŃĐŸĐ·Ń€Đ”Ń‚ŃŒ ĐŽĐŸ Đ·ĐœĐ°Ń‡Đ”ĐœĐžŃ ĐČ 110 Đ±Đ»ĐŸĐșĐŸĐČ, прДжЎД Ń‡Đ”ĐŒ ох ĐŒĐŸĐ¶ĐœĐŸ Đ±ŃƒĐŽĐ”Ń‚ ĐżĐŸŃ‚Ń€Đ°Ń‚ĐžŃ‚ŃŒ. ĐšĐŸĐłĐŽĐ° ĐČы ŃĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČалО Đ±Đ»ĐŸĐș, ĐŸĐœ Đ±ŃƒĐŽĐ”Ń‚ ĐżĐ”Ń€Đ”ĐŽĐ°Đœ ĐČ ŃĐ”Ń‚ŃŒ ĐŽĐ»Ń ĐŽĐŸĐ±Đ°ĐČĐ»Đ”ĐœĐžŃ ĐČ Ń†Đ”ĐżĐŸŃ‡Đșу Đ±Đ»ĐŸĐșĐŸĐČ. ЕслО ĐŸĐœ ĐœĐ” ŃĐŒĐŸĐ¶Đ”Ń‚ ĐżĐŸĐżĐ°ŃŃ‚ŃŒ ĐČ Ń†Đ”ĐżĐŸŃ‡Đșу, Đ”ĐłĐŸ ŃĐŸŃŃ‚ĐŸŃĐœĐžĐ” ĐžĐ·ĐŒĐ”ĐœĐžŃ‚ŃŃ ĐœĐ° Â«ĐœĐ” ĐżŃ€ĐžĐœŃŃ‚ĐŸÂ», ĐČ Ń‚Đ°ĐșĐŸĐŒ ŃĐ»ŃƒŃ‡Đ°Đ” ĐČы ĐœĐ” ŃĐŒĐŸĐ¶Đ”Ń‚Đ” ĐżĐŸŃ‚Ń€Đ°Ń‚ĐžŃ‚ŃŒ ĐŒĐŸĐœĐ”Ń‚Ń‹. Đ­Ń‚ĐŸ ĐŒĐŸĐ¶Đ”Ń‚ ĐżŃ€ĐŸĐžĐ·ĐŸĐčто, ДслО ĐŽŃ€ŃƒĐłĐŸĐč узДл ĐłĐ”ĐœĐ”Ń€ĐžŃ€ŃƒĐ”Ń‚ Đ±Đ»ĐŸĐș ĐČ Ń‚Đ”Ń‡Đ”ĐœĐžĐ” ĐœĐ”ŃĐșĐŸĐ»ŃŒĐșох сДĐșŃƒĐœĐŽ ĐżĐŸŃĐ»Đ” ĐČĐ°ŃˆĐ”ĐłĐŸ. - Block Number - ĐĐŸĐŒĐ”Ń€ Đ±Đ»ĐŸĐșĐ° + + Generated in CoinBase + - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - ĐĄĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹Đ” гроЮĐșĐŸĐčĐœ-ĐŒĐŸĐœĐ”Ń‚Ń‹ ĐŽĐŸĐ»Đ¶ĐœŃ‹ ŃĐŸĐ·Ń€Đ”Ń‚ŃŒ ĐŽĐŸ Đ·ĐœĐ°Ń‡Đ”ĐœĐžŃ ĐČ 110 Đ±Đ»ĐŸĐșĐŸĐČ, прДжЎД Ń‡Đ”ĐŒ ох ĐŒĐŸĐ¶ĐœĐŸ Đ±ŃƒĐŽĐ”Ń‚ ĐżĐŸŃ‚Ń€Đ°Ń‚ĐžŃ‚ŃŒ. ĐšĐŸĐłĐŽĐ° ĐČы ŃĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČалО Đ±Đ»ĐŸĐș, ĐŸĐœ Đ±ŃƒĐŽĐ”Ń‚ ĐżĐ”Ń€Đ”ĐŽĐ°Đœ ĐČ ŃĐ”Ń‚ŃŒ ĐŽĐ»Ń ĐŽĐŸĐ±Đ°ĐČĐ»Đ”ĐœĐžŃ ĐČ Ń†Đ”ĐżĐŸŃ‡Đșу Đ±Đ»ĐŸĐșĐŸĐČ. ЕслО ĐŸĐœ ĐœĐ” ŃĐŒĐŸĐ¶Đ”Ń‚ ĐżĐŸĐżĐ°ŃŃ‚ŃŒ ĐČ Ń†Đ”ĐżĐŸŃ‡Đșу, Đ”ĐłĐŸ ŃĐŸŃŃ‚ĐŸŃĐœĐžĐ” ĐžĐ·ĐŒĐ”ĐœĐžŃ‚ŃŃ ĐœĐ° Â«ĐœĐ” ĐżŃ€ĐžĐœŃŃ‚ĐŸÂ», ĐČ Ń‚Đ°ĐșĐŸĐŒ ŃĐ»ŃƒŃ‡Đ°Đ” ĐČы ĐœĐ” ŃĐŒĐŸĐ¶Đ”Ń‚Đ” ĐżĐŸŃ‚Ń€Đ°Ń‚ĐžŃ‚ŃŒ ĐŒĐŸĐœĐ”Ń‚Ń‹. Đ­Ń‚ĐŸ ĐŒĐŸĐ¶Đ”Ń‚ ĐżŃ€ĐŸĐžĐ·ĐŸĐčто, ДслО ĐŽŃ€ŃƒĐłĐŸĐč узДл ĐłĐ”ĐœĐ”Ń€ĐžŃ€ŃƒĐ”Ń‚ Đ±Đ»ĐŸĐș ĐČ Ń‚Đ”Ń‡Đ”ĐœĐžĐ” ĐœĐ”ŃĐșĐŸĐ»ŃŒĐșох сДĐșŃƒĐœĐŽ ĐżĐŸŃĐ»Đ” ĐČĐ°ŃˆĐ”ĐłĐŸ. + + MINED - POS + - Information - Đ˜ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ + + MINED - POR + - - Generated in CoinBase + + MINED - ORPHANED - - Generated, PoS + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + unknown ĐœĐ”ĐžĐ·ĐČĐ”ŃŃ‚ĐœĐŸ @@ -2943,18 +2814,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - ID Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо - - - Transaction - ĐąŃ€Đ°ĐœĐ·Đ°Đșцоя - - - Inputs - Đ’Ń…ĐŸĐŽŃ‹ - Amount @@ -2984,12 +2843,7 @@ This label turns red, if the priority is smaller than "medium". Эта ĐżĐ°ĐœĐ”Đ»ŃŒ ĐŸŃ‚ĐŸĐ±Ń€Đ°Đ¶Đ°Đ”Ń‚ ĐŽĐ”Ń‚Đ°Đ»ŃŒĐœĐŸĐ” ĐŸĐżĐžŃĐ°ĐœĐžĐ” Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо. - - View Attachment - ĐŸŃ€ĐŸŃĐŒĐŸŃ‚Ń€ ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ - - - + Execute Contract Đ’Ń‹ĐżĐŸĐ»ĐœĐžŃ‚ŃŒ ĐșĐŸĐœŃ‚Ń€Đ°Đșт @@ -2998,21 +2852,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &ЗаĐșрыть - - - Gridcoin Documents - Đ”ĐŸĐșŃƒĐŒĐ”ĐœŃ‚Ń‹ Gridcoin - - - - Document cannot be found on P2P server. - Đ”ĐŸĐșŃƒĐŒĐ”ĐœŃ‚ ĐœĐ” ĐŒĐŸĐ¶Đ”Ń‚ Đ±Ń‹Ń‚ŃŒ ĐœĐ°ĐčĐŽĐ”Đœ ĐœĐ° сДрĐČДрД P2P. - TransactionTableModel - + Date Дата @@ -3047,32 +2891,12 @@ This label turns red, if the priority is smaller than "medium". Đ­Ń‚ĐŸŃ‚ Đ±Đ»ĐŸĐș ĐœĐ” был ĐżĐŸĐ»ŃƒŃ‡Đ”Đœ ĐœĐžĐșĐ°ĐșĐžĐŒĐž ĐŽŃ€ŃƒĐłĐžĐŒĐž ŃƒĐ·Đ»Đ°ĐŒĐž Đž, ĐČĐ”Ń€ĐŸŃŃ‚ĐœĐŸ, ĐœĐ” Đ±ŃƒĐŽĐ”Ń‚ ĐżŃ€ĐžĐœŃŃ‚! - - Mined - DPOR - Đ”ĐŸĐ±Ń‹Ń‚ĐŸ - DPOR - - - - Minted - (Local) DPOR - Đ”ĐŸĐ±Ń‹Ń‚ĐŸ - (Local) DPOR - - - - Mined - PoR - Đ”ĐŸĐ±Ń‹Ń‚ĐŸ - PoR - - - - Mined - Interest - Đ”ĐŸĐ±Ń‹Ń‚ĐŸ - ĐžĐœŃ‚Đ”Ń€Đ”Ń - - - + Destination address of transaction. АЎрДс ĐœĐ°Đ·ĐœĐ°Ń‡Đ”ĐœĐžŃ Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо. - + Open for %n more block(s) ОтĐșŃ€Ń‹Ń‚ĐŸ ĐŽĐ»Ń Дщё %n Đ±Đ»ĐŸĐșĐ° @@ -3111,7 +2935,7 @@ This label turns red, if the priority is smaller than "medium". ĐĄĐłĐ”ĐœĐ”Ń€ĐžŃ€ĐŸĐČĐ°ĐœĐŸ, ĐœĐŸ ĐœĐ” ĐżŃ€ĐžĐœŃŃ‚ĐŸ - + Received with ĐŸĐŸĐ»ŃƒŃ‡Đ”ĐœĐŸ ĐœĐ° @@ -3131,12 +2955,42 @@ This label turns red, if the priority is smaller than "medium". ОтпраĐČĐ»Đ”ĐœĐŸ сДбД - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (ĐœĐ”ĐŽĐŸŃŃ‚ŃƒĐżĐœĐŸ) - + Transaction status. Hover over this field to show number of confirmations. Статус Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо. ĐŸĐŸĐŽĐČДЎОтД ĐșŃƒŃ€ŃĐŸŃ€ Đș ŃŃ‚ĐŸĐŒŃƒ ĐżĐŸĐ»ŃŽ, Ń‡Ń‚ĐŸĐ±Ń‹ уĐČĐžĐŽĐ”Ń‚ŃŒ ĐșĐŸĐ»ĐžŃ‡Đ”ŃŃ‚ĐČĐŸ ĐżĐŸĐŽŃ‚ĐČĐ”Ń€Đ¶ĐŽĐ”ĐœĐžĐč. @@ -3325,29 +3179,10 @@ This label turns red, if the priority is smaller than "medium". ĐŽĐŸ - - UpgradeDialog - - Gridcoin Upgrading Facility - ĐžĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐ” Gridcoin - - - Retry Download - ĐŸĐŸĐČŃ‚ĐŸŃ€ĐžŃ‚ŃŒ Đ·Đ°ĐłŃ€ŃƒĐ·Đșу - - - Upgrade - ĐžĐ±ĐœĐŸĐČоть - - - Hide - ĐĄĐșрыть - - VotingChartDialog - + Poll Results Đ Đ”Đ·ŃƒĐ»ŃŒŃ‚Đ°Ń‚Ń‹ ĐŸĐżŃ€ĐŸŃĐ° @@ -3437,14 +3272,6 @@ This label turns red, if the priority is smaller than "medium". Share Type ĐąĐ”ĐŒĐ°Ń‚ĐžĐșĐ° - - Question - Đ’ĐŸĐżŃ€ĐŸŃ - - - Answers - ОтĐČДты - # Voters @@ -3455,10 +3282,6 @@ This label turns red, if the priority is smaller than "medium". Total Shares Đ Đ°ŃĐżŃ€ĐŸŃŃ‚Ń€Đ°ĐœĐ”ĐœĐŸ - - URL - URL - Best Answer @@ -3484,10 +3307,6 @@ This label turns red, if the priority is smaller than "medium". Share Type. ĐąĐ”ĐŒĐ°Ń‚ĐžĐșĐ°. - - Question. - Đ’ĐŸĐżŃ€ĐŸŃ. - Total Participants. @@ -3498,10 +3317,6 @@ This label turns red, if the priority is smaller than "medium". Total Shares. Đ Đ°ŃĐżŃ€ĐŸŃŃ‚Ń€Đ°ĐœĐ”ĐœĐŸ. - - URL. - URL. - Best Answer. @@ -3511,7 +3326,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote ĐœĐ”ŃŃ‚ĐŸ Đ“ĐŸĐ»ĐŸŃĐŸĐČĐ°ĐœĐžŃ @@ -3544,7 +3359,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... ОтпраĐČĐșĐ°... @@ -3552,37 +3367,37 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Ń‹: - + Specify data directory ЗаЮать ĐșĐ°Ń‚Đ°Đ»ĐŸĐł ĐŽĐ°ĐœĐœŃ‹Ń… - + Connect to a node to retrieve peer addresses, and disconnect ĐŸĐŸĐŽĐșĐ»ŃŽŃ‡ĐžŃ‚ŃŒŃŃ Đș ŃƒŃ‡Đ°ŃŃ‚ĐœĐžĐșу, Ń‡Ń‚ĐŸĐ±Ń‹ ĐżĐŸĐ»ŃƒŃ‡ĐžŃ‚ŃŒ ŃĐżĐžŃĐŸĐș Đ°ĐŽŃ€Đ”ŃĐŸĐČ ĐŽŃ€ŃƒĐłĐžŃ… ŃƒŃ‡Đ°ŃŃ‚ĐœĐžĐșĐŸĐČ Đž ĐŸŃ‚ĐșĐ»ŃŽŃ‡ĐžŃ‚ŃŒŃŃ - + Specify your own public address ĐŁĐșажОтД ĐČаш ŃĐŸĐ±ŃŃ‚ĐČĐ”ĐœĐœŃ‹Đč ĐżŃƒĐ±Đ»ĐžŃ‡ĐœŃ‹Đč аЎрДс - + Accept command line and JSON-RPC commands ĐŸŃ€ĐžĐœĐžĐŒĐ°Ń‚ŃŒ ĐșĐŸĐŒĐ°ĐœĐŽĐœŃƒŃŽ ŃŃ‚Ń€ĐŸĐșу Đž ĐșĐŸĐŒĐ°ĐœĐŽŃ‹ JSON-RPC - + Run in the background as a daemon and accept commands ЗапусĐșаться ĐČ Ń„ĐŸĐœĐ” ĐșĐ°Đș ĐŽĐ”ĐŒĐŸĐœ Đž ĐżŃ€ĐžĐœĐžĐŒĐ°Ń‚ŃŒ ĐșĐŸĐŒĐ°ĐœĐŽŃ‹ - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Đ’Ń‹ĐżĐŸĐ»ĐœĐžŃ‚ŃŒ ĐșĐŸĐŒĐ°ĐœĐŽŃƒ, ĐșĐŸĐłĐŽĐ° ĐŒĐ”ĐœŃĐ”Ń‚ŃŃ Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя ĐČ Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ” (%s ĐČ ĐșĐŸĐŒĐ°ĐœĐŽĐ” Đ·Đ°ĐŒĐ”ĐœŃĐ”Ń‚ŃŃ ĐœĐ° TxID) @@ -3682,6 +3497,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3742,6 +3567,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3802,11 +3632,6 @@ This label turns red, if the priority is smaller than "medium". Message ĐĄĐŸĐŸĐ±Ń‰Đ”ĐœĐžĐ” - - - Messate Type - - Miner: @@ -3843,12 +3668,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3858,12 +3678,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3923,7 +3738,7 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐ°Ń€ĐŸĐ»ŃŒ ĐŽĐ»Ń ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžĐč JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Đ’Ń‹ĐżĐŸĐ»ĐœĐžŃ‚ŃŒ ĐșĐŸĐŒĐ°ĐœĐŽŃƒ, ĐșĐŸĐłĐŽĐ° ĐżĐŸŃĐČĐ»ŃĐ”Ń‚ŃŃ ĐœĐŸĐČыĐč Đ±Đ»ĐŸĐș (%s ĐČ ĐșĐŸĐŒĐ°ĐœĐŽĐ” Đ·Đ°ĐŒĐ”ĐœŃĐ”Ń‚ŃŃ ĐœĐ° хэш Đ±Đ»ĐŸĐșĐ°) @@ -3933,7 +3748,7 @@ This label turns red, if the priority is smaller than "medium". Đ Đ°Đ·Ń€Đ”ŃˆĐžŃ‚ŃŒ ĐżĐŸĐžŃĐș ĐČ DNS ĐŽĐ»Ń -addnode, -seednode Đž -connect - + Staking Interest @@ -3958,7 +3773,7 @@ This label turns red, if the priority is smaller than "medium". Đ§Ń‚ĐŸĐ±Ń‹ ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать ĐŸĐżŃ†ĐžŃŽ %s - + Loading addresses... Đ—Đ°ĐłŃ€ŃƒĐ·ĐșĐ° Đ°ĐŽŃ€Đ”ŃĐŸĐČ... @@ -3968,12 +3783,12 @@ This label turns red, if the priority is smaller than "medium". ĐĐ”ĐČĐ”Ń€ĐœŃ‹Đč аЎрДс -proxy: '%s' - + Unknown network specified in -onlynet: '%s' В ĐżĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đ” -onlynet уĐșĐ°Đ·Đ°ĐœĐ° ĐœĐ”ĐžĐ·ĐČĐ”ŃŃ‚ĐœĐ°Ń ŃĐ”Ń‚ŃŒ: '%s' - + Insufficient funds ĐĐ”ĐŽĐŸŃŃ‚Đ°Ń‚ĐŸŃ‡ĐœĐŸ ĐŒĐŸĐœĐ”Ń‚ @@ -3983,17 +3798,17 @@ This label turns red, if the priority is smaller than "medium". Đ—Đ°ĐłŃ€ŃƒĐ·ĐșĐ° ĐžĐœĐŽĐ”Đșса Đ±Đ»ĐŸĐșĐŸĐČ... - + Add a node to connect to and attempt to keep the connection open Đ”ĐŸĐ±Đ°ĐČоть узДл ĐŽĐ»Ń ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžŃ Đž пытаться ĐżĐŸĐŽĐŽĐ”Ń€Đ¶ĐžĐČать ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžĐ” ĐŸŃ‚ĐșŃ€Ń‹Ń‚Ń‹ĐŒ - + Loading wallet... Đ—Đ°ĐłŃ€ŃƒĐ·ĐșĐ° Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ°... - + Cannot downgrade wallet ĐĐ” уЮаётся ĐżĐŸĐœĐžĐ·ĐžŃ‚ŃŒ ĐČДрсОю Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ° @@ -4003,22 +3818,22 @@ This label turns red, if the priority is smaller than "medium". ĐĐ” уЮаётся Đ·Đ°ĐżĐžŃĐ°Ń‚ŃŒ аЎрДс ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ - + Rescanning... ĐĄĐșĐ°ĐœĐžŃ€ĐŸĐČĐ°ĐœĐžĐ”... - + Done loading Đ—Đ°ĐłŃ€ŃƒĐ·ĐșĐ° Đ·Đ°ĐČĐ”Ń€ŃˆĐ”ĐœĐ° - + Error ĐžŃˆĐžĐ±ĐșĐ° - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4062,12 +3877,12 @@ If the file does not exist, create it with owner-readable-only file permissions. ЕслО фаĐčĐ» ĐœĐ” ŃŃƒŃ‰Đ”ŃŃ‚ĐČŃƒĐ”Ń‚, ŃĐŸĐ·ĐŽĐ°ĐčŃ‚Đ” Đ”ĐłĐŸ Đž ŃƒŃŃ‚Đ°ĐœĐŸĐČОтД праĐČĐ° ĐŽĐŸŃŃ‚ŃƒĐżĐ° Ń‚ĐŸĐ»ŃŒĐșĐŸ ĐŽĐ»Ń ĐČĐ»Đ°ĐŽĐ”Đ»ŃŒŃ†Đ°. - + Gridcoin version Gridcoin ĐČĐ”Ń€ŃĐžŃ - + URL URL @@ -4097,7 +3912,7 @@ If the file does not exist, create it with owner-readable-only file permissions. ОтпраĐČоть ĐșĐŸĐŒĐ°ĐœĐŽŃƒ -server ОлО gridcoind - + List commands ĐĄĐżĐžŃĐŸĐș ĐșĐŸĐŒĐ°ĐœĐŽ @@ -4112,14 +3927,10 @@ If the file does not exist, create it with owner-readable-only file permissions. Gridcoin - + This help message Эта спраĐČĐșĐ° - - Specify configuration file (default: gridcoin.conf) - ĐŁĐșажОтД ĐșĐŸĐœŃ„ĐžĐłŃƒŃ€Đ°Ń†ĐžĐŸĐœĐœŃ‹Đč фаĐčĐ» (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: gridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -4141,12 +3952,12 @@ If the file does not exist, create it with owner-readable-only file permissions. йаĐčĐŒ-аут ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžŃ ĐČ ĐŒĐžĐ»Đ»ĐžŃĐ”ĐșŃƒĐœĐŽĐ°Ń… (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 5000) - + Connect through socks proxy ĐŸĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžĐ” чДрДз ĐżŃ€ĐŸĐșсО-сДрĐČДр socks - + Select the version of socks proxy to use (4-5, default: 5) ВыбДрОтД ĐČДрсОю ĐżŃ€ĐŸĐșсО-сДрĐČДра socks (4-5, ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 5) @@ -4156,7 +3967,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Đ˜ŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать ĐżŃ€ĐŸĐșсО ĐŽĐ»Ń ĐŽĐŸŃŃ‚ŃƒĐżĐ° Đș сĐșŃ€Ń‹Ń‚Ń‹ĐŒ ŃĐ»ŃƒĐ¶Đ±Đ°ĐŒ (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: Ń‚ĐŸ жД, Ń‡Ń‚ĐŸ Đž -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) ХлушаĐčŃ‚Đ” ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžŃ ĐżĐŸ <port> (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 32749 ОлО testnet: 32748) @@ -4166,26 +3977,22 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐŸĐŸĐŽĐŽĐ”Ń€Đ¶ĐžĐČать ĐœĐ” Đ±ĐŸĐ»Đ”Đ” <n> ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžĐč Đș ŃƒĐ·Đ»Đ°ĐŒ (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 125) - + Connect only to the specified node(s) ĐŸĐŸĐŽĐșĐ»ŃŽŃ‡Đ°Ń‚ŃŒŃŃ Ń‚ĐŸĐ»ŃŒĐșĐŸ Đș уĐșĐ°Đ·Đ°ĐœĐœĐŸĐŒŃƒ узлу(Đ°ĐŒ) - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) ĐŸĐŸĐŽĐșĐ»ŃŽŃ‡Đ°Ń‚ŃŒŃŃ Ń‚ĐŸĐ»ŃŒĐșĐŸ Đș ŃƒĐ·Đ»Đ°ĐŒ Оз сДтО <net> (IPv4, IPv6 ОлО Tor) - + Discover own IP address (default: 1 when listening and no -externalip) ĐžĐżŃ€Đ”ĐŽĐ”Đ»ĐžŃ‚ŃŒ сĐČĐŸĐč IP (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1 про ĐżŃ€ĐŸŃĐ»ŃƒŃˆĐžĐČĐ°ĐœĐžĐž Đž ДслО ĐœĐ” ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒĐ”Ń‚ŃŃ -externalip) - Find peers using internet relay chat (default: 0) - НаĐčто сĐČĐ”Ń€ŃŃ‚ĐœĐžĐșĐŸĐČ Ń ĐżĐŸĐŒĐŸŃ‰ŃŒŃŽ ĐžĐœŃ‚Đ”Ń€ĐœĐ”Ń‚-Ń€Đ”Ń‚Ń€Đ°ĐœŃĐ»ŃŃ†ĐžĐŸĐœĐœĐŸĐłĐŸ чата (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 0) - - - + Accept connections from outside (default: 1 if no -proxy or -connect) ĐŸŃ€ĐžĐœĐžĐŒĐ°Ń‚ŃŒ ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžŃ ОзĐČĐœĐ” (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1, ДслО ĐœĐ” ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒĐ”Ń‚ŃŃ -proxy ОлО -connect) @@ -4195,31 +4002,27 @@ If the file does not exist, create it with owner-readable-only file permissions. ПроĐČŃĐ·Đ°Ń‚ŃŒ Đș ĐŽĐ°ĐœĐœĐŸĐŒŃƒ Đ°ĐŽŃ€Đ”ŃŃƒ. Đ˜ŃĐżĐŸĐ»ŃŒĐ·ŃƒĐčŃ‚Đ” [host]: ĐŸĐ±ĐŸĐ·ĐœĐ°Ń‡Đ”ĐœĐžĐ” ĐżĐŸŃ€Ń‚Đ° ĐŽĐ»Ń IPv6 - + Find peers using DNS lookup (default: 1) НаĐčто ĐŸĐŽĐœĐŸŃ€Đ°ĐœĐłĐŸĐČых ŃƒĐ·Đ»ĐŸĐČ, ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒŃŽŃ‰ĐžŃ… DNS-ĐżĐŸĐžŃĐș (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) ĐĄĐžĐœŃ…Ń€ĐŸĐœĐžĐ·ĐžŃ€ŃƒĐčŃ‚Đ” ĐČŃ€Đ”ĐŒŃ с ĐŽŃ€ŃƒĐłĐžĐŒĐž ŃƒĐ·Đ»Đ°ĐŒĐž. ОтĐșлючОтД, ДслО ĐČŃ€Đ”ĐŒŃ ĐČ ĐČашДĐč ŃĐžŃŃ‚Đ”ĐŒĐ” Ń‚ĐŸŃ‡ĐœĐŸ, ĐœĐ°ĐżŃ€ĐžĐŒĐ”Ń€. ĐĄĐžĐœŃ…Ń€ĐŸĐœĐžĐ·Đ°Ń†ĐžŃ с NTP (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1) - Sync checkpoints policy (default: strict) - ĐŸĐŸĐ»ĐžŃ‚ĐžĐșĐ° ŃĐžĐœŃ…Ń€ĐŸĐœĐžĐ·Đ°Ń†ĐžĐž ĐșĐŸĐœŃ‚Ń€ĐŸĐ»ŃŒĐœŃ‹Ń… Ń‚ĐŸŃ‡Đ”Đș (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: ŃŃ‚Ń€ĐŸĐłĐžĐč) - - - + Threshold for disconnecting misbehaving peers (default: 100) ĐŸĐŸŃ€ĐŸĐł ĐŽĐ»Ń ĐŸŃ‚ĐșĐ»ŃŽŃ‡Đ”ĐœĐžŃ ĐœĐ”ĐżŃ€Đ°ĐČĐžĐ»ŃŒĐœĐŸ ĐČĐ”ĐŽŃƒŃ‰ĐžŃ… ŃĐ”Đ±Ń ŃƒĐ·Đ»ĐŸĐČ (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Đ§ĐžŃĐ»ĐŸ сДĐșŃƒĐœĐŽ Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐ°ĐœĐžŃ ĐœĐ”ĐżŃ€Đ°ĐČĐžĐ»ŃŒĐœĐŸ ĐČĐ”ĐŽŃƒŃ‰ĐžŃ… ŃĐ”Đ±Ń ŃƒĐ·Đ»ĐŸĐČ (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) МаĐșŃĐžĐŒĐ°Đ»ŃŒĐœŃ‹Đč Ń€Đ°Đ·ĐŒĐ”Ń€ Đ±ŃƒŃ„Đ”Ń€Đ° ĐżŃ€ĐžŃ‘ĐŒĐ° ĐœĐ° ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžĐ”, <n>*1000 баĐčт (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 5000) @@ -4229,7 +4032,7 @@ If the file does not exist, create it with owner-readable-only file permissions. МаĐșŃĐžĐŒĐ°Đ»ŃŒĐœŃ‹Đč Ń€Đ°Đ·ĐŒĐ”Ń€ Đ±ŃƒŃ„Đ”Ń€Đ° ĐŸŃ‚ĐżŃ€Đ°ĐČĐșĐž ĐœĐ° ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžĐ”, <n>*1000 баĐčт (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1000) - + Use UPnP to map the listening port (default: 1 when listening) Đ˜ŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать UPnP ĐŽĐ»Ń ĐżŃ€ĐŸĐ±Ń€ĐŸŃĐ° ĐżĐŸŃ€Ń‚Đ° (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1, ДслО ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒĐ”Ń‚ŃŃ ĐżŃ€ĐŸŃĐ»ŃƒŃˆĐžĐČĐ°ĐœĐžĐ”) @@ -4239,22 +4042,22 @@ If the file does not exist, create it with owner-readable-only file permissions. Đ˜ŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать UPnP ĐŽĐ»Ń ĐżŃ€ĐŸĐ±Ń€ĐŸŃĐ° ĐżĐŸŃ€Ń‚Đ° (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 0) - + Fee per KB to add to transactions you send ĐŸĐ»Đ°Ń‚Đ° Đ·Đ° КБ ĐŽĐ»Ń ĐŽĐŸĐ±Đ°ĐČĐ»Đ”ĐœĐžŃ Đș Ń‚Ń€Đ°ĐœĐ·Đ°ĐșŃ†ĐžŃĐŒ, ĐșĐŸŃ‚ĐŸŃ€Ń‹Đ” ĐČы ĐŸŃ‚ĐżŃ€Đ°ĐČĐ»ŃĐ”Ń‚Đ” - + When creating transactions, ignore inputs with value less than this (default: 0.01) Про ŃĐŸĐ·ĐŽĐ°ĐœĐžĐž Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо ĐžĐłĐœĐŸŃ€ĐžŃ€ŃƒĐčŃ‚Đ” ĐČĐČĐŸĐŽŃ‹ ĐŒĐ”ĐœŃŒŃˆĐ” Ń‡Đ”ĐŒ (default: 0.01) - + Use the test network Đ˜ŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать Ń‚Đ”ŃŃ‚ĐŸĐČую ŃĐ”Ń‚ŃŒ - + Output extra debugging information. Implies all other -debug* options ВыĐČĐŸĐŽ ĐŽĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœĐŸĐč ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžĐž ĐŸĐ± ĐŸŃ‚Đ»Đ°ĐŽĐșĐ”. ĐŸĐŸĐŽŃ€Đ°Đ·ŃƒĐŒĐ”ĐČаДт ĐČсД ĐŽŃ€ŃƒĐłĐžĐ” ĐŸĐżŃ†ĐžĐž -debug * @@ -4264,7 +4067,7 @@ If the file does not exist, create it with owner-readable-only file permissions. ВыĐČĐŸĐŽ ĐŽĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœĐŸĐč ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžĐž ĐŸĐ± ĐŸŃ‚Đ»Đ°ĐŽĐșĐ” сДтО - + Prepend debug output with timestamp ĐŸĐŸĐŽĐłĐŸŃ‚ĐŸĐČоть ĐČыĐČĐŸĐŽ ĐŸŃ‚Đ»Đ°ĐŽĐșĐž с ĐŒĐ”Ń‚ĐșĐŸĐč ĐČŃ€Đ”ĐŒĐ”ĐœĐž @@ -4274,7 +4077,7 @@ If the file does not exist, create it with owner-readable-only file permissions. ОтпраĐČоть Ń‚Ń€Đ°ŃŃĐžŃ€ĐŸĐČĐșу / ĐŸŃ‚Đ»Đ°ĐŽĐŸŃ‡ĐœŃƒŃŽ ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃŽ ĐČ ĐŸŃ‚Đ»Đ°ĐŽŃ‡ĐžĐș - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) ХлушаĐčŃ‚Đ” ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžŃ JSON-RPC ĐœĐ° <ĐżĐŸŃ€Ń‚> (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 15715 ОлО testnet: 25715) @@ -4284,7 +4087,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Đ Đ°Đ·Ń€Đ”ŃˆĐžŃ‚ŃŒ ĐżĐŸĐŽĐșĐ»ŃŽŃ‡Đ”ĐœĐžŃ JSON-RPC с уĐșĐ°Đ·Đ°ĐœĐœĐŸĐłĐŸ IP - + Send commands to node running on <ip> (default: 127.0.0.1) ĐŸĐŸŃŃ‹Đ»Đ°Ń‚ŃŒ ĐșĐŸĐŒĐ°ĐœĐŽŃ‹ узлу, Đ·Đ°ĐżŃƒŃ‰Đ”ĐœĐœĐŸĐŒŃƒ ĐœĐ° <ip> (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 127.0.0.1) @@ -4294,7 +4097,7 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐąŃ€Đ”Đ±ĐŸĐČать ĐżĐŸĐŽŃ‚ĐČĐ”Ń€Đ¶ĐŽĐ”ĐœĐžŃ ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžĐč (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Đ˜ŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать ŃŃ†Đ”ĐœĐ°Ń€ĐžĐž Ń‚Ń€Đ°ĐœĐ·Đ°ĐșцоĐč ĐŽĐ»Ń ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°ĐœĐžŃ ĐșĐ°ĐœĐŸĐœĐžŃ‡Đ”ŃĐșох ĐŸĐżĐ”Ń€Đ°Ń‚ĐŸŃ€ĐŸĐČ PUSH (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 1) @@ -4304,7 +4107,7 @@ If the file does not exist, create it with owner-readable-only file permissions. Đ’Ń‹ĐżĐŸĐ»ĐœĐžŃ‚ŃŒ ĐșĐŸĐŒĐ°ĐœĐŽŃƒ про ĐżĐŸĐ»ŃƒŃ‡Đ”ĐœĐžĐž ŃĐŸĐŸŃ‚ĐČДтстĐČŃƒŃŽŃ‰Đ”ĐłĐŸ ĐżŃ€Đ”ĐŽŃƒĐżŃ€Đ”Đ¶ĐŽĐ”ĐœĐžŃ (% s ĐČ cmd Đ·Đ°ĐŒĐ”ĐœŃĐ”Ń‚ŃŃ ŃĐŸĐŸĐ±Ń‰Đ”ĐœĐžĐ”ĐŒ) - + Upgrade wallet to latest format ĐžĐ±ĐœĐŸĐČоть Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐș ĐŽĐŸ ĐżĐŸŃĐ»Đ”ĐŽĐœĐ”ĐłĐŸ Ń„ĐŸŃ€ĐŒĐ°Ń‚Đ° @@ -4319,7 +4122,7 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐŸĐ”Ń€Đ”ĐżŃ€ĐŸĐČĐ”Ń€ĐžŃ‚ŃŒ Ń†Đ”ĐżŃŒ Đ±Đ»ĐŸĐșĐŸĐČ ĐœĐ° ĐżŃ€Đ”ĐŽĐŒĐ”Ń‚ ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČующох ĐČ Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ” Ń‚Ń€Đ°ĐœĐ·Đ°ĐșцоĐč - + Attempt to recover private keys from a corrupt wallet.dat ĐŸĐŸĐżŃ‹Ń‚Đ°Ń‚ŃŒŃŃ ĐČĐŸŃŃŃ‚Đ°ĐœĐŸĐČоть проĐČĐ°Ń‚ĐœŃ‹Đ” ĐșлючО Оз ĐżĐŸĐČŃ€Đ”Đ¶ĐŽŃ‘ĐœĐœĐŸĐłĐŸ wallet.dat @@ -4339,7 +4142,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -4349,7 +4152,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -4399,12 +4202,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4419,12 +4242,12 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐŁŃŃ‚Đ°ĐœĐŸĐČоть ĐŒĐ°ĐșŃĐžĐŒĐ°Đ»ŃŒĐœŃ‹Đč Ń€Đ°Đ·ĐŒĐ”Ń€ Đ±Đ»ĐŸĐșĐ° ĐČ Đ±Đ°Đčтах (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) ĐŁŃŃ‚Đ°ĐœĐŸĐČОтД ĐŒĐ°ĐșŃĐžĐŒĐ°Đ»ŃŒĐœŃ‹Đč Ń€Đ°Đ·ĐŒĐ”Ń€ Ń‚Ń€Đ°ĐœĐ·Đ°ĐșцоĐč с ĐČŃ‹ŃĐŸĐșĐžĐŒ ĐżŃ€ĐžĐŸŃ€ĐžŃ‚Đ”Ń‚ĐŸĐŒ / ĐœĐžĐ·ĐșĐŸĐč ĐŸĐżĐ»Đ°Ń‚ĐŸĐč ĐČ Đ±Đ°Đčтах (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Ń‹ SSL: (ŃĐŒ. Đ˜ĐœŃŃ‚Ń€ŃƒĐșцоо ĐżĐŸ ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐ” Bitcoin Wiki ĐŽĐ»Ń SSL) @@ -4444,21 +4267,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ПроĐČĐ°Ń‚ĐœŃ‹Đč Đșлюч сДрĐČДра (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Đ”ĐŸĐżŃƒŃŃ‚ĐžĐŒŃ‹Đ” Đ°Đ»ĐłĐŸŃ€ĐžŃ‚ĐŒŃ‹ (ĐżĐŸ ŃƒĐŒĐŸĐ»Ń‡Đ°ĐœĐžŃŽ: TLSv1 + HIGH:! SSLv2:! ANULL:! ENULL:! AH:! 3DES: @STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' ĐĐ”ĐČĐ”Ń€ĐœĐ°Ń ŃŃƒĐŒĐŒĐ° ĐČ ĐżĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đ” -paytxfee=<ĐșĐŸĐ»-ĐČĐŸ>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”: ŃƒŃŃ‚Đ°ĐœĐŸĐČĐ»Đ”ĐœĐŸ ĐŸŃ‡Đ”ĐœŃŒ Đ±ĐŸĐ»ŃŒŃˆĐŸĐ” Đ·ĐœĐ°Ń‡Đ”ĐœĐžĐ” -paytxfee. Đ­Ń‚ĐŸ ĐșĐŸĐŒĐžŃŃĐžŃ, ĐșĐŸŃ‚ĐŸŃ€ŃƒŃŽ ĐČы заплатОтД про ĐżŃ€ĐŸĐČĐ”ĐŽĐ”ĐœĐžĐž Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо. - + Invalid amount for -mininput=<amount>: '%s' ĐĐ”ĐŽĐŸĐżŃƒŃŃ‚ĐžĐŒĐ°Ń ŃŃƒĐŒĐŒĐ° ĐŽĐ»Ń -mininput = <amount>: '% s' @@ -4468,22 +4287,22 @@ If the file does not exist, create it with owner-readable-only file permissions. Đ˜ĐœĐžŃ†ĐžĐ°Đ»ĐžĐ·Đ°Ń†ĐžŃ ĐżŃ€ĐŸĐČДрĐșĐž Ń€Đ°Đ±ĐŸŃ‚ĐŸŃĐżĐŸŃĐŸĐ±ĐœĐŸŃŃ‚Đž ĐœĐ” ŃƒĐŽĐ°Đ»Đ°ŃŃŒ. Gridcoin Đ·Đ°ĐșрыĐČĐ°Đ”Ń‚ŃŃ. - + Wallet %s resides outside data directory %s. Đ‘ŃƒĐŒĐ°Đ¶ĐœĐžĐș %s Ń€Đ°ŃĐżĐŸĐ»Đ°ĐłĐ°Đ”Ń‚ŃŃ ĐČĐœĐ” ĐșĐ°Ń‚Đ°Đ»ĐŸĐłĐ° ĐŽĐ°ĐœĐœŃ‹Ń… %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. ĐĐ” ŃƒĐŽĐ°Đ”Ń‚ŃŃ ĐżĐŸĐ»ŃƒŃ‡ĐžŃ‚ŃŒ Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐșу ĐČ ĐșĐ°Ń‚Đ°Đ»ĐŸĐłĐ” ĐŽĐ°ĐœĐœŃ‹Ń…% s. ГроЮĐșĐŸĐčĐœ, ĐČĐ”Ń€ĐŸŃŃ‚ĐœĐŸ, ужД Ń€Đ°Đ±ĐŸŃ‚Đ°Đ”Ń‚. - + Verifying database integrity... ĐŸŃ€ĐŸĐČДрĐșĐ° Ń†Đ”Đ»ĐŸŃŃ‚ĐœĐŸŃŃ‚Đž базы ĐŽĐ°ĐœĐœŃ‹Ń…... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. ĐžŃˆĐžĐ±ĐșĐ° ĐžĐœĐžŃ†ĐžĐ°Đ»ĐžĐ·Đ°Ń†ĐžĐž срДЎы базы ĐŽĐ°ĐœĐœŃ‹Ń…% s! Đ§Ń‚ĐŸĐ±Ń‹ ĐČĐŸŃŃŃ‚Đ°ĐœĐŸĐČоть, СДЕЛАЙбЕ БЕКАП ДАННОЙ ДИРЕКбОРИИ, Đ·Đ°Ń‚Đ”ĐŒ ŃƒĐŽĐ°Đ»ĐžŃ‚Đ” ĐČсД, ĐșŃ€ĐŸĐŒĐ” ĐœĐ”ĐłĐŸ, Đ·Đ° ОсĐșĐ»ŃŽŃ‡Đ”ĐœĐžĐ”ĐŒ wallet.dat. @@ -4493,10 +4312,15 @@ If the file does not exist, create it with owner-readable-only file permissions. Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”: wallet.dat ĐżĐŸĐČŃ€Đ”Đ¶ĐŽŃ‘Đœ, ĐŽĐ°ĐœĐœŃ‹Đ” ŃĐżĐ°ŃĐ”ĐœŃ‹! ĐžŃ€ĐžĐłĐžĐœĐ°Đ»ŃŒĐœŃ‹Đč wallet.dat ŃĐŸŃ…Ń€Đ°ĐœŃ‘Đœ ĐșĐ°Đș wallet.{timestamp}.bak ĐČ %s; ДслО ĐČаш Đ±Đ°Đ»Đ°ĐœŃ ОлО Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо ĐœĐ”ĐșĐŸŃ€Ń€Đ”ĐșŃ‚ĐœŃ‹, ĐČы ĐŽĐŸĐ»Đ¶ĐœŃ‹ ĐČĐŸŃŃŃ‚Đ°ĐœĐŸĐČоть фаĐčĐ» Оз рДзДрĐČĐœĐŸĐč ĐșĐŸĐżĐžĐž. - + Vote Đ“ĐŸĐ»ĐŸŃĐŸĐČать + + + Waiting for coins to mature + + Wallet locked; @@ -4513,17 +4337,17 @@ If the file does not exist, create it with owner-readable-only file permissions. wallet.dat ĐżĐŸĐČŃ€Đ”Đ¶ĐŽŃ‘Đœ, ŃĐżĐ°ŃĐ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃ‹Ń… ĐœĐ” ŃƒĐŽĐ°Đ»ĐŸŃŃŒ - + Unknown -socks proxy version requested: %i В ĐżĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đ” -socks Đ·Đ°ĐżŃ€ĐŸŃˆĐ”ĐœĐ° ĐœĐ”ĐžĐ·ĐČĐ”ŃŃ‚ĐœĐ°Ń ĐČĐ”Ń€ŃĐžŃ: %i - + Invalid -tor address: '%s' ĐĐ”ĐŽĐŸĐżŃƒŃŃ‚ĐžĐŒŃ‹Đč аЎрДс -tor: '% s' - + Cannot resolve -bind address: '%s' ĐĐ” уЮаётся Ń€Đ°Đ·Ń€Đ”ŃˆĐžŃ‚ŃŒ аЎрДс ĐČ ĐżĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đ” -bind: '%s' @@ -4533,16 +4357,10 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐĐ” уЮаётся Ń€Đ°Đ·Ń€Đ”ŃˆĐžŃ‚ŃŒ аЎрДс ĐČ ĐżĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đ” -externalip: '%s' - + Invalid amount for -reservebalance=<amount> ĐĐ”ĐŽĐŸĐżŃƒŃŃ‚ĐžĐŒĐ°Ń ŃŃƒĐŒĐŒĐ° ĐŽĐ»Ń -reservebalance = <amount> - - Unable to sign checkpoint, wrong checkpointkey? - - ĐĐ” ŃƒĐŽĐ°Đ»ĐŸŃŃŒ ĐżĐŸĐŽĐżĐžŃĐ°Ń‚ŃŒ ĐșĐŸĐœŃ‚Ń€ĐŸĐ»ŃŒĐœŃƒŃŽ Ń‚ĐŸŃ‡Đșу, ĐœĐ”ĐČĐ”Ń€Đ”Đœ checkpointkey? - - Error loading blkindex.dat @@ -4554,22 +4372,22 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐžŃˆĐžĐ±ĐșĐ° Đ·Đ°ĐłŃ€ŃƒĐ·ĐșĐž wallet.dat: Đ‘ŃƒĐŒĐ°Đ¶ĐœĐžĐș ĐżĐŸĐČŃ€Đ”Đ¶ĐŽĐ”Đœ - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”: ĐŸŃˆĐžĐ±ĐșĐ° Ń‡Ń‚Đ”ĐœĐžŃ wallet.dat! ВсД ĐșлючО ĐżŃ€ĐŸŃ‡ĐžŃ‚Đ°ĐœŃ‹ ĐČĐ”Ń€ĐœĐŸ, ĐœĐŸ ĐŽĐ°ĐœĐœŃ‹Đ” Ń‚Ń€Đ°ĐœĐ·Đ°ĐșцоĐč ОлО запОсО Đ°ĐŽŃ€Đ”ŃĐœĐŸĐč ĐșĐœĐžĐłĐž ĐŒĐŸĐłŃƒŃ‚ ĐŸŃ‚ŃŃƒŃ‚ŃŃ‚ĐČĐŸĐČать ОлО Đ±Ń‹Ń‚ŃŒ ĐœĐ”ĐżŃ€Đ°ĐČĐžĐ»ŃŒĐœŃ‹ĐŒĐž. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin ĐžŃˆĐžĐ±ĐșĐ° Đ·Đ°ĐłŃ€ŃƒĐ·ĐșĐž wallet.dat: Đ‘ŃƒĐŒĐ°Đ¶ĐœĐžĐș Ń‚Ń€Đ”Đ±ŃƒĐ”Ń‚ Đ±ĐŸĐ»Đ”Đ” ĐœĐŸĐČĐŸĐč ĐČДрсОО Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete ĐĐ”ĐŸĐ±Ń…ĐŸĐŽĐžĐŒĐŸ ĐżĐ”Ń€Đ”Đ·Đ°ĐżĐžŃĐ°Ń‚ŃŒ Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐș: ĐżĐ”Ń€Đ”Đ·Đ°ĐżŃƒŃŃ‚ĐžŃ‚Đ” Gridcoin ĐŽĐ»Ń Đ·Đ°ĐČĐ”Ń€ŃˆĐ”ĐœĐžŃ ĐŸĐżĐ”Ń€Đ°Ń†ĐžĐž - + Error loading wallet.dat ĐžŃˆĐžĐ±ĐșĐ° про Đ·Đ°ĐłŃ€ŃƒĐ·ĐșĐ” wallet.dat @@ -4589,17 +4407,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐžŃˆĐžĐ±ĐșĐ°: ĐœĐ” ŃƒĐŽĐ°Đ»ĐŸŃŃŒ Đ·Đ°ĐżŃƒŃŃ‚ĐžŃ‚ŃŒ узДл - + Unable to bind to %s on this computer. Gridcoin is probably already running. ĐĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ Đ·Đ°Đ±ĐžĐœĐŽĐžŃ‚ŃŒŃŃ %s ĐœĐ° ŃŃ‚ĐŸĐŒ ĐșĐŸĐŒĐżŃŒŃŽŃ‚Đ”Ń€Đ”. Gridcoin ĐČĐ”Ń€ĐŸŃŃ‚ĐœĐŸ ужД Đ·Đ°ĐżŃƒŃ‰Đ”Đœ. - + Unable to bind to %s on this computer (bind returned error %d, %s) ĐĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ проĐČŃĐ·Đ°Ń‚ŃŒŃŃ Đș %s ĐœĐ° ŃŃ‚ĐŸĐŒ ĐșĐŸĐŒĐżŃŒŃŽŃ‚Đ”Ń€Đ” (bind ĐČĐ”Ń€ĐœŃƒĐ» ĐŸŃˆĐžĐ±Đșу %d, %s) - + Error: Wallet locked, unable to create transaction ĐžŃˆĐžĐ±ĐșĐ°: ĐșĐŸŃˆĐ”Đ»Đ”Đș Đ·Đ°Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐ°Đœ, ĐœĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ ŃĐŸĐ·ĐŽĐ°Ń‚ŃŒ Ń‚Ń€Đ°ĐœĐ·Đ°Đșцою @@ -4609,51 +4427,39 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐžŃˆĐžĐ±ĐșĐ°: ĐšĐŸŃˆĐ”Đ»Đ”Đș Ń€Đ°Đ·Đ±Đ»ĐŸĐșĐžŃ€ĐŸĐČĐ°Đœ Ń‚ĐŸĐ»ŃŒĐșĐŸ ĐŽĐ»Ń стДĐčĐșĐžĐœĐłĐ°, ĐœĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ ŃĐŸĐ·ĐŽĐ°Ń‚ŃŒ Ń‚Ń€Đ°ĐœĐ·Đ°Đșцою. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds ĐžŃˆĐžĐ±ĐșĐ°: эта Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя Ń‚Ń€Đ”Đ±ŃƒĐ”Ń‚ ĐșĐŸĐŒĐžŃŃĐžŃŽ ĐșĐ°Đș ĐŒĐžĐœĐžĐŒŃƒĐŒ %s Оз-Đ·Đ° ŃŃƒĐŒĐŒŃ‹, ŃĐ»ĐŸĐ¶ĐœĐŸŃŃ‚Đž ОлО ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°ĐœĐžŃ ĐœĐ”ĐŽĐ°ĐČĐœĐŸ ĐżĐŸĐ»ŃƒŃ‡Đ”ĐœĐœŃ‹Ń… срДЎстĐČ - + Error: Transaction creation failed ĐžŃˆĐžĐ±ĐșĐ°: ĐĐ” ŃƒĐŽĐ°Đ»ĐŸŃŃŒ ŃĐŸĐ·ĐŽĐ°Ń‚ŃŒ Ń‚Ń€Đ°ĐœĐ·Đ°Đșцою - + Sending... ОтпраĐČĐșĐ°... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. ĐžŃˆĐžĐ±ĐșĐ°: Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоя была ĐŸŃ‚ĐșĐ»ĐŸĐœĐ”ĐœĐ°! Đ­Ń‚ĐŸ ĐŒĐŸĐłĐ»ĐŸ ĐżŃ€ĐŸĐžĐ·ĐŸĐčто ĐČ ŃĐ»ŃƒŃ‡Đ°Đ”, ДслО ĐœĐ”ĐșĐŸŃ‚ĐŸŃ€Ń‹Đ” ĐŒĐŸĐœĐ”Ń‚Ń‹ ĐČ ĐČĐ°ŃˆĐ”ĐŒ Đ±ŃƒĐŒĐ°Đ¶ĐœĐžĐșĐ” ужД былО ĐżĐŸŃ‚Ń€Đ°Ń‡Đ”ĐœŃ‹, ĐœĐ°ĐżŃ€ĐžĐŒĐ”Ń€, ДслО ĐČы ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒĐ”Ń‚Đ” ĐșĐŸĐżĐžŃŽ wallet.dat, Đž ĐŒĐŸĐœĐ”Ń‚Ń‹ былО ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°ĐœŃ‹ ĐČ ĐșĐŸĐżĐžĐž, ĐœĐŸ ĐœĐ” ĐŸŃ‚ĐŒĐ”Ń‡Đ”ĐœŃ‹ ĐșĐ°Đș ĐżĐŸŃ‚Ń€Đ°Ń‡Đ”ĐœĐœŃ‹Đ” Đ·ĐŽĐ”ŃŃŒ. - + Invalid amount ĐĐ”ĐČĐ”Ń€ĐœĐ°Ń ŃŃƒĐŒĐŒĐ° - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”: ŃƒĐ±Đ”ĐŽĐžŃ‚Đ”ŃŃŒ, Ń‡Ń‚ĐŸ Юата Đž ĐČŃ€Đ”ĐŒŃ ĐœĐ° Đ’Đ°ŃˆĐ”ĐŒ ĐșĐŸĐŒĐżŃŒŃŽŃ‚Đ”Ń€Đ” ĐČыстаĐČĐ»Đ”ĐœŃ‹ ĐČĐ”Ń€ĐœĐŸ. ЕслО Вашо часы оЮут ĐœĐ”ĐżŃ€Đ°ĐČĐžĐ»ŃŒĐœĐŸ, Gridcoin Đ±ŃƒĐŽĐ”Ń‚ Ń€Đ°Đ±ĐŸŃ‚Đ°Ń‚ŃŒ ĐœĐ”ĐșĐŸŃ€Ń€Đ”ĐșŃ‚ĐœĐŸ. - Warning: This version is obsolete, upgrade required! - Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”: эта ĐČĐ”Ń€ŃĐžŃ ŃƒŃŃ‚Đ°Ń€Đ”Đ»Đ°, Ń‚Ń€Đ”Đ±ŃƒĐ”Ń‚ŃŃ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐ”! - - - WARNING: synchronized checkpoint violation detected, but skipped! - ПРЕДУПРЕЖДЕНИЕ: ĐŸĐ±ĐœĐ°Ń€ŃƒĐ¶Đ”ĐœĐŸ ĐœĐ°Ń€ŃƒŃˆĐ”ĐœĐžĐ” ŃĐžĐœŃ…Ń€ĐŸĐœĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœĐŸĐč ĐșĐŸĐœŃ‚Ń€ĐŸĐ»ŃŒĐœĐŸĐč Ń‚ĐŸŃ‡ĐșĐž, ĐœĐŸ ĐżŃ€ĐŸĐčĐŽĐ”ĐœĐŸ! - - - + Warning: Disk space is low! Đ’ĐœĐžĐŒĐ°ĐœĐžĐ”: ĐĄĐČĐŸĐ±ĐŸĐŽĐœĐŸĐ” ĐŒĐ”ŃŃ‚ĐŸ Đ·Đ°ĐșĐ°ĐœŃ‡ĐžĐČĐ°Đ”Ń‚ŃŃ! - - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - ПРЕДУПРЕЖДЕНИЕ. ĐĐ”ĐČĐ”Ń€ĐœĐ°Ń ĐșĐŸĐœŃ‚Ń€ĐŸĐ»ŃŒĐœĐ°Ń Ń‚ĐŸŃ‡ĐșĐ° ĐœĐ°ĐčĐŽĐ”ĐœĐ°! ĐžŃ‚ĐŸĐ±Ń€Đ°Đ¶Đ°Đ”ĐŒŃ‹Đ” Ń‚Ń€Đ°ĐœĐ·Đ°Đșцоо ĐŒĐŸĐłŃƒŃ‚ Đ±Ń‹Ń‚ŃŒ ĐœĐ”ĐČĐ”Ń€ĐœŃ‹ĐŒĐž! Đ’ĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ, ĐČĐ°ĐŒ ĐżĐŸŃ‚Ń€Đ”Đ±ŃƒĐ”Ń‚ŃŃ ĐŸĐ±ĐœĐŸĐČоться ОлО уĐČĐ”ĐŽĐŸĐŒĐžŃ‚ŃŒ Ń€Đ°Đ·Ń€Đ°Đ±ĐŸŃ‚Ń‡ĐžĐșĐŸĐČ. - diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts index adda78821d..c02a06f8a3 100644 --- a/src/qt/locale/bitcoin_sk.ts +++ b/src/qt/locale/bitcoin_sk.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Toto je experimentĂĄlny softvĂ©r. - -DistribuovanĂœ pod softvĂ©rovou licenciou MIT/X11, vi? priloĆŸenĂœ sĂșbor COPYING alebo http://www.opensource.org/licenses/mit-license.php. - -Tento produkt obsahuje softvĂ©r vyvinutĂœ projektom OpenSSL Project pre pouĆŸitie v sade OpenSSL Toolkit (http://www.openssl.org/) a ĆĄifrovacĂ­ softvĂ©r, ktorĂœ napĂ­sal Eric Young (eay@cryptsoft.com) a UPnP softvĂ©r ktorĂœ napĂ­sanĂœ Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Tento produkt obsahuje softvĂ©r vyvinutĂœ projektom OpenSSL Project pre pouĆŸiti BitcoinGUI - + Sign &message... PodpĂ­saĆ„ &sprĂĄvu... - + &Overview &PrehÄŸad @@ -414,7 +400,7 @@ Tento produkt obsahuje softvĂ©r vyvinutĂœ projektom OpenSSL Project pre pouĆŸiti UkončiĆ„ program - + &Options... &MoĆŸnosti... @@ -429,7 +415,7 @@ Tento produkt obsahuje softvĂ©r vyvinutĂœ projektom OpenSSL Project pre pouĆŸiti ZaĆĄifrovaĆ„ alebo deĆĄifrovaĆ„ peƈaĆŸenku - + %n second(s) ago pred %n sekundou @@ -465,7 +451,7 @@ Tento produkt obsahuje softvĂ©r vyvinutĂœ projektom OpenSSL Project pre pouĆŸiti - + Date: %1 Amount: %2 Type: %3 @@ -479,7 +465,7 @@ Adresa: %4 {1 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -489,17 +475,39 @@ Adresa: %4 {1 - &Backup Wallet... - &ZĂĄlohovaĆ„ peƈaĆŸenku... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Zmena Hesla... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + - Backup wallet to another location - ZĂĄlohovaĆ„ peƈaĆŸenku na inĂ© miesto + + &Change Passphrase... + &Zmena Hesla... @@ -552,7 +560,7 @@ Adresa: %4 {1 O&veriĆ„ sprĂĄvu... - + Wallet PeƈaĆŸenka @@ -562,7 +570,7 @@ Adresa: %4 {1 Gridcoin - + &Send &OdoslaĆ„ @@ -571,30 +579,6 @@ Adresa: %4 {1 &Receive &PrijaĆ„ - - &Rebuild Block Chain - VybudovaĆ„ &reĆ„az - - - Rebuild Block Chain - VybudovaĆ„ reĆ„az2 - - - &Download Blocks - StiahnuĆ„ reĆ„az - - - Download Blocks - StiahnuĆ„ reĆ„az - - - &Upgrade Client - AktualizovaĆ„ - - - Upgrade Client - AktualizovaĆ„ - &About Gridcoin @@ -606,36 +590,12 @@ Adresa: %4 {1 ZobraziĆ„ informĂĄcie o Gridcoin - - &Neural Network - Neural Network - - - - Neural Network - Neural Network - - - &Advanced Configuration - PokročilĂ© nastavenia - - - Advanced Configuration - PokročilĂ© nastavenia - - - - &New User Wizard - Sprevodca nastavenĂ­m - - - - + New User Wizard Sprevodca nastavenĂ­m - + &Voting Hlasovanie @@ -645,15 +605,7 @@ Adresa: %4 {1 Hlasovanie - &Foundation - NadĂĄcia - - - Foundation - NadĂĄcia - - - + &Diagnostics Diagnostika @@ -662,14 +614,6 @@ Adresa: %4 {1 Diagnostics Diagnostika - - FA&Q - FA&Q - - - Interactive FAQ - InteraktĂ­vne FAQ - Modify configuration options for Gridcoin @@ -691,14 +635,14 @@ Adresa: %4 {1 - + [testnet] [testovacia sieĆ„] - + Gridcoin client Gridcoin klient @@ -708,23 +652,7 @@ Adresa: %4 {1 %1 aktĂ­vne spojenie s Gridcoin sieĆ„ov - %1 second(s) ago - pred %1 sekundou - - - %1 minute(s) ago - pred %1 minĂștou - - - %1 hour(s) ago - pred %1 hodinou - - - %1 day(s) ago - pred %1 dƈom - - - + Last received block was generated %1. PoslednĂœ prijatĂœ blok bol vytvorenĂœ %1. @@ -769,18 +697,7 @@ Adresa: %4 {1 Pozor! - ChybnĂĄ cesta k BOINCu! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - DĂĄtum: %1 -Suma: %2 -Typ: %3 -Adresa: %4 - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI nemoĆŸno analyzovaĆ„! Toto mĂŽĆŸe byĆ„ spĂŽsobenĂ© neplatnou Gridcoin adresu alebo chybnĂœmi URI parametrami. @@ -839,7 +756,7 @@ Adresa: %4 - + %n second(s) %n sekunda @@ -875,39 +792,7 @@ Adresa: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - StĂĄvkujem.<br>VaĆĄa vĂĄha: %1<br>VĂĄha siete: %2<br>Odmenu dostanete<b>odhadom</b> o %3. %4 - - - Not staking because wallet is locked - NestĂĄvkujem pretoĆŸe peƈaĆŸenka je zamknutĂĄ - - - Not staking because wallet is offline - NestĂĄvkujem pretoĆŸe peƈaĆŸenka je offline - - - Not staking because wallet is syncing - NestĂĄvkujem pretoĆŸe peƈaĆŸenka sa synchronizuje - - - Not staking because you don't have mature coins and stake weight is too low. - NestĂĄvkujem pretoĆŸe nemĂĄte odleĆŸanĂ© mince a vaĆĄa vĂĄha je prĂ­liĆĄ nĂ­zka - - - Not staking because you don't have mature coins - NestĂĄvkujem pretoĆŸe nemĂĄte odleĆŸanĂ© mince - - - Searching for mature coins... Please wait - HÄŸadĂĄm odleĆŸanĂ© mince - - - Not staking - NestĂĄvkujem - - - + &File &SĂșbor @@ -922,17 +807,12 @@ Adresa: %4 - - &Advanced - PokročilĂ© - - - + &Help &Pomoc - + Processed %n block(s) of transaction history. SpracovanĂœch %n blok transakčnej histĂłrie. @@ -946,12 +826,12 @@ Adresa: %4 AktualizovanĂœ - + Catching up... SĆ„ahujem... - + Sent transaction OdoslanĂ© transakcie @@ -961,16 +841,12 @@ Adresa: %4 PrijatĂĄ transakcia - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - PeƈaĆŸenka je <b>zaĆĄifrovanĂĄ</b> a momentĂĄlne <b>odomknutĂĄ</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> PeƈaĆŸenka je <b>zaĆĄifrovanĂĄ</b> a momentĂĄlne <b>zamknutĂĄ</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. DoĆĄlo k zĂĄvaĆŸnej chybe. Gridcoin uĆŸ nemĂŽĆŸe pokračovaĆ„ bezpečne a bude ukončenĂœ. @@ -978,7 +854,7 @@ Adresa: %4 ClientModel - + Network Alert VĂœstraha siete @@ -1060,10 +936,6 @@ Adresa: %4 (un)select all (ne)vybraĆ„ vĆĄetko - - List mode - ZoznamovĂœ reĆŸim - Amount @@ -1443,7 +1315,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. NewPollDialog - + Create Poll @@ -1656,10 +1528,6 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Map port using &UPnP MapovaĆ„ port pomocou &UPnP - - Proxy &IP: - Proxy &IP: - &Port: @@ -1893,6 +1761,14 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. nesynchronizovanĂ© + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1954,7 +1830,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. RPCConsole - + @@ -1966,7 +1842,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + N/A nie je k dispozĂ­cii @@ -2046,7 +1922,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Von: - + + &Scraper + + + + Debug log file SĂșbor zĂĄznamu ladenia @@ -2076,7 +1957,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. NapĂ­ĆĄ <b>help</b> pre prehÄŸad dostupnĂœch prĂ­kazov. - + %1 B %1 B @@ -2111,12 +1992,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + Gridcoin - Debug Console - + Boost version @@ -2186,7 +2067,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Meno klienta - + Welcome to the Gridcoin RPC console! @@ -2453,22 +2334,22 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. SendCoinsEntry - + A&mount: Su&ma: - + Pay &To: Zapla&tiĆ„: - + &Label: &Popis: - + Alt+A Alt+A @@ -2509,22 +2390,17 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. OdstrĂĄni? tohto prĂ­jemcu - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Form FormulĂĄr - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Zadajte Gridcoin adresu (napr. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2766,22 +2642,47 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + Source Zdroj - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + TX ID @@ -2816,10 +2717,6 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Transaction Inputs - - Generated - VygenerovanĂ© - @@ -2858,10 +2755,6 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - InformĂĄcia - label @@ -2909,18 +2802,6 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Comment KomentĂĄr - - Transaction ID - ID transakcie - - - Transaction - Transakcia - - - Inputs - Vstupy - Amount @@ -2937,7 +2818,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. nepravda - + Open for %n more block(s) OtvorenĂĄ pre %n ďalĆĄĂ­ blok @@ -2959,12 +2840,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. TĂĄto časĆ„ obrazovky zobrazuje detailnĂœ popis transakcie - - View Attachment - - - - + Execute Contract @@ -2973,21 +2849,11 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. C&lose ZatvoriĆ„ - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date DĂĄtum @@ -3031,32 +2897,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Cie?ovĂĄ adresa transakcie. - + Open until %1 OtvorenĂ© do %1 @@ -3086,7 +2932,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Vypo?Ă­tanĂ© ale neakceptovanĂ© - + Received with PrijatĂ© s @@ -3106,12 +2952,42 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Platba sebe samĂ©mu - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Status transakcie. Presu?te myĆĄ nad toto pole a zobrazĂ­ sa po?et potvrdenĂ­. @@ -3300,17 +3176,10 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. do - - UpgradeDialog - - Hide - SkryĆ„ - - VotingChartDialog - + Poll Results @@ -3454,7 +3323,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. VotingVoteDialog - + PlaceVote @@ -3487,7 +3356,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. WalletModel - + Sending... Posielam... @@ -3495,12 +3364,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. bitcoin-core - + Options: MoĆŸnosti: - + This help message TĂĄto pomocnĂĄ sprĂĄva @@ -3535,12 +3404,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Ur?i? aut spojenia v milisekundĂĄch (predvolenĂ©: 5000) - + Connect through socks proxy Pripojenie cez SOCKS proxy - + Select the version of socks proxy to use (4-5, default: 5) Vyberte verziu SOCKS proxy pre pouĆŸĂ­vanie (4-5, predvolenĂ©: 5) @@ -3550,7 +3419,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. PouĆŸi? proxy server k zĂ­skaniu Tor skrytĂœch sluĆŸieb (predvolenĂ©: rovnakĂĄ ako -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Po?Ășva? pripojenia na <port> (predvolenĂ©: 15714 alebo testovacia sie?: 25714) {32749 ?} {32748)?} @@ -3560,7 +3429,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. UdrĆŸiava? maximĂĄlne <n> spojenĂ­ (predvolenĂ©: 125) - + Connect only to the specified node(s) Pripoji? sa len k ur?enĂ©mu uzlu(om) @@ -3570,26 +3439,22 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. PripojiĆ„ sa k uzlu, zĂ­skaĆ„ adresy ďalĆĄĂ­ch počítačov v sieti a odpojiĆ„ sa - + Specify your own public address Určite vaĆĄu vlastnĂș verejnĂș adresu - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Pripoji? len k uzlom siete <net> (IPv4, IPv6 alebo Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Objavte vlastnĂș IP adresa (predvolenĂ©: 1 pri po?ĂșvanĂ­ a nie -externalip) - Find peers using internet relay chat (default: 0) - NĂĄjs? peerov pomocou Internet Relay Chat (predvolenĂ©: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) PrijĂ­ma? pripojenie z vonka (predvolenĂ©: 1, ak nie -proxy alebo -connect) @@ -3599,26 +3464,22 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Spoji? do danej adresy. PouĆŸite [host]:port zĂĄpis pre IPv6 - + Find peers using DNS lookup (default: 1) NĂĄjs? peerov pomocou vyh?adĂĄvania DNS (predvolenĂ©: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) SynchronizĂĄcia ?asu s ostatnĂœmi uzlami. ZakĂĄza? ak ?as na vaĆĄom systĂ©me je presnĂœ, napr synchronizĂĄciu s NTP (predvolenĂ©: 1) - Sync checkpoints policy (default: strict) - Sync checkpoints policy (predvolenĂ©: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) Hranica pre odpojenie zle sa sprĂĄvajĂșcich peerov (predvolenĂ©: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Po?et sekĂșnd kedy sa zabrĂĄni zle sa sprĂĄvajĂșcim peerom znovupripojenie (predvolenĂ©: 86400) @@ -3713,6 +3574,16 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3773,6 +3644,11 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. ERROR + + + Entire balance reserved + + Expires @@ -3838,11 +3714,6 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Message SprĂĄva - - - Messate Type - - Miner: @@ -3879,12 +3750,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - - No coins; - - - - + Offline; @@ -3894,12 +3760,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3979,12 +3840,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. SkĂșsi? pouĆŸi? UPnP pre mapovanie po?ĂșvajĂșceho portu (default: 0) - + Fee per KB to add to transactions you send Poplatok za KB prida? do transakciĂ­, ktorĂ© odosielate - + When creating transactions, ignore inputs with value less than this (default: 0.01) Pri vytvĂĄranĂ­ transakciĂ­, ignorova? vstupy s hodnotou niĆŸĆĄou neĆŸ tĂĄto (predvolenĂ©: 0.01) @@ -3994,12 +3855,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. PrijĂ­maĆ„ prĂ­kazy z prĂ­kazovĂ©ho riadku a JSON-RPC - + Use the test network PouĆŸi? testovaciu sie? - + Output extra debugging information. Implies all other -debug* options VĂœstupnĂ© ?alĆĄie informĂĄcie o ladenĂ­. ZnamenĂĄ vĆĄetky -debug* moĆŸnosti @@ -4009,7 +3870,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. VĂœstupnĂ© ?alĆĄie sie?ovĂ© informĂĄcie o ladenĂ­ - + Prepend debug output with timestamp Pred debug vĂœstup s ?asovou pe?iatkou @@ -4019,7 +3880,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Posla? stopy/ladiace informĂĄcie do debuggera - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Po?Ășvajte pre JSON-RPC spojenie na <port> (predvolenĂ©: 15715 alebo testovaciasie?: 25715) @@ -4029,7 +3890,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Povoli? JSON-RPC spojenia z ur?enej IP adresy. - + Send commands to node running on <ip> (default: 127.0.0.1) Posla? prĂ­kaz nĂłde beĆŸiacej na <ip> (predvolenĂ©: 127.0.0.1) @@ -4039,7 +3900,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. PoĆŸadova? potvrdenie pre zmenu (predvolenĂ©: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Presadzova? transak?nĂ© skripty k pouĆŸĂ­vaniu kanonickĂœch PUSH operĂĄtorov (predvolenĂ©: 1) @@ -4049,7 +3910,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Spusti? prĂ­kaz, ke? je prijatĂ© prĂ­sluĆĄnĂ© upozornenie (%s v cmd je nahradenĂœ sprĂĄvou) - + Upgrade wallet to latest format Aktualizuj pe?aĆŸenku na najnovĆĄĂ­ formĂĄt. @@ -4064,7 +3925,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Znovu skenova? re?az blokov pre chĂœbajĂșce transakcie - + Attempt to recover private keys from a corrupt wallet.dat Pokus obnovi? sĂșkromnĂ© k?Ăș?e z poĆĄkodenĂ©ho wallet.dat @@ -4084,7 +3945,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + Boinc Mining @@ -4094,7 +3955,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + Error obtaining next project. Error 06172014. @@ -4144,12 +4005,32 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4164,12 +4045,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Nastavte maximĂĄlnu ve?kos? bloku v bajtoch (predvolenĂ©: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Nastavte maximĂĄlnu ve?kos? high-priority/low-fee transakciĂ­ v bajtoch (predvolenĂ©: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL moĆŸnos?: (pozrite Bitcoin Wiki pre nĂĄvod na nastavenie SSL) @@ -4189,21 +4070,17 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. SĂșkromnĂœ k?Ăș? servra (predvolenĂ©: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Akceptovate?nĂ© ciphers (predvolenĂ©: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' NeplatnĂĄ suma pre -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Upozornenie: -paytxfee je nastavenĂ© ve?mi vysoko. Toto sĂș transak?nĂ© poplatky ktorĂ© zaplatĂ­te ak odoĆĄlete transakciu. - + Invalid amount for -mininput=<amount>: '%s' NeplatnĂĄ suma pre -mininput=<amount>: '%s' @@ -4213,22 +4090,22 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. - + Wallet %s resides outside data directory %s. Pe?aĆŸenka %s bydlisko mimo dĂĄtovĂœ adresĂĄr %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. NemoĆŸno zĂ­ska? zĂĄmok na dĂĄtovĂœ adresĂĄr %s. Gridcoin uĆŸ pravdepodobne beĆŸĂ­. - + Verifying database integrity... Overenie integrity databĂĄzy ... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Chyba pri inicializĂĄcii databĂĄzy prostredie %s! Ak chcete obnovi?, ZÁLOHUJTE TENTO ADRESÁR, potom vĆĄetko z neho odstrĂĄnte okrem wallet.dat. @@ -4238,10 +4115,15 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Upozornenie: wallet.dat poĆĄkodenĂœ, Ășdaje zachrĂĄnenĂ©! PĂŽvodnĂœ wallet.dat bol uloĆŸenĂœ ako wallet.{timestamp}.bak v %s; ak vĂĄĆĄ zostatok alebo transakcie nie sĂș sprĂĄvne, mali by ste obnovi? zo zĂĄlohy. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4258,17 +4140,17 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. wallet.dat je poĆĄkodenĂœ, zĂĄchrana zlyhala - + Unknown -socks proxy version requested: %i NeznĂĄma poĆŸadovanĂĄ SOCKS proxy verzia:% i - + Invalid -tor address: '%s' NeplatnĂĄ -tor adresa: '%s' - + Cannot resolve -bind address: '%s' NemoĆŸno rozloĆŸi? -bind adresu: '%s' @@ -4278,16 +4160,10 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. NemoĆŸno rozloĆŸi? -externalip adresu: '%s' - + Invalid amount for -reservebalance=<amount> NeplatnĂĄ suma pre -reservebalance=<mnoĆŸstvo> - - Unable to sign checkpoint, wrong checkpointkey? - - NemoĆŸno podpĂ­sa? kontrolnĂœ bod, zlĂœ checkpointkey? - - Error loading blkindex.dat @@ -4299,22 +4175,22 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Chyba na?Ă­tania wallet.dat: Pe?aĆŸenka je poĆĄkodenĂĄ - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Upozornenie: Chyba pri ?Ă­tanĂ­ wallet.dat! VĆĄetky k?Ăș?e na?Ă­tanĂ© sprĂĄvne, ale transak?nĂ© dĂĄta alebo poloĆŸky adresĂĄra mĂŽĆŸe chĂœba? alebo by? nesprĂĄvne. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Chyba pri na?Ă­tanĂ­ wallet.dat: Pe?aĆŸenka vyĆŸaduje novĆĄiu verziu Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Pe?aĆŸenka potrebuje by? prepĂ­sanĂĄ: reĆĄtartujte Gridcoin k dokon?eniu - + Error loading wallet.dat Chyba na?Ă­tania wallet.dat @@ -4334,17 +4210,17 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Chyba: nemoĆŸno spusti? uzol - + Unable to bind to %s on this computer. Gridcoin is probably already running. NemĂŽĆŸem sa pripoji? na %s na tomto po?Ă­ta?i. Gridcoin je pravdepodobne uĆŸ beĆŸĂ­. - + Unable to bind to %s on this computer (bind returned error %d, %s) NemĂŽĆŸem sa pripoji? k %s na tomto po?Ă­ta?i (bind vrĂĄtil chybu %d, %s) - + Error: Wallet locked, unable to create transaction Chyba: Pe?aĆŸenka je zamknutĂĄ, nie je moĆŸnĂ© vytvori? transakciu @@ -4354,59 +4230,47 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Chyba: Pe?aĆŸenka odomknutĂ© len pre stĂĄvkovanie, nemoĆŸnĂ© vytvori? transakciu. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Chyba: TĂĄto operĂĄcia vyĆŸaduje transak?nĂœ poplatok vo vĂœĆĄke aspo? %s, pretoĆŸe jeho mnoĆŸstvo, zloĆŸitos?, alebo pouĆŸitĂ­m nedĂĄvno prijatĂœch finan?nĂœch prostriedkov - + Error: Transaction creation failed Chyba: Vytvorenie transakcie zlyhalo - + Sending... Posielam... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Chyba: Transakcia bola zamietnutĂĄ. To mĂŽĆŸe nasta?, ak niektorĂ© z mincĂ­ vo vaĆĄej pe?aĆŸenke sa uĆŸ pouĆŸili, ako naprĂ­klad, ak ste pouĆŸili kĂłpiu wallet.dat a mince boli pouĆŸitĂ© v kĂłpii, ale neboli ozna?enĂ© ako pouĆŸitĂ© tu. - + Invalid amount NeplatnĂĄ suma - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Upozornenie: Skontrolujte, ĆŸe dĂĄtum a ?as po?Ă­ta?a sĂș sprĂĄvne! Ak je VĂĄĆĄ ?as nesprĂĄvny Gridcoin nebude pracova? sprĂĄvne. - Warning: This version is obsolete, upgrade required! - Upozornenie: TĂĄto verzia je zastaranĂĄ, vyĆŸaduje sa aktualizĂĄcia! - - - WARNING: synchronized checkpoint violation detected, but skipped! - UPOZORNENIE: detekovanĂœ synchronizovanĂœ poruĆĄenĂœ checkpoint, ale presko?enĂœ! - - - + Warning: Disk space is low! Upozornenie: Nedostatok miesta na disku! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - UPOZORNENIE: NeplatnĂœ checkpoint nĂĄjdenĂœ! UvedenĂ© transakcie nemusia by? sprĂĄvne! MoĆŸno budete musie? upgradova?, alebo upozorni? vĂœvojĂĄrov. - - - + Run in the background as a daemon and accept commands BeĆŸaĆ„ na pozadĂ­ ako dĂ©mon a prijĂ­maĆ„ prĂ­kazy - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Vykonaj prĂ­kaz keď sa zmenĂ­ transakcia peƈaĆŸenky (%s v prĂ­kaze je nahradenĂĄ TxID) @@ -4416,12 +4280,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. VoÄŸby vytvorenia bloku: - + Failed to listen on any port. Use -listen=0 if you want this. Chyba počĂșvania na ktoromkoÄŸvek porte. PouĆŸi -listen=0 ak toto chcete. - + Specify wallet file (within data directory) Označ sĂșbor peƈaĆŸenky (v priečinku s dĂĄtami) @@ -4446,7 +4310,7 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. Heslo pre JSON-rPC spojenia - + Execute command when the best block changes (%s in cmd is replaced by block hash) Vykonaj prĂ­kaz, ak zmeny v najlepĆĄom bloku (%s v prĂ­kaze nahradĂ­ blok hash) @@ -4456,12 +4320,12 @@ To znamenĂĄ, ĆŸe je potrebnĂœ poplatok aspoƈ %2. PovoliĆ„ vyhÄŸadĂĄvanie DNS pre pridanie nĂłdy a spojenie - + To use the %s option PouĆŸi? %s moĆŸnos?. - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4495,12 +4359,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Ak sĂșbor neexistuje, vytvorte ho s oprĂĄvnenĂ­m pre ?Ă­tanie len vlastnĂ­kom (owner-readable-only) - + Gridcoin version Gridcoin verzia - + Usage: PouĆŸitie: @@ -4510,7 +4374,7 @@ Ak sĂșbor neexistuje, vytvorte ho s oprĂĄvnenĂ­m pre ?Ă­tanie len vlastnĂ­kom (o - + List commands Zoznam prĂ­kazov @@ -4535,12 +4399,12 @@ Ak sĂșbor neexistuje, vytvorte ho s oprĂĄvnenĂ­m pre ?Ă­tanie len vlastnĂ­kom (o NeplatnĂĄ adresa proxy: '%s' - + Unknown network specified in -onlynet: '%s' NeznĂĄma sieĆ„ upresnenĂĄ v -onlynet: '%s' - + Insufficient funds Nedostatok prostriedkov @@ -4550,17 +4414,17 @@ Ak sĂșbor neexistuje, vytvorte ho s oprĂĄvnenĂ­m pre ?Ă­tanie len vlastnĂ­kom (o Načítavanie zoznamu blokov... - + Add a node to connect to and attempt to keep the connection open PridaĆ„ nĂłd na pripojenie a pokus o udrĆŸanie pripojenia otvorenĂ©ho - + Loading wallet... Načítavam peƈaĆŸenku... - + Cannot downgrade wallet Nie je moĆŸnĂ© prejsĆ„ na niĆŸĆĄiu verziu peƈaĆŸenky @@ -4570,17 +4434,17 @@ Ak sĂșbor neexistuje, vytvorte ho s oprĂĄvnenĂ­m pre ?Ă­tanie len vlastnĂ­kom (o Nie je moĆŸnĂ© zapĂ­saĆ„ predvolenĂș adresu. - + Rescanning... NovĂ© prehÄŸadĂĄvanie... - + Done loading DokončenĂ© načítavanie - + Error Chyba diff --git a/src/qt/locale/bitcoin_sl_SI.ts b/src/qt/locale/bitcoin_sl_SI.ts index 1045908d73..05d1fe3f0e 100644 --- a/src/qt/locale/bitcoin_sl_SI.ts +++ b/src/qt/locale/bitcoin_sl_SI.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -To je poizkusen softver. - -Distribuiran pod MIT/X11 softversko licenco, glej priloĆŸeno datoteko COPYING ali http://www.opensource.org/licenses/mit-license.php. - -Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v OpenSSL Toolkit (http://www.openssl.org/) in kriptografski softver, ki ga je napisal Eric Young (eay@cryptsoft.com), ter UPnP softver, ki ga je napisal Thomas Bernard. - AddressBookPage @@ -313,12 +299,12 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open BitcoinGUI - + Sign &message... PodpiĆĄi &sporočilo ... - + &Overview Pre&gled @@ -414,7 +400,7 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open Ustavite program - + &Options... &MoĆŸnosti ... @@ -428,19 +414,11 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open Encrypt or decrypt wallet Ć ifriraj ali deĆĄifriraj denarnico - - &Backup Wallet... - Shrani &varnostno kopijo denarnice ... - &Change Passphrase... &Spremeni geslo ... - - Backup wallet to another location - Shranite varnostno kopijo svoje denarnice na drugo lokacijo - Change the passphrase used for wallet encryption @@ -492,7 +470,7 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open &Preveri sporočilo ... - + Wallet Denarnica @@ -502,7 +480,7 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open Gridcoin - + &Send &PoĆĄlji @@ -522,28 +500,12 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open PokaĆŸi informacije o Gridcoin - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -553,7 +515,7 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open - + &Diagnostics @@ -583,14 +545,14 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open - + [testnet] [testnet] - + Gridcoin client Gridcoin program @@ -600,23 +562,7 @@ Ta proizvod vklju?uje softver razvit s strani projekta OpenSSL za uporabo v Open %1 aktivne povezave na Gridcoin omreĆŸje - %1 second(s) ago - pred %1 sekundo - - - %1 minute(s) ago - Pred %1 minuto - - - %1 hour(s) ago - Pred %1 uro. - - - %1 day(s) ago - Pred %1 dnevom. - - - + Last received block was generated %1. Zadnji prejeti blok je bil ustvarjen %1. @@ -676,7 +622,7 @@ Naslov: %4 ?} {4?} - + Wallet is <b>encrypted</b> and currently %1 @@ -723,7 +669,7 @@ Naslov: %4 - + %n second(s) @@ -773,27 +719,37 @@ Naslov: %4 - Not staking because wallet is locked - Ne deleĆŸite ker je denarnica zakljenjena + + Scraper: waiting on wallet to sync. + - Not staking because wallet is offline - Ne deleĆŸite ker denarnica ni povezana + + Scraper: superblock not needed - inactive. + - Not staking because wallet is syncing - Ne deleĆŸite ker se denarnica sinhronizira z omreĆŸjem + + Scraper: downloading and processing stats. + - Not staking because you don't have mature coins - Ne deleĆŸite ker nimate zrelih kovancev. + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + - Not staking - Ne deleĆŸite + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &Datoteka @@ -808,17 +764,12 @@ Naslov: %4 - - &Advanced - - - - + &Help &Pomoč - + Processed %n block(s) of transaction history. %n obdelan blok zgodovine transakcij. @@ -873,12 +824,12 @@ Naslov: %4 Posodobljeno - + Catching up... Dohitevam omreĆŸje ... - + Sent transaction Odlivi @@ -888,19 +839,7 @@ Naslov: %4 Prilivi - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Koli?ina: %2 -Vrsta: %3 -Naslov: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI ne more biti raz?lenjen! To se lahko zgodi zaradi neveljavnega Gridcoin naslova ali slabih parametrov URI. @@ -911,17 +850,13 @@ Naslov: %4 URI handling Rokovanje z URI - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Denarnica je <b>ĆĄifrirana</b> in trenutno <b>odklenjena</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Denarnica je <b>ĆĄifrirana</b> in trenutno <b>zaklenjena</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. PriĆĄlo je do usodne napake. Program Gridcoin se ne more ve? varno nadaljevati in se bo zato zaprl. @@ -929,7 +864,7 @@ Naslov: %4 ClientModel - + Network Alert OmreĆŸno Opozorilo @@ -1011,10 +946,6 @@ Naslov: %4 (un)select all izberi vse/nič - - List mode - Seznam - Amount @@ -1394,7 +1325,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". NewPollDialog - + Create Poll @@ -1607,10 +1538,6 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Map port using &UPnP Preslikaj vrata z uporabo &UPnP - - Proxy &IP: - Naslov &IP posredniĆĄkega streĆŸnika: - &Port: @@ -1844,6 +1771,14 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". nesinhronizirano + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1905,7 +1840,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". RPCConsole - + @@ -1917,7 +1852,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + N/A Neznano @@ -1997,7 +1932,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Odhodnih: - + + &Scraper + + + + Debug log file Razhroơčevalni dnevnik @@ -2027,7 +1967,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Vtipkajte <b>help</b> za pregled razpoloĆŸljivih ukazov. - + %1 B %1 B @@ -2062,12 +2002,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Gridcoin - Debug Console - + Boost version @@ -2137,7 +2077,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Ime odjemalca - + Welcome to the Gridcoin RPC console! @@ -2404,22 +2344,22 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". SendCoinsEntry - + A&mount: &Znesek: - + Pay &To: Prejemnik &plačila: - + &Label: &Oznaka: - + Alt+A Alt+A @@ -2439,12 +2379,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Sporočilo: - + Form Oblika - + Enter a label for this address to add it to your address book Vnesite oznako za ta naslov, ki bo shranjena v imenik @@ -2465,17 +2405,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Odstrani tega prejemnika - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2728,26 +2663,47 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Source Izvor - Generated - Generirano + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From PoĆĄiljatelj @@ -2863,27 +2819,11 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Transaction Inputs - - Transaction ID - ID transakcije - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informacije - - - Transaction - Transakcija - - - Inputs - Vnosi - Amount @@ -2913,12 +2853,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". V tem podoknu so prikazane podrobnosti o transakciji - - View Attachment - - - - + Execute Contract @@ -2927,21 +2862,11 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". C&lose &Zapri - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Datum @@ -3016,7 +2941,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Generirano, toda ne sprejeto - + Received with Prejeto z @@ -3036,32 +2961,42 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Izpla?ilo sebi - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (ni na voljo) - + Transaction status. Hover over this field to show number of confirmations. Stanje transakcije. Zapeljite z miĆĄko ?ez to polje za prikaz ĆĄtevila potrdil. @@ -3255,17 +3190,10 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". za - - UpgradeDialog - - Hide - Skrij - - VotingChartDialog - + Poll Results @@ -3409,7 +3337,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". VotingVoteDialog - + PlaceVote @@ -3442,7 +3370,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". WalletModel - + Sending... PoĆĄiljanje... @@ -3450,12 +3378,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". bitcoin-core - + Options: MoĆŸnosti: - + This help message To sporo?ilo pomo?i @@ -3485,12 +3413,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Dolo?i ?as pavze povezovanja v milisekundah (privzeto: 5000) - + Connect through socks proxy PoveĆŸi se skozi socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Izberi verzijo socks proxya za uporabo (4-5, privzeto: 5) @@ -3500,7 +3428,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Uporabi proxy za povezavo s skritimi storitvami tora (privzeto: isto kot -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Sprejmi povezave na <port> (privzeta vrata: 15714 ali testnet: 25714) {32749 ?} {32748)?} @@ -3510,7 +3438,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". ObdrĆŸi maksimalno ĆĄtevilo <n> povezav (privzeto: 125) - + Connect only to the specified node(s) PoveĆŸi se samo na dolo?ena vozliĆĄ?e(a) @@ -3520,26 +3448,22 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". PoveĆŸite se z vozliơčem za pridobitev naslovov soleĆŸnikov in nato prekinite povezavo. - + Specify your own public address Določite vaĆĄ lasten javni naslov - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) PoveĆŸi se samo z vozliĆĄ?i v omreĆŸju <net> (IPv4, IPv6 in Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Odkrij svoj IP naslov (privzeto: 1 ob posluĆĄanju, ko ni aktiviran -externalip) - Find peers using internet relay chat (default: 0) - Najdi soleĆŸnike prek irca (privzeto: 0) - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Sprejmi zunanje povezave (privzeto: 1 ?e ni nastavljen -proxy ali -connect) @@ -3549,26 +3473,22 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". NaveĆŸi na dani naslov. Uporabi [host]:port ukaz za IPv6 - + Find peers using DNS lookup (default: 1) Najdi soleĆŸnike z uporabno DNS vpogleda (privzeto: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Sinhroniziraj ?as z drugimi vozliĆĄ?i. Onemogo?i, ?e je ?as na vaĆĄem sistemu to?no nastavljen, npr. sinhroniziranje z NTP (privzeto: 1) - Sync checkpoints policy (default: strict) - Sinhronizacija na?ina to?k preverjanja (privzeto: strogo) - - - + Threshold for disconnecting misbehaving peers (default: 100) Prag za prekinitev povezav s slabimi odjemalci (privzeto: 1000) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Ć tevilo sekund preden se ponovno poveĆŸejo neodzivni soleĆŸniki (privzeto: 86400) @@ -3663,6 +3583,16 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3723,6 +3653,11 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". ERROR + + + Entire balance reserved + + Expires @@ -3788,11 +3723,6 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Message Sporo?ilo - - - Messate Type - - Miner: @@ -3829,12 +3759,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - - No coins; - - - - + Offline; @@ -3844,12 +3769,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3929,12 +3849,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Uporabi UPnP za mapiranje vrat posluĆĄanja (privzeto: 0) - + Fee per KB to add to transactions you send Provizija na KB ki jo morate dodati transakcijam, ki jih poĆĄiljate - + When creating transactions, ignore inputs with value less than this (default: 0.01) Ob ustvarjanju transakcij, prezri vnose z manjĆĄo vrednostjo kot (privzeto: 0.01) @@ -3944,7 +3864,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Sprejemaj ukaze iz ukazne vrstice in preko JSON-RPC - + Run in the background as a daemon and accept commands Teci v ozadju in sprejemaj ukaze @@ -3954,7 +3874,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Uporabi testno omreĆŸje - + Output extra debugging information. Implies all other -debug* options Output dodatnih informacij razhroĆĄ?evanja. Obsega vse druge -debug* moĆŸnosti. @@ -3964,7 +3884,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Output dodatnih informacij razhroĆĄ?evanja omreĆŸja. - + Prepend debug output with timestamp Opremi output rahroĆĄ?evanja s ?asovnim ĆŸigom. @@ -3974,7 +3894,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". PoĆĄlji sledilne/razhroĆĄ?evalne informacije v razhroĆĄ?evalnik - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Sprejmi povezave na <port> (privzeta vrata: 15714 ali testnet: 25714) @@ -3984,7 +3904,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Dovoli JSON-RPC povezave z dolo?enega IP naslova - + Send commands to node running on <ip> (default: 127.0.0.1) PoĆĄlji ukaze vozliĆĄ?u na <ip> (privzet: 127.0.0.1) @@ -3994,7 +3914,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Zahtevaj potrditve za spremembo (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Zahtevaj da transakcijske skripte uporabljajo operatorje canonical PUSH (privzeto: 1) @@ -4004,7 +3924,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". IzvrĆĄi ukaz, ko je prejet relevanten alarm (%s je v cmd programu nadomeĆĄ?en s sporo?ilom) - + Upgrade wallet to latest format Posodobi denarnico v najnovejĆĄi zapis @@ -4019,7 +3939,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Ponovno preglej verigo blokov za manjkajo?e transakcije denarnice - + Attempt to recover private keys from a corrupt wallet.dat Poizkusi reĆĄiti zasebni klju? iz pokvarjene wallet.dat @@ -4039,7 +3959,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Boinc Mining @@ -4049,7 +3969,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Error obtaining next project. Error 06172014. @@ -4099,12 +4019,32 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4119,12 +4059,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Nastavi najve?jo velikost bloka v bajtih (privzeto: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Nastavi maksimalno velikost visoke-prioritete/nizke-provizije transakcij v bajtih (privzeto: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL moĆŸnosti: (glejte Bitcoin Wiki za navodla, kako nastaviti SSL) @@ -4144,21 +4084,17 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Zasebni klju? streĆŸnika (privzet: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Dovoljeni kodirniki (privzeti: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Neveljavni znesek za -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Opozorilo: -paytxfee je nastavljen zelo visoko! To je transakcijska provizija, ki jo boste pla?ali ob poĆĄiljanju transakcije. - + Invalid amount for -mininput=<amount>: '%s' Neveljavni znesek za -miniput=<amount>: '%s' @@ -4168,22 +4104,22 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Wallet %s resides outside data directory %s. Denarnica %s se nahaja zunaj datote?nega imenika %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Ni bilo mogo?e najti podatkovnega imenika %s. Aplikacija Gridcoin je verjetno ĆŸe zagnana. - + Verifying database integrity... Potrdite neopore?nost baze podatkov... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Napaka pri zagonu podatkovne baze okolja %s! Za popravilo, NAPRAVITE VARNOSTNO KOPIJO IMENIKA, in iz njega odstranite vse razen datoteke wallet.dat @@ -4193,10 +4129,15 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Opozorilo: wallet.dat je pokvarjena, podatki reĆĄeni! Originalna wallet.dat je bila shranjena kot denarnica. {timestamp}.bak v %s; ?e imate napa?no prikazano stanje na ra?unu ali v transakcijah prenovite datoteko z varnostno kopijo. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4213,17 +4154,17 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". wallet.dat poĆĄkodovana, neuspeĆĄna obnova - + Unknown -socks proxy version requested: %i Zahtevana neznana -socks proxy razli?ica: %i - + Invalid -tor address: '%s' Neveljaven -tor naslov: '%s' - + Cannot resolve -bind address: '%s' Ni mogo?e dolo?iti -bind naslova: '%s' @@ -4233,16 +4174,10 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Ni mogo?e dolo?iti -externalip naslova: '%s' - + Invalid amount for -reservebalance=<amount> Neveljavni znesek za -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - Ni bilo mogo?e vpisati to?ke preverjanja, napa?en klju? za to?ko preverjanja? - - Error loading blkindex.dat @@ -4254,22 +4189,22 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Napaka pri nalaganju wallet.dat: denarnica pokvarjena - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Opozorilo: napaka pri branju wallet.dat! Vsi klju?i so bili pravilno prebrani, podatki o transakciji ali imenik vneĆĄenih naslovov so morda izgubljeni ali nepravilni. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Napaka pri nalaganju wallet.dat: denarnica zahteva novejĆĄo verzijo Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete Denarnica mora biti prepisana: ponovno odprite Gridcoin za dokon?anje - + Error loading wallet.dat Napaka pri nalaganju wallet.dat @@ -4289,17 +4224,17 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Napaka: ni mogo?e zagnati vozliĆĄ?a - + Unable to bind to %s on this computer. Gridcoin is probably already running. Navezava v %s na tem ra?unalniku ni mogo?a Gridcoin aplikacija je verjetno ĆŸe zagnana. - + Unable to bind to %s on this computer (bind returned error %d, %s) Na tem ra?unalniku je bilo nemogo?e vezati na %s (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction Napaka: Zaklenjena denarnica, ni mogo?e opraviti transakcije @@ -4309,54 +4244,42 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Napaka: Ta transakcija zahteva transakcijsko provizijo vsaj %s zaradi svoje koli?ine, kompleksnosti ali uporabo sredstev, ki ste jih prejeli pred kratkim. - + Error: Transaction creation failed Napaka: Ustvarjanje transakcije spodletelo - + Sending... PoĆĄiljanje... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Napaka: Transakcija je bila zavrnjena. To se je lahko zgodilo, ?e so bili kovanci v vaĆĄi denarnici ĆŸe zapravljeni, na primer ?e ste uporabili kopijo wallet.dat in so bili kovanci zapravljeni v kopiji, a tu ĆĄe niso bili ozna?eni kot zapravljeni. - + Invalid amount Neveljavna koli?ina - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Opozorilo: Prosimo preverite svoj datum in ?as svojega ra?unalnika! ?e je vaĆĄa ura nastavljena napa?no Gridcoin ne bo deloval. - Warning: This version is obsolete, upgrade required! - Opozorilo: ta razli?ica je zastarela, potrebna je nadgradnja! - - - WARNING: synchronized checkpoint violation detected, but skipped! - OPOZORILO: zaznana je bila krĆĄitev s sinhronizirami to?kami preverjanja, a je bila izpuĆĄ?ena. - - - + Warning: Disk space is low! Opozorilo: Malo prostora na disku! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - OPOZORILO: Najdene so bile neveljavne to?ke preverjanja! Prikazane transakcije so morda napa?ne! PoiĆĄ?ite novo razli?ico aplikacije ali pa obvestite razvijalce. - - - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Izvedi ukaz, ko bo transakcija denarnice se spremenila (V cmd je bil TxID zamenjan za %s) @@ -4366,12 +4289,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". MoĆŸnosti ustvarjanja blokov: - + Failed to listen on any port. Use -listen=0 if you want this. Ni mogoče posluĆĄati na nobenih vratih. Če to zares ĆŸelite, uporabite opcijo -listen=0. - + Specify configuration file (default: gridcoinresearch.conf) @@ -4401,7 +4324,7 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Geslo za povezave na JSON-RPC - + Execute command when the best block changes (%s in cmd is replaced by block hash) Izvedi ukaz, ko je najden najboljĆĄi blok (niz %s v ukazu bo zamenjan s hash vrednostjo bloka) @@ -4411,12 +4334,12 @@ Ta oznaka se obarva rde?e, ?e je prioriteta manjĆĄa kot "srednja". Omogoči poizvedbe DNS za opcije -addnode, -seednode in -connect. - + To use the %s option Za uporabo %s opcije - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4450,12 +4373,12 @@ If the file does not exist, create it with owner-readable-only file permissions. ?e datoteka ne obstaja, jo ustvarite z lastniĆĄkimi dovoljenji za datoteke. - + Gridcoin version Gridcoin razli?ica - + Usage: Uporaba: @@ -4465,7 +4388,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands PrikaĆŸi ukaze @@ -4490,12 +4413,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Neveljaven naslov -proxy: '%s' - + Unknown network specified in -onlynet: '%s' Neznano omreĆŸje določeno v -onlynet: '%s'. - + Insufficient funds Premalo sredstev @@ -4505,17 +4428,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Nalagam kazalo blokov ... - + Add a node to connect to and attempt to keep the connection open Dodaj povezavo na vozliơče in jo skuĆĄaj drĆŸati odprto - + Loading wallet... Nalagam denarnico ... - + Cannot downgrade wallet Ne morem @@ -4525,17 +4448,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Ni mogoče zapisati privzetega naslova - + Rescanning... Ponovno pregledujem verigo ... - + Done loading Nalaganje končano - + Error Napaka diff --git a/src/qt/locale/bitcoin_sq.ts b/src/qt/locale/bitcoin_sq.ts index ae916a5b00..317612b054 100644 --- a/src/qt/locale/bitcoin_sq.ts +++ b/src/qt/locale/bitcoin_sq.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Overview &PĂ«rmbledhje @@ -405,28 +405,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -436,7 +450,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -521,24 +535,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [testo rrjetin] - + Gridcoin client @@ -556,7 +565,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -609,7 +618,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -619,13 +628,13 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -657,7 +666,7 @@ Address: %4 - + URI handling @@ -710,7 +719,7 @@ Address: %4 - + %n second(s) @@ -742,12 +751,12 @@ Address: %4 - + Change the passphrase used for wallet encryption Ndrysho frazkalimin e pĂ«rdorur per enkriptimin e portofolit - + Wallet Portofol @@ -757,7 +766,7 @@ Address: %4 - + &Send &Dergo @@ -767,7 +776,7 @@ Address: %4 &Merr - + &Show / Hide &Shfaq / Fsheh @@ -782,7 +791,7 @@ Address: %4 - + &File &Skedar @@ -792,22 +801,22 @@ Address: %4 &Konfigurimet - + &Help &NdihmĂ« - + Up to date I azhornuar - + Catching up... Duke u azhornuar... - + Sent transaction DĂ«rgo transaksionin @@ -817,16 +826,12 @@ Address: %4 Transaksion nĂ« ardhje - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Portofoli po <b> enkriptohet</b> dhe Ă«shtĂ« <b> i ç'kyçur</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Portofoli po <b> enkriptohet</b> dhe Ă«shtĂ« <b> i kyçur</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -834,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1281,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1727,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1793,7 +1806,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information Informacion @@ -1815,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1964,6 +1977,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1990,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2287,22 +2305,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Sh&uma: - + Pay &To: Paguaj &drejt: - + &Label: &EtiketĂ«: - + Alt+A Alt+A @@ -2323,12 +2341,12 @@ This label turns red, if the priority is smaller than "medium". Krijoni njĂ« etiketĂ« pĂ«r kĂ«tĂ« adresĂ« qĂ« t'ja shtoni librit tĂ« adresave - + Form FormilarĂ« - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2348,17 +2366,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2589,12 +2602,42 @@ This label turns red, if the priority is smaller than "medium". - + Source - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2708,10 +2751,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Informacion - true @@ -2723,7 +2762,7 @@ This label turns red, if the priority is smaller than "medium". - + , has not been successfully broadcast yet , nuk Ă«shtĂ« transmetuar me sukses deri tani @@ -2746,19 +2785,10 @@ This label turns red, if the priority is smaller than "medium". - - Generated, PoS - - - - + unknown i/e panjohur - - Transaction - transaksionit - Amount @@ -2778,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". Ky panel tregon njĂ« pĂ«rshkrim tĂ« detajuar tĂ« transaksionit - - View Attachment - - - - + Execute Contract @@ -2792,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Data @@ -2864,32 +2879,12 @@ This label turns red, if the priority is smaller than "medium". - + Received from - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Transaction status. Hover over this field to show number of confirmations. @@ -2914,7 +2909,7 @@ This label turns red, if the priority is smaller than "medium". - + Open until %1 Hapur deri mĂ« %1 @@ -2929,7 +2924,7 @@ This label turns red, if the priority is smaller than "medium". I krijuar por i papranuar - + Received with MarrĂ« me @@ -2944,7 +2939,37 @@ This label turns red, if the priority is smaller than "medium". PagesĂ« ndaj vetvetes - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (p/a) @@ -3121,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3265,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3298,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3306,7 +3331,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opsionet: @@ -3316,22 +3341,22 @@ This label turns red, if the priority is smaller than "medium". Fonde te pamjaftueshme - + Rescanning... Rikerkim - + Error Problem - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3453,6 +3478,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3513,6 +3548,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3578,11 +3618,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3624,12 +3659,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3639,12 +3669,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Please wait for new user wizard to start... @@ -3734,7 +3759,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3749,7 +3774,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3784,12 +3809,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3799,12 +3824,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3814,12 +3839,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3829,22 +3854,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3854,27 +3879,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3884,7 +3909,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3894,12 +3919,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3909,7 +3934,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3919,7 +3944,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3929,7 +3954,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3959,7 +3984,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3969,12 +3994,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -3984,12 +4009,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3999,7 +4024,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4014,12 +4039,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4034,12 +4059,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4049,12 +4074,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4074,17 +4099,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4094,22 +4119,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4119,7 +4144,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4129,7 +4154,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4139,7 +4164,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4149,22 +4174,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4189,20 +4214,45 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4214,12 +4264,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -4234,7 +4284,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -4254,7 +4304,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -4304,22 +4354,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4329,37 +4379,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts index 6adee063e9..6d1cf521e2 100644 --- a/src/qt/locale/bitcoin_sr.ts +++ b/src/qt/locale/bitcoin_sr.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + &Overview &Општо прДглДЎ @@ -410,28 +410,42 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network + + Scraper: waiting on wallet to sync. - - Neural Network + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. - &New User Wizard + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. - - + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + New User Wizard - + &Voting @@ -441,7 +455,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -516,24 +530,19 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Community - - &Advanced - - - - + [testnet] [testnet] - + Gridcoin client @@ -552,7 +561,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -605,7 +614,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -615,13 +624,13 @@ Address: %4 - + URI handling - + %n second(s) ago @@ -657,7 +666,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -710,7 +719,7 @@ Address: %4 - + %n second(s) @@ -746,7 +755,7 @@ Address: %4 - + &Options... П&ĐŸŃŃ‚Đ°ĐČĐșĐ”... @@ -755,10 +764,6 @@ Address: %4 &Encrypt Wallet... &ĐšĐžŃ„Ń€ĐŸĐČањД ĐœĐŸĐČŃ‡Đ°ĐœĐžĐșĐ°... - - &Backup Wallet... - &Backup ĐœĐŸĐČŃ‡Đ°ĐœĐžĐșĐ° - &Change Passphrase... @@ -770,7 +775,7 @@ Address: %4 ĐœĐ”ŃšĐ°ŃšĐ” Đ»ĐŸĐ·ĐžĐœĐșĐ” ĐșĐŸŃ˜ĐŸĐŒ сД ŃˆĐžŃ„Ń€ŃƒŃ˜Đ” ĐœĐŸĐČŃ‡Đ°ĐœĐžĐș - + Wallet ĐœĐŸĐČŃ‡Đ°ĐœĐžĐș @@ -780,12 +785,12 @@ Address: %4 - + &Send &ĐŸĐŸŃˆĐ°Ń™Đž - + &Backup Wallet/Config... @@ -795,7 +800,7 @@ Address: %4 - + &File &Ѐајл @@ -805,22 +810,22 @@ Address: %4 &ĐŸĐŸĐŽĐ”ŃˆĐ°ĐČања - + &Help П&ĐŸĐŒĐŸŃ› - + Up to date ĐĐ¶ŃƒŃ€ĐœĐŸ - + Catching up... ĐĐ¶ŃƒŃ€ĐžŃ€Đ°ŃšĐ” у Ń‚ĐŸĐșу... - + Sent transaction ĐŸĐŸŃĐ»Đ°ĐœĐ° Ń‚Ń€Đ°ĐœŃĐ°Đșцоја @@ -830,16 +835,12 @@ Address: %4 ĐŸŃ€ĐžĐŽĐŸŃˆĐ»Đ° Ń‚Ń€Đ°ĐœŃĐ°Đșцоја - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - ĐĐŸĐČŃ‡Đ°ĐœĐžĐș јс <b>ŃˆĐžŃ„Ń€ĐŸĐČĐ°Đœ</b> Đž Ń‚Ń€Đ”ĐœŃƒŃ‚ĐœĐŸ <b>ĐŸŃ‚ĐșŃ™ŃƒŃ‡Đ°Đœ</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> ĐĐŸĐČŃ‡Đ°ĐœĐžĐș јс <b>ŃˆĐžŃ„Ń€ĐŸĐČĐ°Đœ</b> Đž Ń‚Ń€Đ”ĐœŃƒŃ‚ĐœĐŸ <b>Đ·Đ°ĐșŃ™ŃƒŃ‡Đ°Đœ</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -847,7 +848,7 @@ Address: %4 ClientModel - + Network Alert @@ -1294,7 +1295,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1740,6 +1741,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1806,7 +1815,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1828,7 +1837,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1977,6 +1986,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -2003,7 +2017,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2300,17 +2314,17 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: Iznos: - + &Label: &ЕтоĐșДта - + Alt+A Alt+ @@ -2325,12 +2339,12 @@ This label turns red, if the priority is smaller than "medium". Poruka: - + Form Đ€ĐŸŃ€ĐŒĐ° - + Enter a label for this address to add it to your address book @@ -2361,17 +2375,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2622,22 +2631,17 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS - - - - + From @@ -2758,7 +2762,37 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + Amount iznos @@ -2786,12 +2820,7 @@ This label turns red, if the priority is smaller than "medium". Ovaj odeljak pokazuje detaljan opis transakcije - - View Attachment - - - - + Execute Contract @@ -2800,21 +2829,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Zatvorite - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date datum @@ -2888,7 +2907,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2908,32 +2927,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3130,7 +3159,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3274,7 +3303,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3307,7 +3336,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3315,22 +3344,22 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Opcije - + Specify data directory Gde je konkretni data direktorijum - + Accept command line and JSON-RPC commands Prihvati komandnu liniju i JSON-RPC komande - + Run in the background as a daemon and accept commands Radi u pozadini kao daemon servis i prihvati komande @@ -3345,22 +3374,22 @@ This label turns red, if the priority is smaller than "medium". Lozinka za JSON-RPC konekcije - + Loading addresses... učitavam adrese.... - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -3370,27 +3399,27 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -3405,12 +3434,12 @@ This label turns red, if the priority is smaller than "medium". Učitavam blok indeksa... - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3457,7 +3486,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3467,7 +3496,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3507,12 +3536,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3572,7 +3621,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3587,7 +3636,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3617,12 +3666,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3632,12 +3681,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3647,7 +3696,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open @@ -3742,6 +3791,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3812,6 +3871,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3867,11 +3931,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3908,12 +3967,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3923,12 +3977,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3963,17 +4012,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3983,27 +4032,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -4013,7 +4062,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -4023,22 +4072,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -4048,7 +4097,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4068,7 +4117,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4078,12 +4127,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4093,12 +4142,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4108,7 +4157,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4123,12 +4172,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4143,12 +4192,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4158,12 +4207,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4183,17 +4232,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4203,22 +4252,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4228,7 +4277,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4238,7 +4287,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4248,7 +4297,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4258,22 +4307,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4293,20 +4342,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4318,12 +4372,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4333,12 +4387,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... Ponovo skeniram... - + Importing blockchain data file. @@ -4353,22 +4407,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading ZavrĆĄeno učitavanje - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Error GreĆĄka diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index 983ed2198a..293568b8e1 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -23,21 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -Detta Ă€r experimentell mjukvara. - - -Distribuerad under mjukvarulicensen MIT/X11, se den medföljande filen COPYING eller http://www.opensource.org/licenses/mit-license.php. - -Denna produkten innehĂ„ller mjukvara utvecklad av OpenSSL Project för anvĂ€ndning i OpenSSL Toolkit (http://www.openssl.org/) och kryptografisk mjukvara utvecklad av Eric Young (eay@cryptsoft.com) samt UPnP-mjukvara skriven av Thomas Bernard. - AddressBookPage @@ -314,12 +299,12 @@ Denna produkten innehĂ„ller mjukvara utvecklad av OpenSSL Project för anvĂ€ndni BitcoinGUI - + Sign &message... Signera &meddelande... - + &Overview &Översikt @@ -415,7 +400,7 @@ Denna produkten innehĂ„ller mjukvara utvecklad av OpenSSL Project för anvĂ€ndni Avsluta programmet - + &Options... &Alternativ... @@ -430,7 +415,7 @@ Denna produkten innehĂ„ller mjukvara utvecklad av OpenSSL Project för anvĂ€ndni Kryptera eller avkryptera plĂ„nbok - + %n second(s) ago %n sekund sen @@ -462,7 +447,7 @@ Denna produkten innehĂ„ller mjukvara utvecklad av OpenSSL Project för anvĂ€ndni - + Date: %1 Amount: %2 Type: %3 @@ -477,7 +462,7 @@ Adress: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -487,17 +472,39 @@ Adress: %4 - &Backup Wallet... - &SĂ€kerhetskopiera plĂ„nbok... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - &Byt lösenord... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + - Backup wallet to another location - SĂ€kerhetskopiera plĂ„nboken till en annan plats + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + &Byt lösenord... @@ -550,7 +557,7 @@ Adress: %4 &Verifiera meddelande... - + Wallet PlĂ„nbok @@ -560,7 +567,7 @@ Adress: %4 Gridcoin - + &Send &Skicka @@ -569,30 +576,6 @@ Adress: %4 &Receive &Ta emot - - &Rebuild Block Chain - &Bygg om Blockkedjan - - - Rebuild Block Chain - Bygg om Blockkedjan - - - &Download Blocks - &Ladda Hem Block - - - Download Blocks - Ladda Hem Block - - - &Upgrade Client - &Uppgradera Klienten - - - Upgrade Client - Uppgradera Klienten - &About Gridcoin @@ -604,36 +587,12 @@ Adress: %4 Visa information om Gridcoin - - &Neural Network - &NeuronnĂ€t - - - - Neural Network - NeuronnĂ€t - - - &Advanced Configuration - &Avancerade InstĂ€llningar - - - Advanced Configuration - Avancerade InstĂ€llningar - - - - &New User Wizard - &AnvĂ€ndarguide - - - - + New User Wizard AnvĂ€ndarguide - + &Voting &Röstning @@ -643,15 +602,7 @@ Adress: %4 Röstning - &Foundation - &Stiftelse - - - Foundation - Stiftelse - - - + &Diagnostics &Diagnostik @@ -660,14 +611,6 @@ Adress: %4 Diagnostics Diagnostik - - FA&Q - FA&Q - - - Interactive FAQ - Interaktiv FAQ - Modify configuration options for Gridcoin @@ -689,14 +632,14 @@ Adress: %4 - + [testnet] [testnet] - + Gridcoin client Gridcoin klient @@ -706,23 +649,7 @@ Adress: %4 %1 aktiv anslutning till Gridcoin nĂ€tverket - %1 second(s) ago - %1 sekund sen - - - %1 minute(s) ago - %1 minut sen - - - %1 hour(s) ago - %1 timme sen - - - %1 day(s) ago - %1 dag sen - - - + Last received block was generated %1. Senaste mottagna block genererades %1. @@ -767,19 +694,7 @@ Adress: %4 Obs! Fel pĂ„ BOINC-sökvĂ€g! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Datum: %1 -Belopp: %2 -Typ: %3 -Adress: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI:n kan inte tolkas! Detta kan bero pĂ„ en ogiltig Gridcoin adress eller felaktiga URI parametrar. @@ -838,7 +753,7 @@ Adress: %4 - + %n second(s) %n sekund @@ -870,31 +785,7 @@ Adress: %4 - Not staking because wallet is locked - Ingen staking för att plĂ„nboken Ă€r lĂ„st - - - Not staking because wallet is offline - Ingen staking för att plĂ„nboken Ă€r offline - - - Not staking because wallet is syncing - Ingen staking för att plĂ„nboken synkroniseras - - - Not staking because you don't have mature coins - Ingen staking för att dina coins Ă€r Ă€nnu inte förĂ„ldrade - - - Searching for mature coins... Please wait - Söker efter mogna mynt... Var god vĂ€nta - - - Not staking - Ingen staking - - - + &File &Arkiv @@ -910,17 +801,12 @@ Adress: %4 &Community - - &Advanced - &Avancerat - - - + &Help &HjĂ€lp - + Processed %n block(s) of transaction history. Bearbetade %n block av transaktionshistoriken. @@ -933,12 +819,12 @@ Adress: %4 Uppdaterad - + Catching up... HĂ€mtar senaste... - + Sent transaction Transaktion skickad @@ -948,16 +834,12 @@ Adress: %4 Inkommande transaktion - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Denna plĂ„nbok Ă€r <b>krypterad</b> och för nĂ€rvarande <b>olĂ„st</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> Denna plĂ„nbok Ă€r <b>krypterad</b> och för nĂ€rvarande <b>lĂ„st</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Ett fatalt fel uppstod. Gridcoin kan inte fortsĂ€tta och stĂ€nger programmet. @@ -965,7 +847,7 @@ Adress: %4 ClientModel - + Network Alert NĂ€tverkslarm @@ -1047,10 +929,6 @@ Adress: %4 (un)select all (av)markera allt - - List mode - Listvy - Amount @@ -1430,7 +1308,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. NewPollDialog - + Create Poll Skapa Omröstning @@ -1643,10 +1521,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Map port using &UPnP Tilldela port med hjĂ€lp av &UPnP - - Proxy &IP: - Proxy-&IP: - &Port: @@ -1813,10 +1687,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Error Messages: - - DPOR Weight: - DPOR-vikt: - Magnitude: @@ -1842,10 +1712,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Current Poll: Aktuell omröstning: - - Client Messages: - Klientmeddelanden: - Available: @@ -1888,6 +1754,14 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. osynkroniserad + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1949,7 +1823,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. RPCConsole - + @@ -1961,7 +1835,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - + N/A ej tillgĂ€nglig @@ -2041,7 +1915,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Ut: - + + &Scraper + + + + Debug log file Debugloggfil @@ -2071,7 +1950,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Skriv <b>help</b> för en översikt av alla kommandon. - + %1 B %1 B @@ -2106,12 +1985,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. %1 h %2 m - + Gridcoin - Debug Console Gridcoin - Felsökningskonsol - + Boost version Boost-version @@ -2181,7 +2060,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Klientnamn - + Welcome to the Gridcoin RPC console! @@ -2448,22 +2327,22 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. SendCoinsEntry - + A&mount: &Belopp: - + Pay &To: Betala &Till: - + &Label: &Etikett: - + Alt+A Alt+A @@ -2504,26 +2383,17 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Ta bort denna mottagare - + Send Custom Message to a Gridcoin Recipient - Track Coins - SpĂ„ra Mynt - - - - Add Attachment - - - - + Form FormulĂ€r - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Ange en Gridcoin-address (t.ex. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2772,22 +2642,47 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - + Source KĂ€lla - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + TX ID @@ -2822,10 +2717,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Transaction Inputs - - Generated - Genererad - @@ -2859,23 +2750,11 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Credit Kredit - - Block Type - Blocktyp - - - Block Number - Blocknummer - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. Gridcoin-genererade mynt mĂ„ste mogna i 110 block innan de kan spenderas. NĂ€r du skapade detta block skickades det ut pĂ„ nĂ€tverket för att lĂ€ggas till i blockkedjan. Om det misslyckas att lĂ€ggas till kommer dess status Ă€ndras till "ej accepterad" och mynten kan inte spenderas. Detta kan hĂ€nda om en annan nod skapar ett block inom nĂ„gra sekunder av ditt. - - Information - Information - label @@ -2922,18 +2801,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Comment Kommentar - - Transaction ID - Transaktions-ID - - - Transaction - Transaktion - - - Inputs - Inputs - Amount @@ -2963,12 +2830,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Den hĂ€r panelen visar en detaljerad beskrivning av transaktionen - - View Attachment - Visa Bifogning - - - + Execute Contract @@ -2977,21 +2839,11 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. C&lose S&tĂ€ng - - - Gridcoin Documents - Gridcoin-dokument - - - - Document cannot be found on P2P server. - Dokumentet kan inte hittas pĂ„ P2p-servern. - TransactionTableModel - + Date Datum @@ -3026,32 +2878,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. Transaktionens destinationsadress. - + Open for %n more block(s) Öppet för %n mer block @@ -3089,7 +2921,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Genererad men inte accepterad - + Received with Mottagen med @@ -3109,12 +2941,42 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Betalning till dig sjĂ€lv - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (n/a) - + Transaction status. Hover over this field to show number of confirmations. Transaktionsstatus. HĂ„ll muspekaren över för att se antal bekrĂ€ftelser. @@ -3303,29 +3165,10 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. till - - UpgradeDialog - - Gridcoin Upgrading Facility - Gridcoin-uppgradering - - - Retry Download - Försök igen - - - Upgrade - Uppgradera - - - Hide - Göm - - VotingChartDialog - + Poll Results Röstningsresultat @@ -3415,14 +3258,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Share Type Fördelningstyp - - Question - FrĂ„ga - - - Answers - Svar - # Voters @@ -3433,10 +3268,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Total Shares Andelar - - URL - URL - Best Answer @@ -3462,10 +3293,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Share Type. Fördelningstyp. - - Question. - FrĂ„ga. - Total Participants. @@ -3476,10 +3303,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Total Shares. Andelar. - - URL. - URL. - Best Answer. @@ -3489,7 +3312,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. VotingVoteDialog - + PlaceVote Rösta @@ -3522,7 +3345,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. WalletModel - + Sending... Skickar... @@ -3530,12 +3353,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. bitcoin-core - + Options: InstĂ€llningar: - + This help message Det hĂ€r hjĂ€lp medelandet @@ -3570,12 +3393,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Ange timeout för uppkoppling i millisekunder (förvalt: 5000) - + Connect through socks proxy Koppla genom en socks proxy - + Select the version of socks proxy to use (4-5, default: 5) VĂ€lj version av socks proxy (4-5, förval 5) @@ -3585,7 +3408,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. AnvĂ€nd proxy för att nĂ„ Tor gömda servicer (standard: samma som -proxy) - + Listen for connections on <port> (default: 32749 or testnet: 32748) Lyssna efter anslutningar pĂ„ <port> (standard: 15714 eller testnĂ€t: 25714) {32749 ?} {32748)?} @@ -3595,7 +3418,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Ha som mest <n> anslutningar till andra klienter (förvalt: 125) - + Connect only to the specified node(s) Koppla enbart upp till den/de specificerade noden/noder @@ -3605,26 +3428,22 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Anslut till en nod för att hĂ€mta klientadresser, och koppla frĂ„n - + Specify your own public address Ange din egen publika adress - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Anslut enbart till noder i nĂ€tverket <net> (IPv4, IPv6 eller Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Hitta egen IP-adress (förvalt: 1 under lyssning och utan -externalip) - Find peers using internet relay chat (default: 0) - Hitta andra klienter genom internet relay chat (standard: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Acceptera anslutningar utifrĂ„n (förvalt: 1 om ingen -proxy eller -connect) @@ -3634,26 +3453,22 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Bind till angiven adress. AnvĂ€nd [host]:port för IPv6 - + Find peers using DNS lookup (default: 1) Hitta andra klienter via DNS uppsökning (standard: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Synkronisera tiden med andra noder. Avaktivera om klockan i ditt sytem Ă€r exakt som t.ex. synkroniserad med NTP (förval: 1) - Sync checkpoints policy (default: strict) - Synka kontrollpunkts policy (standard: strict) - - - + Threshold for disconnecting misbehaving peers (default: 100) TröskelvĂ€rde för att koppla ifrĂ„n klienter som missköter sig (förvalt: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Antal sekunder att hindra klienter som missköter sig frĂ„n att ansluta (förvalt: 86400) @@ -3748,6 +3563,16 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3808,6 +3633,11 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. ERROR + + + Entire balance reserved + + Expires @@ -3873,11 +3703,6 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Message Meddelande - - - Messate Type - - Miner: @@ -3914,12 +3739,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - - No coins; - - - - + Offline; @@ -3929,12 +3749,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4014,12 +3829,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. AnvĂ€nd UPnP för att mappa den lyssnande porten (förvalt: 0) - + Fee per KB to add to transactions you send Avgift per KB som adderas till transaktionen du sĂ€nder - + When creating transactions, ignore inputs with value less than this (default: 0.01) NĂ€r transaktioner skapas, ignorera vĂ€rden som Ă€r lĂ€gre Ă€n detta (standard: 0.01) @@ -4029,12 +3844,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. TillĂ„t kommandon frĂ„n kommandotolken och JSON-RPC-kommandon - + Use the test network AnvĂ€nd testnĂ€tverket - + Output extra debugging information. Implies all other -debug* options Skriv ut extra debug information. Betyder alla andra -debug* alternativ @@ -4044,7 +3859,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Skriv ut extra nĂ€tverks debug information - + Prepend debug output with timestamp TidstĂ€mpla debug utskriften @@ -4054,7 +3869,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Skicka trace/debug till debuggern - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) Lyssna efter JSON-RPC anslutningar pĂ„ <port> (standard: 15715 eller testnĂ€t: 25715) @@ -4064,7 +3879,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. TillĂ„t JSON-RPC-anslutningar frĂ„n specifika IP-adresser - + Send commands to node running on <ip> (default: 127.0.0.1) Skicka kommandon till klient pĂ„ <ip> (förvalt: 127.0.0.1) @@ -4074,7 +3889,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. KrĂ€v bekrĂ€ftelse för Ă€ndring (förval: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) Tvinga transaktionsskript att anvĂ€nda kanoniska PUSH operatörer (standard: 1) @@ -4084,7 +3899,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Kör kommando nĂ€r en relevant alert Ă€r mottagen (%s i cmd Ă€r ersatt av meddelandet) - + Upgrade wallet to latest format Uppgradera plĂ„nboken till senaste formatet @@ -4099,7 +3914,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Sök i blockkedjan efter saknade plĂ„nboks transaktioner - + Attempt to recover private keys from a corrupt wallet.dat Försök att rĂ€dda de privata nycklarna frĂ„n en korrupt wallet.dat @@ -4119,7 +3934,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - + Boinc Mining @@ -4129,7 +3944,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - + Error obtaining next project. Error 06172014. @@ -4179,12 +3994,32 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4199,12 +4034,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. SĂ€tt största blockstorlek i bytes (förvalt: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) StĂ€ll in max storlek för hög prioritet/lĂ„gavgifts transaktioner i bytes (förval: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL-instĂ€llningar: (se Bitcoin-wikin för SSL-setup instruktioner) @@ -4224,21 +4059,17 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Serverns privata nyckel (förvalt: server.pem) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Godtagbara chiffer (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' Ogiltigt belopp för -paytxfee=<belopp>:'%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Varning: -paytxfee Ă€r satt vĂ€ldigt hög! Detta Ă€r avgiften du kommer betala för varje transaktion. - + Invalid amount for -mininput=<amount>: '%s' Fel mĂ€ngd för -mininput=<amount>: '%s' @@ -4248,22 +4079,22 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. - + Wallet %s resides outside data directory %s. PlĂ„nbok %s ligger utanför datamappen %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. Kan inte lĂ„sa datan i mappen %s. Gridcoin Ă€r kanske redan startad. - + Verifying database integrity... Verifierar integriteten i databasen... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Ett fel uppstod vid initialiseringen av databasen %s! För att Ă„terstĂ€lla, SÄKERHETSKOPIERA MAPPEN, radera sedan allt frĂ„n mappen förutom wallet.dat. @@ -4273,10 +4104,15 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Varning: wallet.dat korrupt, datan har rĂ€ddats! Den ursprungliga wallet.dat har sparas som wallet.{timestamp}.bak i %s; om ditt saldo eller transaktioner Ă€r felaktiga ska du Ă„terstĂ€lla frĂ„n en sĂ€kerhetskopia. - + Vote Rösta + + + Waiting for coins to mature + + Wallet locked; @@ -4293,17 +4129,17 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. wallet.dat korrupt, rĂ€ddning misslyckades - + Unknown -socks proxy version requested: %i OkĂ€nd -socks proxy version begĂ€rd: %i - + Invalid -tor address: '%s' Fel -tor adress: '%s' - + Cannot resolve -bind address: '%s' Kan inte matcha -bind adress: '%s' @@ -4313,16 +4149,10 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Kan inte matcha -externalip adress: '%s' - + Invalid amount for -reservebalance=<amount> Fel mĂ€ngd för -reservebalance=<amount> - - Unable to sign checkpoint, wrong checkpointkey? - - Kan inte signera checkpoint, fel checkpointkey? - - Error loading blkindex.dat @@ -4334,22 +4164,22 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Fel vid inlĂ€sningen av wallet.dat: PlĂ„nboken Ă€r skadad - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Varning: fel vid lĂ€sning av wallet.dat! Alla nycklar lĂ€stes korrekt, men transaktionsdatan eller adressbokens poster kanske saknas eller Ă€r felaktiga. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin Kunde inte ladda wallet.dat: En nyare version av Gridcoin krĂ€vs - + Wallet needed to be rewritten: restart Gridcoin to complete PlĂ„nboken mĂ„ste skrivas om: Starta om Gridcoin för att slutföra - + Error loading wallet.dat Fel vid inlĂ€sning av plĂ„nboksfilen wallet.dat @@ -4369,17 +4199,17 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Fel: kunde inte starta noden - + Unable to bind to %s on this computer. Gridcoin is probably already running. Kan inte binda till %s pĂ„ denna dator. Gridcoin Ă€r sannolikt redan startad. - + Unable to bind to %s on this computer (bind returned error %d, %s) Det gĂ„r inte att binda till %s pĂ„ den hĂ€r datorn (bind returnerade felmeddelande %d, %s) - + Error: Wallet locked, unable to create transaction Fel: PlĂ„nboken lĂ„st, kan inte utföra transaktion @@ -4389,59 +4219,47 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Fel: PlĂ„nboken öppnad endast för stake-process, kan inte skapa transaktion. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Fel: Transaktionen krĂ€ver en transaktionsavgift pĂ„ min %s pĂ„ grund av dess storlek, komplexitet eller anvĂ€ndning av nyligen mottagna kapital - + Error: Transaction creation failed Fel: Skapandet av transaktion misslyckades - + Sending... Skickar... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fel: Transaktionen nekades. Detta kan hĂ€nda om vissa av mynten i din plĂ„nbok redan Ă€r anvĂ€nda, t.ex om du anvĂ€nder en kopia av wallet.dat och mynten redan var anvĂ€nda i kopia men inte markerade som anvĂ€nda hĂ€r. - + Invalid amount Ogiltig mĂ€ngd - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Varning: Kolla att din dators tid och datum Ă€r rĂ€tt. Gridcoin kan inte fungera ordentligt om tiden i datorn Ă€r fel. - Warning: This version is obsolete, upgrade required! - Varning: denna version Ă€r förĂ„ldrad, uppgradering krĂ€vs! - - - WARNING: synchronized checkpoint violation detected, but skipped! - VARNING: synkroniserad kontrollpunkts brott upptĂ€ckt, men hoppades över! - - - + Warning: Disk space is low! Varning: LĂ„gt skivutrymme - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - VARNING: Felaktig kontrollpunkt hittad! Visade transaktioner kan vara felaktiga! Du kan behöva uppgradera eller kontakta utvecklarna. - - - + Run in the background as a daemon and accept commands Kör i bakgrunden som tjĂ€nst och acceptera kommandon - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Exekvera kommando nĂ€r en plĂ„nbokstransaktion Ă€ndras (%s i cmd Ă€r ersatt av TxID) @@ -4451,12 +4269,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Block skapande instĂ€llningar: - + Failed to listen on any port. Use -listen=0 if you want this. Misslyckades att lyssna pĂ„ nĂ„gon port. AnvĂ€nd -listen=0 om du vill detta. - + Specify wallet file (within data directory) Ange plĂ„nboksfil (inom datakatalogen) @@ -4481,7 +4299,7 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. Lösenord för JSON-RPC-anslutningar - + Execute command when the best block changes (%s in cmd is replaced by block hash) Exekvera kommando nĂ€r det bĂ€sta blocket Ă€ndras (%s i cmd Ă€r utbytt av blockhash) @@ -4491,12 +4309,12 @@ Detta betyder att en avgift pĂ„ minst %2 krĂ€vs. TillĂ„t DNS-sökningar för -addnode, -seednode och -connect - + To use the %s option Att anvĂ€nda %s alternativet - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4530,12 +4348,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Om filen inte existerar, skapa den med filrĂ€ttigheten endast lĂ€sbar för Ă€garen. - + Gridcoin version Gridcoin version - + Usage: AnvĂ€ndning: @@ -4545,7 +4363,7 @@ Om filen inte existerar, skapa den med filrĂ€ttigheten endast lĂ€sbar för Ă€gar - + List commands Lista kommandon @@ -4570,12 +4388,12 @@ Om filen inte existerar, skapa den med filrĂ€ttigheten endast lĂ€sbar för Ă€gar Ogiltig -proxy adress: '%s' - + Unknown network specified in -onlynet: '%s' OkĂ€nt nĂ€tverk som anges i -onlynet: '%s' - + Insufficient funds OtillrĂ€ckligt med bitcoins @@ -4585,17 +4403,17 @@ Om filen inte existerar, skapa den med filrĂ€ttigheten endast lĂ€sbar för Ă€gar Laddar blockindex... - + Add a node to connect to and attempt to keep the connection open LĂ€gg till en nod att koppla upp mot och försök att hĂ„lla anslutningen öppen - + Loading wallet... Laddar plĂ„nbok... - + Cannot downgrade wallet Kan inte nedgradera plĂ„nboken @@ -4605,17 +4423,17 @@ Om filen inte existerar, skapa den med filrĂ€ttigheten endast lĂ€sbar för Ă€gar Kan inte skriva standardadress - + Rescanning... Söker igen... - + Done loading Klar med laddning - + Error Fel diff --git a/src/qt/locale/bitcoin_th_TH.ts b/src/qt/locale/bitcoin_th_TH.ts index a72b48a161..1696d9288e 100644 --- a/src/qt/locale/bitcoin_th_TH.ts +++ b/src/qt/locale/bitcoin_th_TH.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... àč€àž‹àč‡àž™àž•àčŒàžŠàž·àčˆàž­àž”àč‰àž§àžą &àž‚àč‰àž­àž„àž§àžČàžĄ... - + &Overview &àž àžČàžžàžŁàž§àžĄ @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O àž­àž­àžàžˆàžČàžàč‚àž›àžŁàčàžàžŁàžĄ - + &Options... &àž•àž±àž§àč€àž„àž·àž­àž... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &àžȘàžłàžŁàž­àž‡àžàžŁàž°àč€àž›àč‹àžČàč€àž‡àžŽàž™... - &Change Passphrase... &àč€àž›àž„àž”àčˆàžąàž™àžŁàž«àž±àžȘàžœàčˆàžČàž™... - - Backup wallet to another location - àžȘàžłàžŁàž­àž‡ àžàžŁàž°àč€àž›àč‹àžČàč€àž‡àžŽàž™àč„àž›àžąàž±àž‡ àž—àž”àčˆàč€àžàč‡àžšàž­àž·àčˆàž™ - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O &àžąàž·àž™àžąàž±àž™àž‚àč‰àž­àž„àž§àžČàžĄ... - + Wallet àžàžŁàž°àč€àž›àč‹àžČàč€àž‡àžŽàž™ @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &àžȘàčˆàž‡ @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [testnet] - + Gridcoin client @@ -586,7 +562,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -639,7 +615,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -686,7 +662,7 @@ Address: %4 - + %n second(s) @@ -724,7 +700,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &àč„àžŸàž„àčŒ @@ -739,17 +745,12 @@ Address: %4 - - &Advanced - - - - + &Help &àžŠàčˆàž§àžąàč€àž«àž„àž·àž­ - + Processed %n block(s) of transaction history. %n àžšàž„àč‡àž­àžàčƒàž™àž›àžŁàž°àž§àž±àž•àžŽàžŁàžČàžąàžàžČàžŁ àč„àž”àč‰àžŁàž±àžšàžàžČàžŁàž”àžłàč€àž™àžŽàž™àžàžČàžŁàč€àžŁàž”àžąàžšàžŁàč‰àž­àžąàčàž„àč‰àž§ @@ -789,12 +790,12 @@ Address: %4 àž—àž±àž™àžȘàžĄàž±àžą - + Catching up... àžàžłàž„àž±àž‡àž•àžČàžĄàčƒàž«àč‰àž—àž±àž™... - + Sent transaction àžŁàžČàžąàžàžČàžŁàž—àž”àčˆàžȘàčˆàž‡ @@ -804,7 +805,7 @@ Address: %4 àžàžČàžŁàž—àžłàžŁàžČàžąàžàžČàžŁàž‚àžČàč€àž‚àč‰àžČ - + URI handling @@ -815,17 +816,13 @@ Address: %4 URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - àžŁàž°àč€àž›àč‹àžČàč€àž‡àžŽàž™àž–àžčàž <b>àč€àž‚àč‰àžČàžŁàž«àž±àžȘ</b> àčàž„àž°àčƒàž™àž‚àž“àž°àž™àž”àč‰ <b>àž›àž„àž”àž„àč‡àž­àž„àčàž„àč‰àž§</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> àžàžŁàž°àč€àž›àč‹àžČàč€àž‡àžŽàž™àž–àžčàž <b>àč€àž‚àč‰àžČàžŁàž«àž±àžȘ</b> àčàž„àž°àčƒàž™àž›àž±àžˆàžˆàžžàžšàž±àž™ <b>àž„àč‡àž­àž„ </b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -915,10 +912,6 @@ Address: %4 (un)select all (àč„àžĄàčˆ)àč€àž„àž·àž­àžàž—àž±àč‰àž‡àž«àžĄàž” - - List mode - àč‚àž«àžĄàž”àčàžšàžšàžŁàžČàžąàžàžČàžŁ - Amount @@ -1284,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1542,10 +1535,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP àžˆàž­àž‡àžžàž­àžŁàčŒàž• àč‚àž”àžąàčƒàžŠàč‰ &UPnP - - Proxy &IP: - àžžàžŁàč‡àž­àžàž‹àž”àčˆ &IP: - &Port: @@ -1734,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1800,7 +1797,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1822,7 +1819,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1971,6 +1968,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1997,7 +1999,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2299,12 +2301,12 @@ This label turns red, if the priority is smaller than "medium". àžŁàžčàž› - + &Label: &àžŠàž·àčˆàž­: - + Enter a label for this address to add it to your address book @@ -2350,22 +2352,17 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - + A&mount: - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2612,22 +2609,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2745,10 +2767,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - àž‚àč‰àž­àžĄàžčàž„ - Amount @@ -2778,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2792,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose &àž›àžŽàž” - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date àž§àž±àž™àž—àž”àčˆ @@ -2878,7 +2881,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2898,32 +2901,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3120,7 +3133,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3264,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3297,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3305,12 +3318,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3357,7 +3370,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3367,7 +3380,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3407,12 +3420,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3462,7 +3495,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3472,7 +3505,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3562,6 +3595,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3622,6 +3665,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3682,11 +3730,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3723,12 +3766,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3743,12 +3781,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3823,12 +3856,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3838,12 +3871,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3853,12 +3886,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3868,22 +3901,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3893,27 +3926,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3923,7 +3956,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3933,12 +3966,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3948,7 +3981,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3958,7 +3991,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3968,7 +4001,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3998,7 +4031,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4008,12 +4041,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4023,12 +4056,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4038,7 +4071,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4053,12 +4086,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4073,12 +4106,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4088,12 +4121,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4113,17 +4146,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4133,22 +4166,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4158,7 +4191,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4168,7 +4201,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4178,7 +4211,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4188,22 +4221,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4228,20 +4261,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4253,12 +4291,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4268,12 +4306,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4293,22 +4331,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4318,27 +4356,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4348,17 +4386,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Error àž‚àč‰àž­àžœàžŽàž”àžžàž„àžČàž” diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index 497d29b8c4..41ced01d04 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - Bu, deneysel bir yazılımdır. - - MIT/X11 yazılım lisansı kapsamında yayınlanmÄ±ĆŸtır, beraberindeki COPYING dosyasına ya da http://www.opensource.org/licenses/mit-license.php sayfasına bakınız. - - Bu ĂŒrĂŒn, OpenSSL Toolkit'inde (http://www.openssl.org/) kullanılmak ĂŒzere OpenSSL projesi tarafından geliƟtirilen yazılımı, Eric Young (eay@cryptsoft.com) tarafından hazırlanmÄ±ĆŸ kriptografik yazılımı ve Thomas Bernard tarafından hazırlanmÄ±ĆŸ UPnP yazılımı içerir. - AddressBookPage @@ -313,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... &Ä°leti imzala... - + &Overview &Genel bakÄ±ĆŸ @@ -414,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O Uygulamadan çık - + &Options... &Seçenekler... @@ -429,7 +415,7 @@ This product includes software developed by the OpenSSL Project for use in the O CĂŒzdanı Ɵifrele veya cĂŒzdanın Ɵifresini aç - + %n second(s) ago %n saniye önce @@ -457,7 +443,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -472,7 +458,7 @@ Adres: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -482,17 +468,39 @@ Adres: %4 - &Backup Wallet... - CĂŒzdanı &Yedekle... + + Scraper: waiting on wallet to sync. + - - &Change Passphrase... - Parolayı &DeğiƟtir... + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + - Backup wallet to another location - CĂŒzdanı diğer bir konumda yedekle + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + + &Change Passphrase... + Parolayı &DeğiƟtir... @@ -545,7 +553,7 @@ Adres: %4 Ä°letiyi &kontrol et... - + Wallet CĂŒzdan @@ -555,7 +563,7 @@ Adres: %4 Gridcoin - + &Send &Gönder @@ -564,30 +572,6 @@ Adres: %4 &Receive &Al - - &Rebuild Block Chain - &Blok Zincirini Tekrar Yapılandır - - - Rebuild Block Chain - Blok Zincirini Tekrar Yapılandır - - - &Download Blocks - TĂŒm Blokları Ä°ndir - - - Download Blocks - TĂŒm Blokları Ä°ndir - - - &Upgrade Client - &Ä°stemciyi GĂŒncelle - - - Upgrade Client - Ä°stemciyi GĂŒncelle - &About Gridcoin @@ -599,36 +583,12 @@ Adres: %4 Gridcoin hakkındaki bilgiyi göster - - &Neural Network - &Neural Network - - - - Neural Network - Neural Network - - - &Advanced Configuration - &GeliƟmiƟ Ayarlar - - - Advanced Configuration - GeliƟmiƟ Yapılandırma - - - - &New User Wizard - &Yeni Kullanıcı Sihirbazı - - - - + New User Wizard Yeni Kullanıcı Sihirbazı - + &Voting &Oylama @@ -638,7 +598,7 @@ Adres: %4 Oylama - + &Diagnostics &Tanılayıcı @@ -668,14 +628,14 @@ Adres: %4 - + [testnet] [testnet] - + Gridcoin client Gridcoin istemcisi @@ -685,23 +645,7 @@ Adres: %4 Gridcoin ağına %1 etkin bağlantı - %1 second(s) ago - %1 saniye önce - - - %1 minute(s) ago - %1 dakika önce - - - %1 hour(s) ago - %1 saat önce - - - %1 day(s) ago - %1 gĂŒn önce - - - + Last received block was generated %1. Son alınan blok, ĂŒretildi %1. @@ -746,19 +690,7 @@ Adres: %4 Boinc Konumu Hatası! - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - Tarih: %1 -Miktar: %2 -TĂŒr: %3 -Adres: %4 - - - - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. URI ayrÄ±ĆŸtırılamadı! Bu, geçersiz bir Gridcoin adresi veya hatalı URI parametreleri nedeniyle olabilir. @@ -817,7 +749,7 @@ Adres: %4 - + %n second(s) %n saniye @@ -845,39 +777,7 @@ Adres: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - Pay Alınıyor.<br>Sizin Ağırlığınız: %1<br>Ağın Ağırlığı: %2<br><b>Pay almak için TAHMÄ°NÄ°</b> sĂŒre: %3. %4 - - - Not staking because wallet is locked - Pay alınmıyor Ă§ĂŒnkĂŒ cĂŒzdan kilitlidir - - - Not staking because wallet is offline - Pay alınmıyor Ă§ĂŒnkĂŒ cĂŒzdan çevrimdÄ±ĆŸÄ±dır - - - Not staking because wallet is syncing - Pay alınmıyor Ă§ĂŒnkĂŒ cĂŒzdan senkronize ediliyor - - - Not staking because you don't have mature coins and stake weight is too low. - Pay alınamıyor Ă§ĂŒnkĂŒ olgunlaƟmÄ±ĆŸ coininiz yok ya da pay ağırlığı çok dĂŒĆŸĂŒk. - - - Not staking because you don't have mature coins - Pay alınmıyor Ă§ĂŒnkĂŒ olgunlaƟmÄ±ĆŸ coininiz yok - - - Searching for mature coins... Please wait - OlgunlaƟmÄ±ĆŸ coinler aranıyor... LĂŒtfen Bekleyin - - - Not staking - Pay alınmıyor - - - + &File &Dosya @@ -892,17 +792,12 @@ Adres: %4 - - &Advanced - - - - + &Help &Yardım - + Processed %n block(s) of transaction history. İƟlem tarihçesinden %n blok iƟlendi. @@ -914,12 +809,12 @@ Adres: %4 GĂŒncel - + Catching up... Aralık kapatılıyor... - + Sent transaction İƟlem gönderildi @@ -929,16 +824,12 @@ Adres: %4 Gelen iƟlem - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - CĂŒzdan <b>ƟifrelenmiƟtir</b> ve Ɵu anda <b>kilidi açıktır</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> CĂŒzdan <b>ƟifrelenmiƟtir</b> ve Ɵu anda <b>kilitlidir</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. Önemli bir hata oluƟtu. Gridcoin artık gĂŒvenli bir Ɵekilde devam edemez ve Ɵimdi kapatılacak. @@ -946,7 +837,7 @@ Adres: %4 ClientModel - + Network Alert Ağ Uyarısı @@ -1028,10 +919,6 @@ Adres: %4 (un)select all tĂŒmĂŒnĂŒ seç(me) - - List mode - Liste kipi - Amount @@ -1411,7 +1298,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1624,10 +1511,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Portları &UPnP kullanarak haritala - - Proxy &IP: - Vekil &IP: - &Port: @@ -1861,6 +1744,14 @@ This label turns red, if the priority is smaller than "medium". EƟleƟme DÄ±ĆŸÄ± + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1922,7 +1813,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1934,7 +1825,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A Mevcut değil @@ -2014,7 +1905,12 @@ This label turns red, if the priority is smaller than "medium". DÄ±ĆŸarı: - + + &Scraper + + + + Debug log file Hata ayıklama kĂŒtĂŒk dosyası @@ -2049,7 +1945,7 @@ This label turns red, if the priority is smaller than "medium". Mevcut komutların listesi için <b>help</b> yazınız. - + %1 B %1 B @@ -2084,12 +1980,12 @@ This label turns red, if the priority is smaller than "medium". - + Gridcoin - Debug Console - + Boost version @@ -2421,22 +2317,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: T&utar: - + Pay &To: &ƞu adrese öde: - + &Label: &Etiket: - + Alt+A Alt+A @@ -2462,12 +2358,12 @@ This label turns red, if the priority is smaller than "medium". Adres defterinize eklemek için bu adrese bir etiket giriniz - + Form Form - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2482,21 +2378,12 @@ This label turns red, if the priority is smaller than "medium". Bu alıcıyı kaldır - + Send Custom Message to a Gridcoin Recipient Gridcoin alıcısına bir mesaj yaz - Track Coins - Coinleri Takip Et - - - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) Gridcoin adresi girin (Örnek: S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2743,16 +2630,12 @@ This label turns red, if the priority is smaller than "medium". - + Source Kaynak - Generated - OluƟturuldu - - - + From Gönderen @@ -2763,21 +2646,42 @@ This label turns red, if the priority is smaller than "medium". - Information - Bilgi + + Generated in CoinBase + - - Generated in CoinBase + + MINED - POS - - Generated, PoS + + MINED - POR - + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + unknown Bilinmiyor @@ -2884,18 +2788,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - İƟlem ID'si - - - Transaction - İƟlem - - - Inputs - Girdiler - Amount @@ -2925,12 +2817,7 @@ This label turns red, if the priority is smaller than "medium". Bu pano iƟlemin ayrıntılı açıklamasını gösterir - - View Attachment - - - - + Execute Contract @@ -2939,21 +2826,11 @@ This label turns red, if the priority is smaller than "medium". C&lose K&apat - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Tarih @@ -2988,32 +2865,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - Gridcoin Madeni Çıkarıldı- DPOR - - - - Minted - (Local) DPOR - - - - - Mined - PoR - Gridcoin Madeni Çıkarıldı-POR - - - - Mined - Interest - Gridcoin Madeni Çıkarıldı- Sadece Pay Alındı - - - + Destination address of transaction. İƟlemin alıcı adresi. - + Open for %n more block(s) %n taneden daha fazla blok için açık @@ -3050,7 +2907,7 @@ This label turns red, if the priority is smaller than "medium". OluƟturuldu ama kabul edilmedi - + Received with ƞununla alındı @@ -3070,12 +2927,42 @@ This label turns red, if the priority is smaller than "medium". Kendinize ödeme - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (mevcut değil) - + Transaction status. Hover over this field to show number of confirmations. İƟlem durumu. Doğrulama sayısını görĂŒntĂŒlemek için fare imlecini bu alanın ĂŒzerinde tutunuz. @@ -3264,29 +3151,10 @@ This label turns red, if the priority is smaller than "medium". Alıcı - - UpgradeDialog - - Gridcoin Upgrading Facility - Gridcoin GĂŒncelleme - - - Retry Download - Tekrar indirmeyi dene - - - Upgrade - GĂŒncelle - - - Hide - Gizle - - VotingChartDialog - + Poll Results Poll Sonuçları @@ -3376,10 +3244,6 @@ This label turns red, if the priority is smaller than "medium". Share Type - - Question - Soru - # Voters @@ -3434,7 +3298,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3467,7 +3331,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... Gönderiyor... @@ -3475,19 +3339,15 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Seçenekler: - + This help message Bu yardım mesajı - - Specify configuration file (default: gridcoin.conf) - Yapılandırma dosyası belirtin (varsayılan: gridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -3519,12 +3379,12 @@ This label turns red, if the priority is smaller than "medium". Bağlantı zaman aĆŸÄ±m sĂŒresini milisaniye olarak belirt (varsayılan: 5000) - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) Kullanılacak socks vekil sunucusunun versiyonunu seç (4-5, varsayılan: 5) @@ -3534,7 +3394,7 @@ This label turns red, if the priority is smaller than "medium". Tor gizli servisine eriƟim için vekil sunucu kullan (varsayılan: -proxy ile aynı) - + Listen for connections on <port> (default: 32749 or testnet: 32748) <port> ĂŒzerinde bağlantıları dinle (varsayılan: 15714 veya testnet: 25714) {32749 ?} {32748)?} @@ -3544,7 +3404,7 @@ This label turns red, if the priority is smaller than "medium". EƟler ile en çok <n> adet bağlantı kur (varsayılan: 125) - + Connect only to the specified node(s) Sadece belirtilen ağ noktalarına bağlan @@ -3554,26 +3414,22 @@ This label turns red, if the priority is smaller than "medium". EƟ adresleri elde etmek için bir dĂŒÄŸĂŒme bağlan ve ardından bağlantıyı kes - + Specify your own public address Kendi genel adresinizi tanımlayın - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Sadece <net> Ɵebekesindeki ağ noktalarına bağlan (IPv4, IPv6 ya da Tor) - + Discover own IP address (default: 1 when listening and no -externalip) Kendi IP adresini keƟfet (varsayılan: dinlenildiğinde ve -externalip yoksa 1) - Find peers using internet relay chat (default: 0) - Internet aktarımlı chat kullanarak eƟleri bul (varsayılan: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) Dıarıdan gelen bağlantıları kabul et (varsayılan: -proxy veya -connect yoksa 1) @@ -3583,26 +3439,22 @@ This label turns red, if the priority is smaller than "medium". Belirtilen adrese bağlı. IPv6 için [host]:port notasyonunu kullan - + Find peers using DNS lookup (default: 1) DNS arama kullanarak eƟleri bul (varsayılan: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) Diğer ağ noktalarıyla saati senkronize et. Sisteminizdeki saat doğru ise devre dÄ±ĆŸÄ± bırakın, örn: NTC ile senkronize etme (varsayılan: 1) - Sync checkpoints policy (default: strict) - Kontrol noktası politikasını senkronize et (varsayılan: sıkı) - - - + Threshold for disconnecting misbehaving peers (default: 100) Aksaklık gösteren eƟlerle baılantıyı kesme sınırı (varsayılan: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Aksaklık gösteren eƟlerle yeni bağlantıları engelleme sĂŒresi, saniye olarak (varsayılan: 86400) @@ -3697,6 +3549,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3757,6 +3619,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3822,11 +3689,6 @@ This label turns red, if the priority is smaller than "medium". Message Ä°leti - - - Messate Type - - Miner: @@ -3863,12 +3725,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3878,12 +3735,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3963,12 +3815,12 @@ This label turns red, if the priority is smaller than "medium". Dinlenecek portu haritalamak için UPnP kullan (varsayılan: 0) - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3978,12 +3830,12 @@ This label turns red, if the priority is smaller than "medium". Komut satırı ve JSON-RPC komutlarını kabul et - + Use the test network Deneme Ɵebekesini kullan - + Output extra debugging information. Implies all other -debug* options Ekstra hata ayıklama bilgisini çıktı al. Diğer tĂŒm -debug* seçeneklerini kapsar @@ -3993,7 +3845,7 @@ This label turns red, if the priority is smaller than "medium". Ekstra ağ hata ayıklama bilgisini çıktı olarak al - + Prepend debug output with timestamp Tarih bilgisini, hata ayıklama çıktısının baĆŸÄ±na ekle @@ -4003,7 +3855,7 @@ This label turns red, if the priority is smaller than "medium". Hata ayıklayıcıya hata ayıklama bilgisi gönder - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) <port> ĂŒzerinde JSON-RPC bağlantılarını dinle (varsayılan: 15715 veya testnet: 25715) @@ -4013,7 +3865,7 @@ This label turns red, if the priority is smaller than "medium". Belirtilen IP adresinden JSON-RPC bağlantılarını kabul et - + Send commands to node running on <ip> (default: 127.0.0.1) ƞu <ip> adresinde (varsayılan: 127.0.0.1) çalÄ±ĆŸan ağ noktasına komut yolla @@ -4023,7 +3875,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4033,7 +3885,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format CĂŒzdanı en yeni sĂŒrĂŒme gĂŒncelle @@ -4048,7 +3900,7 @@ This label turns red, if the priority is smaller than "medium". Blok zincirini eksik cĂŒzdan iƟlemleri için tekrar yapılandır - + Attempt to recover private keys from a corrupt wallet.dat Bozuk bir wallet.dat dosyasından özel anahtarları geri kazanmayı dene @@ -4068,7 +3920,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -4078,7 +3930,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -4128,12 +3980,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -4148,12 +4020,12 @@ This label turns red, if the priority is smaller than "medium". Bayt olarak maksimum blok boyutunu belirle (varsayılan: 250000) - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) Bayt olarak yĂŒksek öncelikli/dĂŒĆŸĂŒk ĂŒcretli iƟlemlerin maksimum boyutunu belirle (varsayılan: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL seçenekleri: (SSL kurulum bilgisi için Bitcoin vikisine bakınız) @@ -4173,17 +4045,17 @@ This label turns red, if the priority is smaller than "medium". Sunucu özel anahtarı (varsay?lan: server.pem) - + Invalid amount for -paytxfee=<amount>: '%s' -paytxfee=<meblağ> için geçersiz meblağ: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Uyarı: -paytxfee çok yĂŒksek bir değere ayarlanmÄ±ĆŸ! Bu, coin gönderirseniz ödeyeceğiniz iƟlem ĂŒcretidir. - + Invalid amount for -mininput=<amount>: '%s' @@ -4193,22 +4065,22 @@ This label turns red, if the priority is smaller than "medium". BaƟlatma kontrolĂŒ baƟarÄ±ĆŸÄ±z oldu. Gridcoin kapanıyor. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... Veritabanı bĂŒtĂŒnlĂŒÄŸĂŒ doğrulanıyor... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. Veritabanı ortamı %s baƟlatılırken hata oluƟtu! Kurtarmak için, Ä°LGÄ°LÄ° KLASÖRÜ YEDEKLEYÄ°N, ardından wallet.dat dÄ±ĆŸÄ±ndaki herƟeyi silin. @@ -4218,10 +4090,15 @@ This label turns red, if the priority is smaller than "medium". Uyarı: wallet.dat bozuk, veriler geri kazanıldı! ÖzgĂŒn wallet.dat, wallet.{zamandamgası}.bak olarak %s klasörĂŒne kaydedildi; bakiyeniz ya da iƟlemleriniz yanlÄ±ĆŸsa bir yedeklemeden tekrar yĂŒklemeniz gerekir. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4238,17 +4115,17 @@ This label turns red, if the priority is smaller than "medium". wallet.dat bozuk, geri kazanım baƟarısız oldu - + Unknown -socks proxy version requested: %i Bilinmeyen bir -socks vekil sĂŒrĂŒmĂŒ talep edildi: %i - + Invalid -tor address: '%s' Geçersiz -tor adresi: '%s' - + Cannot resolve -bind address: '%s' -bind adresi çözĂŒmlenemedi: '%s' @@ -4258,16 +4135,10 @@ This label turns red, if the priority is smaller than "medium". -externalip adresi çözĂŒmlenemedi: '%s' - + Invalid amount for -reservebalance=<amount> -reservebalance=<amount> için geçersiz miktar - - Unable to sign checkpoint, wrong checkpointkey? - - Kontrol noktası imzalanamadı, bu bir hatalı kontrol noktası anahtarı mı? - - Error loading blkindex.dat @@ -4279,22 +4150,22 @@ This label turns red, if the priority is smaller than "medium". wallet.dat dosyasının yĂŒklenmesinde hata oluƟtu: bozuk cĂŒzdan - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Uyarı: wallet.dat dosyasının okunması sırasında bir hata meydana geldi! TĂŒm anahtarlar doğru bir Ɵekilde okundu, ancak iƟlem verileri ya da adres defteri unsurları hatalı veya eksik olabilir. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin HATA: wallet.dat yĂŒklenemedi, wallet.dat daha yeni bir Gridcoin istemcisine ihtiyaç duyuyor. - + Wallet needed to be rewritten: restart Gridcoin to complete CĂŒzdanın tekrardan oluƟturulması gerekiyor: Gridcoin istemcisini yeniden baƟlatın - + Error loading wallet.dat wallet.dat dosyasının yĂŒklenmesinde hata oluƟtu @@ -4314,17 +4185,17 @@ This label turns red, if the priority is smaller than "medium". Ağ Noktası BaƟlatılamadı - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) Bu bilgisayarda %s unsuruna bağlanılamadı. (bind Ɵu hatayı iletti: %d, %s) - + Error: Wallet locked, unable to create transaction Hata: CĂŒzdan kilitli, iƟlem yapılamıyor. @@ -4334,55 +4205,47 @@ This label turns red, if the priority is smaller than "medium". Hata: CĂŒzdan sadece pay almak için açık, coin gönderilemez. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds Hata: Bu iƟlem; miktarı, karmaĆŸÄ±klığı veya son alınan miktarın kullanımı nedeniyle en az %s iƟlem ĂŒcreti gerektirir - + Error: Transaction creation failed Hata: İƟlem yaratma baƟarısız oldu - + Sending... Gönderiyor... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Hata: İƟlem reddedildi. Bu; cĂŒzdanınızdaki bazı coinler, önceden harcanmÄ±ĆŸsa, örneğin wallet.dat dosyasının bir kopyasını kullandıysanız ve bu kopyadaki coinler harcanmÄ±ĆŸ ise ve burada harcanmÄ±ĆŸ olarak iƟaretlenmediğinden olabilir. - + Invalid amount Geçersiz meblağ - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. Uyarı: LĂŒtfen bilgisayarınızın tarih ve saatinin doğruluğunu kontrol ediniz! Saatiniz yanlÄ±ĆŸ ise, Gridcoin dĂŒzgĂŒn çalÄ±ĆŸmayacaktır. - Warning: This version is obsolete, upgrade required! - Uyarı: Bu sĂŒrĂŒm çok eskidir, gĂŒncellemeniz gerekir! - - - WARNING: synchronized checkpoint violation detected, but skipped! - UYARI: Senkronize edilen kontrol noktası ihlali tespit edildi ancak atlandı! - - - + Warning: Disk space is low! Uyarı: Disk alanınız dĂŒĆŸĂŒk! - + Run in the background as a daemon and accept commands Arka planda daemon (servis) olarak çalÄ±ĆŸ ve komutları kabul et - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Bir cĂŒzdan iƟlemi değiƟtiğinde komutu çalÄ±ĆŸtır (komuttaki %s iƟlem kimliği ile değiƟtirilecektir) @@ -4392,12 +4255,12 @@ This label turns red, if the priority is smaller than "medium". Blok oluƟturma seçenekleri: - + Failed to listen on any port. Use -listen=0 if you want this. Herhangi bir portun dinlenmesi baƟarısız oldu. Bunu istiyorsanız -listen=0 seçeneğini kullanınız. - + Specify wallet file (within data directory) CĂŒzdan dosyası belirtiniz (veri klasörĂŒnĂŒn içinde) @@ -4422,7 +4285,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC bağlantıları için parola - + Execute command when the best block changes (%s in cmd is replaced by block hash) En iyi blok değiƟtiğinde komutu çalÄ±ĆŸtır (komut için %s parametresi blok hash değeri ile değiƟtirilecektir) @@ -4432,12 +4295,12 @@ This label turns red, if the priority is smaller than "medium". -addnode, -seednode ve -connect için DNS aramalarına izin ver - + To use the %s option %s seçeneğini kullanmak için - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4471,12 +4334,12 @@ If the file does not exist, create it with owner-readable-only file permissions. Dosya mevcut deilse, sadece sahibi için okumayla sınırlı izin ile oluƟturunuz. - + Gridcoin version Gridcoin Versiyonu - + Usage: Kullanım: @@ -4486,7 +4349,7 @@ Dosya mevcut deilse, sadece sahibi için okumayla sınırlı izin ile oluƟturun Server'a veya Hata Ayıklama Konsoluna Komut Gönder - + List commands Komutları Listele @@ -4511,12 +4374,12 @@ Dosya mevcut deilse, sadece sahibi için okumayla sınırlı izin ile oluƟturun Geçersiz -proxy adresi: '%s' - + Unknown network specified in -onlynet: '%s' -onlynet için bilinmeyen bir ağ belirtildi: '%s' - + Insufficient funds Yetersiz Bakiye @@ -4526,17 +4389,17 @@ Dosya mevcut deilse, sadece sahibi için okumayla sınırlı izin ile oluƟturun Blok indeksi yĂŒkleniyor... - + Add a node to connect to and attempt to keep the connection open Bağlanılacak ağ noktası ekle ve bağlantıyı sĂŒrekli açık tutmaya çalÄ±ĆŸ - + Loading wallet... CĂŒzdan yĂŒkleniyor... - + Cannot downgrade wallet CĂŒzdan eski sĂŒrĂŒme geri alınamaz @@ -4546,17 +4409,17 @@ Dosya mevcut deilse, sadece sahibi için okumayla sınırlı izin ile oluƟturun Varsayılan adres yazılamadı - + Rescanning... Yeniden taranıyor... - + Done loading YĂŒkleme Tamamlandı - + Error Hata diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts index e4d1db0ee3..a588bbadb2 100644 --- a/src/qt/locale/bitcoin_uk.ts +++ b/src/qt/locale/bitcoin_uk.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... &ПіЮпосато ĐżĐŸĐČŃ–ĐŽĐŸĐŒĐ»Đ”ĐœĐœŃ... - + &Overview &ĐžĐłĐ»ŃĐŽ @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O ВоĐčто - + &Options... &ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đž... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &РДзДрĐČĐœĐ” ĐșĐŸĐżŃ–ŃŽĐČĐ°ĐœĐœŃ ĐłĐ°ĐŒĐ°ĐœŃ†Ń... - &Change Passphrase... Đ—ĐŒŃ–ĐœĐžŃ‚Đž ĐżĐ°Ń€ĐŸĐ»&ь... - - Backup wallet to another location - РДзДрĐČĐœĐ” ĐșĐŸĐżŃ–ŃŽĐČĐ°ĐœĐœŃ ĐłĐ°ĐŒĐ°ĐœŃ†Ń ĐČ Ń–ĐœŃˆĐ” ĐŒŃ–ŃŃ†Đ” - Change the passphrase used for wallet encryption @@ -478,7 +470,7 @@ This product includes software developed by the OpenSSL Project for use in the O П&ДрДĐČірото ĐżĐŸĐČŃ–ĐŽĐŸĐŒĐ»Đ”ĐœĐœŃ... - + Wallet Đ“Đ°ĐŒĐ°ĐœĐ”Ń†ŃŒ @@ -488,7 +480,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &ВіЮпраĐČото @@ -508,28 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -539,7 +515,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] [Ń‚Đ”ŃŃ‚ĐŸĐČĐ° ĐŒĐ”Ń€Đ”Đ¶Đ°] - + Gridcoin client @@ -586,7 +562,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -639,7 +615,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -686,7 +662,7 @@ Address: %4 - + %n second(s) @@ -732,7 +708,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &ЀаĐčĐ» @@ -747,17 +753,12 @@ Address: %4 - - &Advanced - - - - + &Help &Đ”ĐŸĐČіЮĐșĐ° - + Processed %n block(s) of transaction history. ĐžĐ±Ń€ĐŸĐ±Đ»Đ”ĐœĐŸ %n Đ±Đ»ĐŸĐș Ń–ŃŃ‚ĐŸŃ€Ń–Ń— Ń‚Ń€Đ°ĐœĐ·Đ°ĐșціĐč. @@ -807,12 +808,12 @@ Address: %4 ĐĄĐžĐœŃ…Ń€ĐŸĐœŃ–Đ·ĐŸĐČĐ°ĐœĐŸ - + Catching up... ĐĄĐžĐœŃ…Ń€ĐŸĐœŃ–Đ·ŃƒŃ”Ń‚ŃŒŃŃ... - + Sent transaction ĐĐ°ĐŽŃ–ŃĐ»Đ°ĐœŃ– Ń‚Ń€Đ°ĐœĐ·Đ°Đșції @@ -822,7 +823,7 @@ Address: %4 ĐžŃ‚Ń€ĐžĐŒĐ°ĐœŃ– Ń‚Ń€Đ°ĐœĐ·Đ°Đșції - + URI handling @@ -833,17 +834,13 @@ Address: %4 URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - <b>Đ—Đ°ŃˆĐžŃ„Ń€ĐŸĐČĐ°ĐœĐžĐč</b> ĐłĐ°ĐŒĐ°ĐœĐ”Ń†ŃŒ <b>Ń€ĐŸĐ·Đ±Đ»ĐŸĐșĐŸĐČĐ°ĐœĐŸ</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> <b>Đ—Đ°ŃˆĐžŃ„Ń€ĐŸĐČĐ°ĐœĐžĐč</b> ĐłĐ°ĐŒĐ°ĐœĐ”Ń†ŃŒ <b>Đ·Đ°Đ±Đ»ĐŸĐșĐŸĐČĐ°ĐœĐŸ</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -851,7 +848,7 @@ Address: %4 ClientModel - + Network Alert @@ -933,10 +930,6 @@ Address: %4 (un)select all ВОбратО/Đ·ĐœŃŃ‚Đž ĐČсі - - List mode - ХпОсĐșĐŸĐŒ - Amount @@ -1302,7 +1295,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1515,10 +1508,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP Đ’Ń–ĐŽĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ ĐżĐŸŃ€Ń‚Ńƒ чДрДз &UPnP - - Proxy &IP: - &IP ĐżŃ€ĐŸĐșсі: - &Port: @@ -1752,6 +1741,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1813,7 +1810,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1825,7 +1822,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A Н/Д @@ -1845,12 +1842,12 @@ This label turns red, if the priority is smaller than "medium". Час запусĐșу - + Gridcoin - Debug Console - + Boost version @@ -1925,7 +1922,12 @@ This label turns red, if the priority is smaller than "medium". &ВіЮĐșрото - + + &Scraper + + + + Command-line options ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đž ĐșĐŸĐŒĐ°ĐœĐŽĐœĐŸĐłĐŸ ряЮĐșĐ° @@ -2010,7 +2012,7 @@ This label turns red, if the priority is smaller than "medium". ĐĐ°Đ±Đ”Ń€Ń–Ń‚ŃŒ <b>help</b> ĐŽĐ»Ń ĐżĐ”Ń€Đ”ĐłĐ»ŃĐŽŃƒ ĐŽĐŸŃŃ‚ŃƒĐżĐœĐžŃ… ĐșĐŸĐŒĐ°ĐœĐŽ. - + %1 B %1 Б @@ -2045,7 +2047,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2312,22 +2314,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: &ĐšŃ–Đ»ŃŒĐșість: - + Pay &To: &ĐžŃ‚Ń€ĐžĐŒŃƒĐČач: - + &Label: &МітĐșĐ°: - + Alt+A Alt+A @@ -2347,12 +2349,12 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐŸĐČŃ–ĐŽĐŸĐŒĐ»Đ”ĐœĐœŃ: - + Form Đ€ĐŸŃ€ĐŒĐ° - + Enter a label for this address to add it to your address book @@ -2373,17 +2375,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2634,22 +2631,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2769,10 +2791,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - Đ†ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń - Amount @@ -2802,12 +2820,7 @@ This label turns red, if the priority is smaller than "medium". Đ”Đ°ĐœĐžĐč ĐŽŃ–Đ°Đ»ĐŸĐł ĐżĐŸĐșĐ°Đ·ŃƒŃ” ĐŽĐ”Ń‚Đ°Đ»ŃŒĐœŃƒ статостоĐșу ĐżĐŸ ĐČĐžĐ±Ń€Đ°ĐœŃ–Đč Ń‚Ń€Đ°ĐœĐ·Đ°Đșції - - View Attachment - - - - + Execute Contract @@ -2816,21 +2829,11 @@ This label turns red, if the priority is smaller than "medium". C&lose З&Đ°Đșрото - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date Дата @@ -2904,7 +2907,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2924,32 +2927,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3143,17 +3156,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - ĐŸŃ€ĐžŃ…ĐŸĐČато - - VotingChartDialog - + Poll Results @@ -3297,7 +3303,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3330,7 +3336,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3338,12 +3344,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: ĐŸĐ°Ń€Đ°ĐŒĐ”Ń‚Ń€Đž: - + This help message @@ -3378,12 +3384,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3393,7 +3399,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3403,7 +3409,7 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) @@ -3413,22 +3419,22 @@ This label turns red, if the priority is smaller than "medium". ПіЮĐșĐ»ŃŽŃ‡ĐžŃ‚ĐžŃŃŒ ĐŽĐŸ ĐČузла, Ń‰ĐŸĐ± ĐŸŃ‚Ń€ĐžĐŒĐ°Ń‚Đž ŃĐżĐžŃĐŸĐș аЎрДс Ń–ĐœŃˆĐžŃ… ŃƒŃ‡Đ°ŃĐœĐžĐșіĐČ Ń‚Đ° ĐČіЮ'Ń”ĐŽĐœĐ°Ń‚ĐžŃŃŒ - + Specify your own public address ВĐșĐ°Đ¶Ń–Ń‚ŃŒ ĐČашу ĐČĐ»Đ°ŃĐœŃƒ ĐżŃƒĐ±Đ»Ń–Ń‡ĐœŃƒ Đ°ĐŽŃ€Đ”ŃŃƒ - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3438,22 +3444,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3548,6 +3554,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3608,6 +3624,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3673,11 +3694,6 @@ This label turns red, if the priority is smaller than "medium". Message - - - Messate Type - - Miner: @@ -3714,12 +3730,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3729,12 +3740,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3814,12 +3820,12 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3829,12 +3835,12 @@ This label turns red, if the priority is smaller than "medium". ПроĐčĐŒĐ°Ń‚Đž ĐșĐŸĐŒĐ°ĐœĐŽĐž Ń–Đ· ĐșĐŸĐŒĐ°ĐœĐŽĐœĐŸĐłĐŸ ряЮĐșĐ° та ĐșĐŸĐŒĐ°ĐœĐŽĐž JSON-RPC - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3844,7 +3850,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3854,7 +3860,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3864,7 +3870,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3874,7 +3880,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3884,7 +3890,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -3899,7 +3905,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -3919,7 +3925,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3929,7 +3935,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3979,12 +3985,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3999,12 +4025,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4024,17 +4050,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4044,22 +4070,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4069,10 +4095,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4089,17 +4120,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4109,7 +4140,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4124,22 +4155,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4159,17 +4190,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4179,47 +4210,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Run in the background as a daemon and accept commands Запустото ĐČ Ń„ĐŸĐœĐŸĐČĐŸĐŒŃƒ Ń€Đ”Đ¶ĐžĐŒŃ– (яĐș ĐŽĐ”ĐŒĐŸĐœ) та проĐčĐŒĐ°Ń‚Đž ĐșĐŸĐŒĐ°ĐœĐŽĐž - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) ВоĐșĐŸĐœĐ°Ń‚Đž ĐșĐŸĐŒĐ°ĐœĐŽŃƒ, ĐșĐŸĐ»Đž Ń‚Ń€Đ°ĐœĐ·Đ°Đșція ĐłĐ°ĐŒĐ°ĐœŃ†Ń Đ·ĐŒŃ–ĐœĐžŃ‚ŃŒŃŃ (Đ·Đ°ĐŒŃ–ŃŃ‚ŃŒ %s ĐČ ĐșĐŸĐŒĐ°ĐœĐŽŃ– буЎД піЮстаĐČĐ»Đ”ĐœĐŸ Ń–ĐŽĐ”ĐœŃ‚ĐžŃ„Ń–ĐșĐ°Ń‚ĐŸŃ€ Ń‚Ń€Đ°ĐœĐ·Đ°Đșції) @@ -4229,12 +4260,12 @@ This label turns red, if the priority is smaller than "medium". Опції стĐČĐŸŃ€Đ”ĐœĐœŃ Đ±Đ»ĐŸĐșу: - + Failed to listen on any port. Use -listen=0 if you want this. ĐĐ” ĐČĐŽĐ°Đ»ĐŸŃŃ ŃĐ»ŃƒŃ…Đ°Ń‚Đž ĐœĐ° Đ¶ĐŸĐŽĐœĐŸĐŒŃƒ ĐżĐŸŃ€Ń‚Ńƒ. ВоĐșĐŸŃ€ĐžŃŃ‚ĐŸĐČуĐčŃ‚Đ” -listen=0, яĐșŃ‰ĐŸ ĐČĐž Ń…ĐŸŃ‡Đ”Ń‚Đ” Ń†ŃŒĐŸĐłĐŸ. - + Specify wallet file (within data directory) ВĐșĐ°Đ¶Ń–Ń‚ŃŒ фаĐčĐ» ĐłĐ°ĐŒĐ°ĐœŃ†Ń (ĐČ ĐŒĐ”Đ¶Đ°Ń… ĐșĐ°Ń‚Đ°Đ»ĐŸĐłŃƒ ĐŽĐ°ĐœĐžŃ…) @@ -4259,7 +4290,7 @@ This label turns red, if the priority is smaller than "medium". ĐŸĐ°Ń€ĐŸĐ»ŃŒ ĐŽĐ»Ń JSON-RPC-Đ·'Ń”ĐŽĐœĐ°ĐœŃŒ - + Execute command when the best block changes (%s in cmd is replaced by block hash) ВоĐșĐŸĐœĐ°Ń‚Đž ĐșĐŸĐŒĐ°ĐœĐŽŃƒ, ĐșĐŸĐ»Đž Đ·'яĐČоться ĐœĐŸĐČĐžĐč Đ±Đ»ĐŸĐș (%s ĐČ ĐșĐŸĐŒĐ°ĐœĐŽŃ– Đ·ĐŒŃ–ĐœŃŽŃ”Ń‚ŃŒŃŃ ĐœĐ° Ń…Đ”Ńˆ Đ±Đ»ĐŸĐșу) @@ -4269,12 +4300,12 @@ This label turns red, if the priority is smaller than "medium". Đ”ĐŸĐ·ĐČĐŸĐ»ĐžŃ‚Đž ĐżĐŸŃˆŃƒĐș ĐČ DNS ĐŽĐ»Ń ĐșĐŸĐŒĐ°ĐœĐŽ -addnode, -seednode та -connect - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4306,12 +4337,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: ВоĐșĐŸŃ€ĐžŃŃ‚Đ°ĐœĐœŃ: @@ -4321,7 +4352,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -4346,12 +4377,12 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐŸĐŸĐŒĐžĐ»ĐșĐ° ĐČ Đ°ĐŽŃ€Đ”ŃŃ– ĐżŃ€ĐŸĐșсі-сДрĐČДра: «%s» - + Unknown network specified in -onlynet: '%s' ĐĐ”ĐČŃ–ĐŽĐŸĐŒĐ° ĐŒĐ”Ń€Đ”Đ¶Đ° ĐČĐșĐ°Đ·Đ°ĐœĐ° ĐČ -onlynet: «%s» - + Insufficient funds ĐĐ”ĐŽĐŸŃŃ‚Đ°Ń‚ĐœŃŒĐŸ ĐșĐŸŃˆŃ‚Ń–ĐČ @@ -4361,17 +4392,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ЗаĐČĐ°ĐœŃ‚Đ°Đ¶Đ”ĐœĐœŃ Ń–ĐœĐŽĐ”Đșсу Đ±Đ»ĐŸĐșіĐČ... - + Add a node to connect to and attempt to keep the connection open Đ”ĐŸĐŽĐ°Ń‚Đž ĐČŃƒĐ·ĐŸĐ» ĐŽĐŸ піЮĐșĐ»ŃŽŃ‡Đ”ĐœĐœŃ і Đ»ĐžŃˆĐžŃ‚Đž ĐčĐŸĐłĐŸ ĐČіЮĐșŃ€ĐžŃ‚ĐžĐŒ - + Loading wallet... ЗаĐČĐ°ĐœŃ‚Đ°Đ¶Đ”ĐœĐœŃ ĐłĐ°ĐŒĐ°ĐœŃ†Ń... - + Cannot downgrade wallet ĐĐ” ĐČЮається ĐżĐŸĐœĐžĐ·ĐžŃ‚Đž ĐČДрсію ĐłĐ°ĐŒĐ°ĐœŃ†Ń @@ -4381,17 +4412,17 @@ If the file does not exist, create it with owner-readable-only file permissions. ĐĐ”ĐŒĐŸĐ¶Đ»ĐžĐČĐŸ запОсатО Ń‚ĐžĐżĐŸĐČу Đ°ĐŽŃ€Đ”ŃŃƒ - + Rescanning... ĐĄĐșĐ°ĐœŃƒĐČĐ°ĐœĐœŃ... - + Done loading ЗаĐČĐ°ĐœŃ‚Đ°Đ¶Đ”ĐœĐœŃ Đ·Đ°ĐČĐ”Ń€ŃˆĐ”ĐœĐ” - + Error ĐŸĐŸĐŒĐžĐ»ĐșĐ° diff --git a/src/qt/locale/bitcoin_ur_PK.ts b/src/qt/locale/bitcoin_ur_PK.ts index 526c28ff48..24bfd6829e 100644 --- a/src/qt/locale/bitcoin_ur_PK.ts +++ b/src/qt/locale/bitcoin_ur_PK.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Wallet @@ -309,7 +309,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Overview @@ -425,28 +425,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -456,7 +440,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -561,7 +545,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File @@ -576,24 +560,49 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Advanced + + Scraper: waiting on wallet to sync. - + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &Help - + [testnet] - + Gridcoin client @@ -616,12 +625,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + Catching up... - + Last received block was generated %1. @@ -684,7 +693,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -699,7 +708,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -709,13 +718,13 @@ Address: %4 - + URI handling - + %n second(s) ago @@ -747,7 +756,7 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -790,7 +799,7 @@ Address: %4 - + %n second(s) @@ -822,7 +831,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -830,7 +839,7 @@ Address: %4 ClientModel - + Network Alert @@ -1277,7 +1286,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1723,6 +1732,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1789,7 +1806,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1811,7 +1828,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1960,6 +1977,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1986,7 +2008,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2288,12 +2310,12 @@ This label turns red, if the priority is smaller than "medium". - + &Label: - + Enter a label for this address to add it to your address book @@ -2339,22 +2361,17 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - + A&mount: - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2603,22 +2620,17 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS - - - - + From @@ -2738,7 +2750,37 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + Amount Ű±Ù‚Ù… @@ -2766,12 +2808,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2780,21 +2817,11 @@ This label turns red, if the priority is smaller than "medium". C&lose ŰšÙ†ŰŻ - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date ŰȘŰ§Ű±ÛŒŰź @@ -2867,7 +2894,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2887,32 +2914,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3109,7 +3146,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3253,7 +3290,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3286,7 +3323,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3294,12 +3331,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3346,7 +3383,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3356,7 +3393,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3396,12 +3433,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3451,7 +3508,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3461,7 +3518,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3551,6 +3608,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3611,6 +3678,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3671,11 +3743,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3712,12 +3779,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3732,12 +3794,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3812,12 +3869,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3827,12 +3884,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3842,12 +3899,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3857,22 +3914,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3882,27 +3939,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3912,7 +3969,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3922,12 +3979,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3937,7 +3994,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3947,7 +4004,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3957,7 +4014,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3987,7 +4044,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3997,12 +4054,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4012,12 +4069,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4027,7 +4084,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4042,12 +4099,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4062,12 +4119,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4077,12 +4134,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4102,17 +4159,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4122,22 +4179,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4147,7 +4204,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4157,7 +4214,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4167,7 +4224,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4177,22 +4234,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4217,20 +4274,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4242,12 +4304,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4257,12 +4319,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4282,22 +4344,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4307,27 +4369,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4337,17 +4399,17 @@ If the file does not exist, create it with owner-readable-only file permissions. Ù†Ű§Ú©Ű§ÙÛŒ فنڈŰČ - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Error Ù†Ù‚Ű” diff --git a/src/qt/locale/bitcoin_vi.ts b/src/qt/locale/bitcoin_vi.ts index 7909c89153..f2c0304ee6 100644 --- a/src/qt/locale/bitcoin_vi.ts +++ b/src/qt/locale/bitcoin_vi.ts @@ -299,7 +299,7 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Wallet @@ -309,7 +309,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Overview @@ -425,28 +425,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -456,7 +440,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -561,7 +545,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &File @@ -576,24 +560,49 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Advanced + + Scraper: waiting on wallet to sync. - + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &Help - + [testnet] - + Gridcoin client @@ -615,12 +624,12 @@ This product includes software developed by the OpenSSL Project for use in the O - + Catching up... - + Last received block was generated %1. @@ -683,7 +692,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -698,7 +707,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -708,13 +717,13 @@ Address: %4 - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. - + %n second(s) ago @@ -742,7 +751,7 @@ Address: %4 - + URI handling @@ -785,7 +794,7 @@ Address: %4 - + %n second(s) @@ -813,7 +822,7 @@ Address: %4 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -821,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -1268,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1714,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1780,7 +1797,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information @@ -1802,7 +1819,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1951,6 +1968,11 @@ This label turns red, if the priority is smaller than "medium". Clear console + + + &Scraper + + Yes @@ -1977,7 +1999,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B @@ -2279,12 +2301,12 @@ This label turns red, if the priority is smaller than "medium". - + &Label: - + Enter a label for this address to add it to your address book @@ -2330,22 +2352,17 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - + A&mount: - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2592,22 +2609,17 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS - - - - + From @@ -2726,7 +2738,37 @@ This label turns red, if the priority is smaller than "medium". - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + Amount S? l??ng @@ -2754,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2768,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date @@ -2854,7 +2881,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2874,32 +2901,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3096,7 +3133,7 @@ This label turns red, if the priority is smaller than "medium". VotingChartDialog - + Poll Results @@ -3240,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3273,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3281,12 +3318,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3301,12 +3338,12 @@ for example: alertnotify=echo %%s | mail -s "Gridcoin Alert" admin@foo - + Error - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -3338,7 +3375,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Boinc Mining @@ -3348,7 +3385,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error obtaining next project. Error 06172014. @@ -3388,12 +3425,32 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3443,7 +3500,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3453,7 +3510,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + None @@ -3543,6 +3600,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3603,6 +3670,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3663,11 +3735,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message - - - Messate Type - - Miner: @@ -3704,12 +3771,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3724,12 +3786,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3804,12 +3861,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3819,12 +3876,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3834,12 +3891,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3849,22 +3906,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3874,27 +3931,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3904,7 +3961,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3914,12 +3971,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3929,7 +3986,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -3939,7 +3996,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -3949,7 +4006,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -3979,7 +4036,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3989,12 +4046,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4004,12 +4061,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4019,7 +4076,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4034,12 +4091,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4054,12 +4111,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4069,12 +4126,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4094,17 +4151,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4114,22 +4171,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4139,7 +4196,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Weight @@ -4149,7 +4206,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4159,7 +4216,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4169,22 +4226,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4209,20 +4266,25 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4234,12 +4296,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error loading wallet.dat - + Cannot downgrade wallet @@ -4249,12 +4311,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Rescanning... - + Importing blockchain data file. @@ -4274,22 +4336,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Done loading - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4299,27 +4361,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount @@ -4329,12 +4391,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_vi_VN.ts b/src/qt/locale/bitcoin_vi_VN.ts index 3c469581d5..aba6c9089c 100644 --- a/src/qt/locale/bitcoin_vi_VN.ts +++ b/src/qt/locale/bitcoin_vi_VN.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Chứ kĂœ & Tin nháșŻn... - + &Overview &Tổng quan @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O ThoĂĄt chÆ°ÆĄng trĂŹnh - + &Options... &TĂčy chọn... @@ -414,19 +414,11 @@ This product includes software developed by the OpenSSL Project for use in the O Encrypt or decrypt wallet - - &Backup Wallet... - &Sao lÆ°u vĂ­ tiền... - &Change Passphrase... &Thay đổi máș­t kháș©u... - - Backup wallet to another location - Sao lÆ°u vĂ­ tiền ở vị trĂ­ khĂĄc - Change the passphrase used for wallet encryption @@ -473,7 +465,7 @@ This product includes software developed by the OpenSSL Project for use in the O &Tin nháșŻn xĂĄc thá»±c - + Wallet VĂ­ @@ -483,7 +475,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Send &Gá»­i @@ -503,28 +495,12 @@ This product includes software developed by the OpenSSL Project for use in the O - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -534,7 +510,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + &Diagnostics @@ -569,14 +545,14 @@ This product includes software developed by the OpenSSL Project for use in the O - + [testnet] - + Gridcoin client @@ -593,7 +569,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Last received block was generated %1. @@ -646,7 +622,7 @@ Address: %4 - + Wallet is <b>encrypted</b> and currently %1 @@ -693,7 +669,7 @@ Address: %4 - + %n second(s) @@ -731,7 +707,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File &File @@ -746,17 +752,12 @@ Address: %4 - - &Advanced - - - - + &Help Trợ &giĂșp - + %n second(s) ago @@ -789,12 +790,12 @@ Address: %4 Đã cáș­p nháș­t - + Catching up... BáșŻt kịp... - + Sent transaction Giao dịch đã gá»­i @@ -804,7 +805,7 @@ Address: %4 Giao dịch đang tới - + URI can not be parsed! This can be caused by an invalid Gridcoin address or malformed URI parameters. @@ -815,17 +816,13 @@ Address: %4 URI handling - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - VĂ­ tiền <b> đã Ä‘Æ°á»Łc mĂŁ hĂła</b>vĂ  hiện <b>đang mở</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> VĂ­ tiền <b> đã Ä‘Æ°á»Łc mĂŁ hĂła</b>vĂ  hiện <b>đang khĂła</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -915,10 +912,6 @@ Address: %4 Priority - - List mode - Cháșż độ danh sĂĄch - Amount @@ -1284,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1532,10 +1525,6 @@ This label turns red, if the priority is smaller than "medium". &Apply - - Proxy &IP: - Proxy &IP: - &Port: @@ -1734,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1800,7 +1797,7 @@ This label turns red, if the priority is smaller than "medium". - + &Information ThĂŽng tin @@ -1822,7 +1819,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A @@ -1967,7 +1964,12 @@ This label turns red, if the priority is smaller than "medium". - + + &Scraper + + + + Block chain Block chain @@ -1992,7 +1994,7 @@ This label turns red, if the priority is smaller than "medium". GĂ” <b>help</b> để xem nhÆ°ng cĂąu lệnh cĂł sáș”n - + %1 B %1 B @@ -2027,7 +2029,7 @@ This label turns red, if the priority is smaller than "medium". - + Welcome to the Gridcoin RPC console! @@ -2294,22 +2296,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: LÆ°á»Łng: - + &Label: &NhĂŁn - + Form Form - + Enter a label for this address to add it to your address book @@ -2355,17 +2357,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2612,22 +2609,47 @@ This label turns red, if the priority is smaller than "medium". - + Source - + Generated in CoinBase - - Generated, PoS + + MINED - POS - + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + From @@ -2745,10 +2767,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - ThĂŽng tin - Amount @@ -2778,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". - - View Attachment - - - - + Execute Contract @@ -2792,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose Đó&ng - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date NgĂ y thĂĄng @@ -2878,7 +2881,7 @@ This label turns red, if the priority is smaller than "medium". - + Received with @@ -2898,32 +2901,42 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR + + MINED - POS - - Minted - (Local) DPOR + + MINED - POR - - Mined - PoR + + MINED - ORPHANED - - Mined - Interest + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) - + Transaction status. Hover over this field to show number of confirmations. @@ -3117,17 +3130,10 @@ This label turns red, if the priority is smaller than "medium". - - UpgradeDialog - - Hide - áșšn - - VotingChartDialog - + Poll Results @@ -3271,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3304,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3312,7 +3318,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: Lá»±a chọn: @@ -3322,7 +3328,7 @@ This label turns red, if the priority is smaller than "medium". Đang đọc cĂĄc địa chỉ... - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -3337,7 +3343,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3347,7 +3353,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3392,12 +3398,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3417,12 +3443,12 @@ This label turns red, if the priority is smaller than "medium". - + Loading wallet... Đang đọc vĂ­... - + Cannot downgrade wallet KhĂŽng downgrade Ä‘Æ°á»Łc vĂ­ @@ -3432,22 +3458,22 @@ This label turns red, if the priority is smaller than "medium". KhĂŽng ghi Ä‘Æ°á»Łc địa chỉ máș·c định - + Rescanning... Đang quĂ©t láșĄi... - + Done loading Đã náșĄp xong - + Error Lỗi - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3569,6 +3595,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3629,6 +3665,11 @@ If the file does not exist, create it with owner-readable-only file permissions. ERROR + + + Entire balance reserved + + Expires @@ -3689,11 +3730,6 @@ If the file does not exist, create it with owner-readable-only file permissions. Message Tin nháșŻn - - - Messate Type - - Miner: @@ -3730,12 +3766,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - No coins; - - - - + Offline; @@ -3745,12 +3776,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3825,7 +3851,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -3840,7 +3866,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + This help message @@ -3875,12 +3901,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3890,12 +3916,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Allow DNS lookups for -addnode, -seednode and -connect - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3905,12 +3931,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Add a node to connect to and attempt to keep the connection open - + Connect only to the specified node(s) @@ -3920,22 +3946,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Specify your own public address - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3945,27 +3971,27 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) @@ -3975,7 +4001,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Use UPnP to map the listening port (default: 1 when listening) @@ -3985,12 +4011,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -4000,7 +4026,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Run in the background as a daemon and accept commands @@ -4010,7 +4036,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Output extra debugging information. Implies all other -debug* options @@ -4020,7 +4046,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Prepend debug output with timestamp @@ -4050,7 +4076,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -4060,12 +4086,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) @@ -4075,12 +4101,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Require a confirmations for change (default: 0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -4090,7 +4116,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Upgrade wallet to latest format @@ -4105,12 +4131,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Attempt to recover private keys from a corrupt wallet.dat - + How many blocks to check at startup (default: 2500, 0 = all) @@ -4125,12 +4151,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Block creation options: - + Set minimum block size in bytes (default: 0) @@ -4140,12 +4166,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4165,17 +4191,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4185,22 +4211,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4210,10 +4236,15 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4230,7 +4261,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unknown -socks proxy version requested: %i @@ -4240,7 +4271,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Invalid -proxy address: '%s' @@ -4250,22 +4281,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Cannot resolve -bind address: '%s' - + Failed to listen on any port. Use -listen=0 if you want this. - + Cannot resolve -externalip address: '%s' - + Invalid amount for -reservebalance=<amount> @@ -4280,22 +4311,22 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4315,17 +4346,17 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4335,37 +4366,37 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts index 285605bef3..74755fca72 100644 --- a/src/qt/locale/bitcoin_zh_CN.ts +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -23,20 +23,6 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - - -This is experimental software. - -Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. - -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - -èż™æ˜Żäž€ć„—ćźžéȘŒæ€§èœŻä»¶ă€‚ - -æœŹèœŻä»¶æ˜ŻäŸæźMIT/X11èœŻä»¶æŽˆæƒæĄæŹŸæ•Łćžƒă€‚èŻŠæƒ…è§é™„ćžŠçš„COPYING或http://www.opensource.org/licenses/mit-license.php. - -æœŹäș§ć“ćŒ…搫äș†ç”±OpenSSL ProjectćŒ€ć‘çš„OpenSSL Toolkit (https://www.openssl.org/)撌Eric Young (eay@cryptsoft.com) çš„ćŠ ćŻ†èœŻä»¶ïŒŒä»„ćŠThomas Bernard的UPnPèœŻä»¶ă€‚ - AddressBookPage @@ -313,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Gridcoin æ Œé›·ćŸ·ćž - + Send coins to a Gridcoin address ć‘æŒ‡ćźšçš„ćœ°ć€ć‘é€æ Œé›·ćŸ·ćž @@ -383,30 +369,6 @@ This product includes software developed by the OpenSSL Project for use in the O Gridcoin rewards distributed computing with BOINC æ Œé›·ćŸ·ćžç»™BOINCćˆ†ćžƒćŒèźĄçź—ć‚äžŽè€…æäŸ›æŠ„é…Ź - - &Rebuild Block Chain - &重ć»șćŒșć—é“Ÿ - - - Rebuild Block Chain - 重ć»șćŒșć—é“Ÿ - - - &Download Blocks - &䞋蜜ćŒș杗 - - - Download Blocks - 䞋蜜ćŒș杗 - - - &Upgrade Client - æ›Žæ–°ćźąæˆ·ç«Ż - - - Upgrade Client - æ›Žæ–°ćźąæˆ·ç«Ż - &About Gridcoin @@ -418,36 +380,12 @@ This product includes software developed by the OpenSSL Project for use in the O 星ç€ș慳äșŽæ Œé›·ćŸ·ćžçš„äżĄæŻ - - &Neural Network - &焞经眑络 - - - - Neural Network - 焞经眑络 - - - &Advanced Configuration - &高çș§èźŸçœź - - - Advanced Configuration - 高çș§èźŸçœź - - - - &New User Wizard - &æ–°ç”šæˆ·ć‘ćŻŒ - - - - + New User Wizard æ–°ç”šæˆ·ć‘ćŻŒ - + &Voting &投焚 @@ -457,15 +395,7 @@ This product includes software developed by the OpenSSL Project for use in the O 投焚 - &Foundation - &ćŸș金䌚 - - - Foundation - ćŸș金䌚 - - - + &Diagnostics &èŻŠæ–­ @@ -474,14 +404,6 @@ This product includes software developed by the OpenSSL Project for use in the O Diagnostics èŻŠæ–­ - - FA&Q - ćžžè§é—źéą˜ - - - Interactive FAQ - äș€äș’ćŒæé—ź - Modify configuration options for Gridcoin @@ -538,24 +460,19 @@ This product includes software developed by the OpenSSL Project for use in the O ćŻŒć‡șćœ“ć‰æ ‡ç­ŸéĄ”çš„æ•°æź - + &Community 瀟ćŒș - - &Advanced - &高çș§ - - - + [testnet] [æ”‹èŻ•çœ‘ç»œ] - + Gridcoin client æ Œé›·ćŸ·ćžćźąæˆ·ç«Ż @@ -565,23 +482,7 @@ This product includes software developed by the OpenSSL Project for use in the O äžŽæ Œé›·ćŸ·ćžçœ‘ç»œć»ș立äș† %1 äžȘćŻç”šèżžæŽ„ - %1 second(s) ago - %1 秒才 - - - %1 minute(s) ago - %1 戆钟才 - - - %1 hour(s) ago - %1 ć°æ—¶ć‰ - - - %1 day(s) ago - %1 ć€©ć‰ - - - + Last received block was generated %1. æœ€æ–°æ”¶ćˆ°çš„ćŒș杗äș§ç”ŸäșŽ %1。 @@ -641,7 +542,7 @@ Address: %4 ?} {4?} - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -651,19 +552,7 @@ Address: %4 - Date: %1 -Amount: %2 -Type: %3 -Address: %4 - - 旄期: %1 -金鱝: %2 -类枋: %3 -朰杀: %4 - - - - + URI handling URI怄理 @@ -722,7 +611,7 @@ Address: %4 - + %n second(s) %n 秒 @@ -750,39 +639,7 @@ Address: %4 - Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. %4 - æ­Łćœšèż›èĄŒæƒç›Šćąžć€Œă€‚<br>悚的权重äžș%1<br>ć…šçœ‘æƒé‡äžș%2<br><b>äŒ°èźĄ</b>èŽ·ćŸ—ć›žæŠ„çš„æ—¶é—Žäžș%3. %4 - - - Not staking because wallet is locked - æœȘèż›èĄŒæƒç›Šćąžć€ŒïŒŒć› äžșé’±ćŒ…ć·Č锁漚 - - - Not staking because wallet is offline - æœȘèż›èĄŒæƒç›Šćąžć€ŒïŒŒć› äžșé’±ćŒ…ć€„äșŽçŠ»çșżçŠ¶æ€ - - - Not staking because wallet is syncing - æœȘèż›èĄŒæƒç›Šćąžć€ŒïŒŒć› äžșé’±ćŒ…æ­ŁćœšćŒæ­„ - - - Not staking because you don't have mature coins and stake weight is too low. - æœȘèż›èĄŒæƒç›Šćąžć€ŒïŒŒć› äžșé’±ćŒ…äž­æČĄæœ‰æˆç†Ÿçš„æ Œé›·ćŸ·ćžïŒŒäž”æƒç›Šćąžć€Œæƒé‡èż‡äœŽă€‚ - - - Not staking because you don't have mature coins - æœȘèż›èĄŒæƒç›Šćąžć€ŒïŒŒć› äžșé’±ćŒ…äž­æČĄæœ‰æˆç†Ÿçš„æ Œé›·ćŸ·ćž - - - Searching for mature coins... Please wait - æœćŻ»æˆç†ŸèŽ§ćž... - - - Not staking - æœȘèż›èĄŒæƒç›Šćąžć€Œ - - - + &Overview æŠ‚ć†”(&O) @@ -812,7 +669,7 @@ Address: %4 退ć‡ș繋ćș - + &Options... 选éĄč(&O)... @@ -821,19 +678,11 @@ Address: %4 &Encrypt Wallet... ćŠ ćŻ†é’±ćŒ…(&E)... - - &Backup Wallet... - ć€‡ä»œé’±ćŒ…(&B)... - &Change Passphrase... 曎æ”č毆码(&C)... - - Backup wallet to another location - ć€‡ä»œé’±ćŒ…ćˆ°ć…¶ä»–æ–‡ä»¶ć€č - Change the passphrase used for wallet encryption @@ -855,12 +704,12 @@ Address: %4 éȘŒèŻæ¶ˆæŻ(&V)... - + Wallet é’±ćŒ… - + &Send 揑送(&S) @@ -870,12 +719,12 @@ Address: %4 掄收(&R) - + &Show / Hide 星ç€ș / 隐藏(&S) - + &File 文件(&F) @@ -885,12 +734,12 @@ Address: %4 èźŸçœź(&S) - + &Help 枟抩(&H) - + Processed %n block(s) of transaction history. ć·Č怄理 %n äžȘäș€æ˜“掆ćČæ•°æźć—ă€‚ @@ -930,12 +779,12 @@ Address: %4 ć·Čæ˜Żæœ€æ–° - + Catching up... 曎新䞭... - + Sent transaction 揑送äș€æ˜“ @@ -945,16 +794,42 @@ Address: %4 æ”ć…„äș€æ˜“ - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - é’±ćŒ…ć·Čèą«<b>抠毆</b>ïŒŒćœ“ć‰äžș<b>è§Łé”</b>状态 + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + - + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> é’±ćŒ…ć·Čèą«<b>抠毆</b>ïŒŒćœ“ć‰äžș<b>锁漚</b>状态 - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. ć‘ç”Ÿè‡Žć‘œé”™èŻŻă€‚æ Œé›·ćŸ·ćžäžć†ćź‰ć…šïŒŒćłć°†é€€ć‡ș。 @@ -962,7 +837,7 @@ Address: %4 ClientModel - + Network Alert 眑络譊抄 @@ -1044,10 +919,6 @@ Address: %4 (un)select all (ć–æ¶ˆ)慹选 - - List mode - ćˆ—èĄšæšĄćŒ - Amount @@ -1422,7 +1293,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll 戛ć»ș民意调柄 @@ -1635,10 +1506,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP äœżç”š &UPnP æ˜ ć°„ç«ŻćŁ - - Proxy &IP: - ä»Łç†æœćŠĄć™š &IP - &Port: @@ -1805,10 +1672,6 @@ This label turns red, if the priority is smaller than "medium". Error Messages: - - DPOR Weight: - DPOR权重 - Magnitude: @@ -1834,10 +1697,6 @@ This label turns red, if the priority is smaller than "medium". Current Poll: ćœ“ć‰æ°‘æ„è°ƒæŸ„ïŒš - - Client Messages: - é’±ćŒ…æ¶ˆæŻïŒš - Available: @@ -1880,6 +1739,14 @@ This label turns red, if the priority is smaller than "medium". æœȘćźŒæˆćŒæ­„ + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1941,7 +1808,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1953,7 +1820,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A 侍揯甹 @@ -2038,7 +1905,12 @@ This label turns red, if the priority is smaller than "medium". 蟓ć‡ș - + + &Scraper + + + + Debug log file è°ƒèŻ•æ—„ćż—æ–‡ä»¶ @@ -2073,7 +1945,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B %1 B @@ -2108,12 +1980,12 @@ This label turns red, if the priority is smaller than "medium". %1 时 %2 戆 - + Gridcoin - Debug Console æ Œé›·ćŸ·ćž - è°ƒèŻ•æŽ§ćˆ¶ć° - + Boost version ćŠ é€Ÿć™šç‰ˆæœŹ @@ -2440,27 +2312,27 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: 金鱝(&M) - + Pay &To: 付给(&T) - + Form èĄšć• - + &Label: 标筟(&L)? - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) ä»˜æŹŸćœ°ć€ (äŸ‹ćŠ‚:Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2475,21 +2347,12 @@ This label turns red, if the priority is smaller than "medium". 移陀歀掄收者 - + Send Custom Message to a Gridcoin Recipient ć‘æ Œé›·ćŸ·ćžæ”¶æŹŸè€…ć‘é€ćžžç”šæ¶ˆæŻ - Track Coins - èżœèžȘèŽ§ćž - - - - Add Attachment - æ·»ćŠ é™„ä»¶ - - - + Alt+A Alt+A @@ -2762,49 +2625,58 @@ This label turns red, if the priority is smaller than "medium". - + Source æș - Generated - 生成 - - - + From 杄è‡Ș - Block Type - ćŒșć—ç±»ćž‹ + + Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + ç”Ÿæˆçš„æ Œé›·ćŸ·ćžćż…éĄ»ç»èż‡ 110 äžȘćŒșć—çš„æˆç†ŸæœŸćŽæ‰ćŻä»„äœżç”šă€‚ćŒșć—èą«ç”ŸæˆćŽïŒŒćźƒć°†èą«ćčżæ’­ćˆ°çœ‘络䞭仄抠慄ćŒșć—é“Ÿă€‚ćŠ‚æžœćźƒæœȘèƒœèż›ć…„ćŒșć—é“ŸïŒŒć…¶çŠ¶æ€ć°†ć˜äžș“æœȘèą«æŽ„ć—â€ćč¶äž”äžćŻäœżç”šă€‚æœ‰äș›æ—¶ć€™ïŒŒćŻèƒœäŒšæœ‰ćŠäž€äžȘ节ç‚čæŻ”äœ æ—©ć‡ ç§’é’ŸæˆćŠŸç”Ÿæˆäž€äžȘćŒșć—ïŒŒæ­€æ—¶ć°±ćŻèƒœć‘ç”Ÿèż™ç§æƒ…ć†”ă€‚ - Block Number - ćŒșć—æ•° + + Generated in CoinBase + - - Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - ç”Ÿæˆçš„æ Œé›·ćŸ·ćžćż…éĄ»ç»èż‡ 110 äžȘćŒșć—çš„æˆç†ŸæœŸćŽæ‰ćŻä»„äœżç”šă€‚ćŒșć—èą«ç”ŸæˆćŽïŒŒćźƒć°†èą«ćčżæ’­ćˆ°çœ‘络䞭仄抠慄ćŒșć—é“Ÿă€‚ćŠ‚æžœćźƒæœȘèƒœèż›ć…„ćŒșć—é“ŸïŒŒć…¶çŠ¶æ€ć°†ć˜äžș“æœȘèą«æŽ„ć—â€ćč¶äž”äžćŻäœżç”šă€‚æœ‰äș›æ—¶ć€™ïŒŒćŻèƒœäŒšæœ‰ćŠäž€äžȘ节ç‚čæŻ”äœ æ—©ć‡ ç§’é’ŸæˆćŠŸç”Ÿæˆäž€äžȘćŒșć—ïŒŒæ­€æ—¶ć°±ćŻèƒœć‘ç”Ÿèż™ç§æƒ…ć†”ă€‚ + + MINED - POS + - Information - äżĄæŻ + + MINED - POR + - - Generated in CoinBase + + MINED - ORPHANED - - Generated, PoS + + POS SIDE STAKE - + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + unknown æœȘ矄 @@ -2911,18 +2783,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Transaction ID - äș€æ˜“ID - - - Transaction - äș€æ˜“ - - - Inputs - èŸ“ć…„ - Amount @@ -2952,12 +2812,7 @@ This label turns red, if the priority is smaller than "medium". ćœ“ć‰éąæżæ˜Ÿç€șäș†äș€æ˜“çš„èŻŠç»†äżĄæŻ - - View Attachment - 柄看附件 - - - + Execute Contract ć±„èĄŒćˆćŒ @@ -2966,21 +2821,11 @@ This label turns red, if the priority is smaller than "medium". C&lose 慳闭(&l) - - - Gridcoin Documents - æ Œé›·ćŸ·ćžæ–‡æĄŁ - - - - Document cannot be found on P2P server. - æ–‡æĄŁćœšç‚čćŻčç‚čæœćŠĄć™šäžŠæœȘæ‰Ÿćˆ°ă€‚ - TransactionTableModel - + Date 旄期 @@ -3022,32 +2867,12 @@ This label turns red, if the priority is smaller than "medium". æ­€æ•°æźć—æœȘèą«ä»»äœ•ć…¶ä»–èŠ‚ç‚čæŽ„æ”¶ïŒŒćŻèƒœäžèą«æŽ„ć—ïŒ - - Mined - DPOR - æŒ–çŸżæ‰€ćŸ— - DPOR - - - - Minted - (Local) DPOR - æ–°çŸż - (æœŹćœ°)DPOR - - - - Mined - PoR - æŒ–çŸżæ‰€ćŸ— - PoR - - - - Mined - Interest - æŒ–çŸżæ‰€ćŸ— - ćˆ©æŻ - - - + Destination address of transaction. èœŹèŽŠç›źæ ‡ćœ°ć€ - + Open until %1 目戰 %1 ćŽć†æ‰“ćŒ€ @@ -3077,7 +2902,7 @@ This label turns red, if the priority is smaller than "medium". ć·Č生成䜆æœȘèą«æŽ„ć— - + Received with æ”¶æŹŸ @@ -3097,12 +2922,42 @@ This label turns red, if the priority is smaller than "medium". ä»˜æŹŸç»™è‡Șć·± - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (侍揯甹) - + Transaction status. Hover over this field to show number of confirmations. äș€æ˜“çŠ¶æ€ă€‚ éŒ æ ‡ç§»ćˆ°æ­€ćŒșćŸŸćŻæ˜Ÿç€șçĄźèź€éĄčæ•°é‡ă€‚ @@ -3291,29 +3146,10 @@ This label turns red, if the priority is smaller than "medium". 戰 - - UpgradeDialog - - Gridcoin Upgrading Facility - æ Œé›·ćŸ·ćžć‡çș§ć™š - - - Retry Download - é‡èŻ•äž‹èœœ - - - Upgrade - 捇çș§ - - - Hide - 隐藏 - - VotingChartDialog - + Poll Results 民意调柄结果 @@ -3403,14 +3239,6 @@ This label turns red, if the priority is smaller than "medium". Share Type èźĄç„šæ–čćŒ - - Question - 闼鱘 - - - Answers - ç­”æĄˆ - # Voters @@ -3421,10 +3249,6 @@ This label turns red, if the priority is smaller than "medium". Total Shares 总焚数 - - URL - çœ‘ć€ - Best Answer @@ -3450,10 +3274,6 @@ This label turns red, if the priority is smaller than "medium". Share Type. èźĄç„šæ–čćŒă€‚ - - Question. - 闼鱘。 - Total Participants. @@ -3464,10 +3284,6 @@ This label turns red, if the priority is smaller than "medium". Total Shares. æ€»ç„šæ•°ă€‚ - - URL. - çœ‘ć€ă€‚ - Best Answer. @@ -3477,7 +3293,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote æ”ŸçœźæŠ•ç„š @@ -3510,7 +3326,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... æ­Łćœšć‘é€... @@ -3518,41 +3334,41 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: 选éĄč - + Specify data directory æŒ‡ćźšæ•°æźç›źćœ• - + Connect to a node to retrieve peer addresses, and disconnect èżžæŽ„äž€äžȘ节ç‚čćč¶èŽ·ć–ćŻčç«Żćœ°ć€ïŒŒç„¶ćŽæ–­ćŒ€èżžæŽ„ - + Specify your own public address æŒ‡ćźšæ‚šçš„ć…Źć…±ćœ°ć€ - + Accept command line and JSON-RPC commands æŽ„ć—ć‘œä»€èĄŒć’Œ JSON-RPC ć‘œä»€ - + Run in the background as a daemon and accept commands ćœšćŽć°äœœäžșćźˆæŠ€èż›çš‹èżèĄŒćč¶æŽ„ć—æŒ‡ä»€ - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) ćœ“é’±ćŒ…èœŹèŽŠć˜ćŒ–æ—¶æ‰§èĄŒć‘œä»€ (ć‘œä»€èĄŒäž­çš„ %s äŒšèą«æ›żæąæˆTxID) @@ -3562,12 +3378,12 @@ This label turns red, if the priority is smaller than "medium". ćŒșć—ç”Ÿæˆé€‰éĄč - + Failed to listen on any port. Use -listen=0 if you want this. ç›‘ćŹä»»æ„ç«ŻćŁć€±èŽ„ă€‚ è‹„æ‚šćžŒæœ›ćŠ‚æ­€ïŒŒäœżç”š -listen=0. - + Specify wallet file (within data directory) æŒ‡ćźšé’±ćŒ…æ–‡ä»¶ïŒˆæ•°æźç›źćœ•ć†…ïŒ‰ @@ -3593,7 +3409,7 @@ This label turns red, if the priority is smaller than "medium". - + Execute command when the best block changes (%s in cmd is replaced by block hash) ćœ“æœ€äœłćŒșć—ć˜ćŒ–æ—¶æ‰§èĄŒć‘œä»€ (ć‘œä»€èĄŒäž­çš„ %s äŒšèą«æ›żæąæˆćŒșć—ć“ˆćžŒć€Œ) @@ -3603,12 +3419,12 @@ This label turns red, if the priority is smaller than "medium". äœżç”š -addnode, -seednode 撌 -connect选éĄčæ—¶ć…èźžDNS柄扟 - + To use the %s option äœżç”š %s 选éĄč - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -3633,7 +3449,7 @@ rpcpassword=%s - + Loading addresses... æ­ŁćœšćŠ èœœćœ°ć€... @@ -3643,22 +3459,22 @@ rpcpassword=%s æ— æ•ˆçš„ä»Łç†ćœ°ć€: '%s' - + Unknown network specified in -onlynet: '%s' èą«æŒ‡ćźšçš„æ˜ŻæœȘ矄眑络 -onlynet: '%s' - + Unable to bind to %s on this computer. Gridcoin is probably already running. æ— æł•ćœšæœŹæœș绑柚 %s ç«ŻćŁă€‚æŻ”ç‰čćžćźąæˆ·ç«ŻèœŻä»¶ćŻèƒœć·Čç»ćœšèżèĄŒă€‚ - + Unable to bind to %s on this computer (bind returned error %d, %s) æ— æł•ç»‘ćźšæœŹæœșç«ŻćŁ %s (èż”ć›žé”™èŻŻæ¶ˆæŻ %d, %s) - + Error: Wallet locked, unable to create transaction é”™èŻŻïŒšé’±ćŒ…ć·Čé”ćźšïŒŒäžèƒœćˆ›ć»șäș€æ˜“ @@ -3668,27 +3484,27 @@ rpcpassword=%s é”™èŻŻïŒšé’±ćŒ…è§Łé”ä»…ç”šäșŽæƒç›Šćąžć€ŒïŒŒæ— æł•ćˆ›ć»șäș€æ˜“。 - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds é”™èŻŻïŒšèœŹèŽŠéœ€èŠè‡łć°‘ %s çš„èœŹèŽŠèŽčïŒŒć› äžșć…¶æ•°éąïŒŒć€æ‚ćșŠæˆ–äœżç”šäș†èż‘æœŸæ”¶ćˆ°çš„ć­˜æŹŸ - + Error: Transaction creation failed é”™èŻŻïŒšäș€æ˜“ćˆ›ć»șć€±èŽ„ - + Sending... 揑送侭... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. äș€æ˜“èą«æ‹’ç»ă€‚æ‚šé’±ćŒ…äž­çš„é’±ćžćŻèƒœć·Čç»èą«èŠ±èŽčïŒŒäŸ‹ćŠ‚ćœ“æ‚šäœżç”šwallet.datæ–‡ä»¶çš„ć‰ŻæœŹïŒŒé’±ćžćœšèŻ„ć‰ŻæœŹäž­èą«èŠ±èŽč䜆æœȘćœšèż™é‡Œæ ‡èź°äžșć·Č花èŽčæ—¶ă€‚ - + Invalid amount æ— æ•ˆé‡‘éą @@ -3703,7 +3519,7 @@ rpcpassword=%s ćŠ èœœćŒșć—çŽąćŒ•... - + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s ćœ“èźŸçœźRPCç«ŻćŁ%uä»„èż›èĄŒIPv6ç›‘ćŹæ—¶ć‡șé”™ïŒŒć›žćˆ°IPv4: %s @@ -3739,7 +3555,7 @@ rpcpassword=<password> - + Boinc Mining @@ -3749,7 +3565,7 @@ rpcpassword=<password> - + Error obtaining next project. Error 06172014. @@ -3789,12 +3605,32 @@ rpcpassword=<password> - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3869,7 +3705,7 @@ rpcpassword=<password> 搑-server或gridcoindć‘é€æŒ‡ä»€ - + List commands ć‘œä»€ćˆ—èĄš @@ -3886,15 +3722,11 @@ rpcpassword=<password> æ Œé›·ćŸ·ćž - + This help message èŻ„ćžźćŠ©äżĄæŻ - - Specify configuration file (default: gridcoin.conf) - æŒ‡ćźšé…çœźæ–‡ä»¶ (é»˜èź€ïŒšgridcoin.conf) - Specify pid file (default: gridcoind.pid) @@ -3916,12 +3748,12 @@ rpcpassword=<password> æŒ‡ćźšèżžæŽ„è¶…æ—¶æŻ«ç§’æ•° (é»˜èź€: 5000) - + Connect through socks proxy é€šèż‡ socks ä»Łç†èżžæŽ„ - + Select the version of socks proxy to use (4-5, default: 5) 选择SOCKSæœćŠĄć™šçš„äœżç”šç‰ˆæœŹ(4-5, é»˜èź€ïŒš 5) @@ -3931,7 +3763,7 @@ rpcpassword=<password> äœżç”šä»Łç†ćˆ°èŸŸéšè—æœćŠĄć™š (é»˜èź€: 侎-proxy盾搌) - + Listen for connections on <port> (default: 32749 or testnet: 32748) äœżç”š<port>ç«ŻćŁç›‘ćŹèżžæŽ„ (é»˜èź€: 15714 æˆ–æ”‹èŻ•çœ‘ç»œ: 25714) {32749 ?} {32748)?} @@ -3941,31 +3773,27 @@ rpcpassword=<password> äżç•™æœ€ć€š <n> æĄèŠ‚ç‚čèżžæŽ„ (é»˜èź€: %u) - + Add a node to connect to and attempt to keep the connection open æ·»ćŠ èŠ‚ç‚čćč¶äžŽć…¶äżæŒèżžæŽ„ - + Connect only to the specified node(s) ćȘèżžæŽ„ćˆ°ç‰čćźšçš„èŠ‚ç‚č - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) ćȘèżžæŽ„ <net>眑络䞭的节ç‚č (ipv4, ipv6 或 onion) - + Discover own IP address (default: 1 when listening and no -externalip) æ‰Ÿćˆ°æ‚šè‡Ș深的IP朰杀(çŒș省:1ïŒŒćœ“ç›‘ćŹæ—¶ïŒŒ 䞔无 -externalip) - Find peers using internet relay chat (default: 0) - ćŻ»æ‰Ÿäœżç”šäș’è”çœ‘äž­ç»§èŠć€©çš„ćŒäŒŽ (é»˜èź€: 1) {0)?} - - - + Accept connections from outside (default: 1 if no -proxy or -connect) æŽ„ć—ć€–éƒšèżžæŽ„ (é»˜èź€: 1苄无 -proxy 或 -connect) @@ -3975,31 +3803,27 @@ rpcpassword=<password> ç»‘ćźšæŒ‡ćźšçš„IPćœ°ć€ćŒ€ć§‹ç›‘ćŹă€‚IPv6ćœ°ć€èŻ·äœżç”š[host]:port æ ŒćŒ - + Find peers using DNS lookup (default: 1) é€šèż‡DNS柄扟眑络䞊的节ç‚č (çŒș省: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) äžŽć…¶ä»–èŠ‚ç‚čćŒæ­„æ—¶é—Žă€‚æ— æ•ˆćŒ–äč‹ïŒŒè‹„æ‚šçš„çł»ç»Ÿæ—¶é—Žæ˜Żć‡†çĄźçš„ïŒŒäŸ‹ćŠ‚äžŽNTPćŒæ­„(é»˜èź€: 1) - Sync checkpoints policy (default: strict) - ćŒæ­„æŁ€æŸ„ç‚čç­–ç•„ (çŒș省䞄栌) - - - + Threshold for disconnecting misbehaving peers (default: 100) æ–­ćŒ€ 非瀌节ç‚čçš„é˜€ć€Œ (é»˜èź€: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) é™ćˆ¶ 非瀌节ç‚č è‹„ćčČç§’ć†…äžèƒœèżžæŽ„ (é»˜èź€: 86400) (??: 86400) - + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) æŻäžȘèżžæŽ„çš„æœ€ć€§æŽ„æ”¶çŒ“ć­˜ïŒŒ<n>*1000 ć­—èŠ‚ (é»˜èź€: 5000) @@ -4009,7 +3833,7 @@ rpcpassword=<password> æŻäžȘèżžæŽ„çš„æœ€ć€§ć‘é€çŒ“ć­˜ïŒŒ<n>*1000 ć­—èŠ‚ (é»˜èź€: 1000) - + Use UPnP to map the listening port (default: 1 when listening) äœżç”šUPnP暎éœČæœŹæœșç›‘ćŹç«ŻćŁïŒˆé»˜èź€ïŒš1 ćœ“æ­Łćœšç›‘ćŹ) @@ -4019,23 +3843,23 @@ rpcpassword=<password> äœżç”šUPnP暎éœČæœŹæœșç›‘ćŹç«ŻćŁïŒˆé»˜èź€ïŒš0 - + Fee per KB to add to transactions you send æŻć‘é€1KBäș€æ˜“所需的èŽč甹 - + When creating transactions, ignore inputs with value less than this (default: 0.01) ćœ“ç”Ÿæˆäș€æ˜“æ—¶ïŒŒćżœç•„ä»·ć€Œć°äșŽæ­€çš„èŸ“ć…„ (é»˜èź€ïŒš0.01) - + Use the test network äœżç”šæ”‹èŻ•çœ‘ç»œ - + Output extra debugging information. Implies all other -debug* options 蟓ć‡șè°ƒèŻ•äżĄæŻă€‚è•Žć«ä»»äœ•ć…¶ä»–-debug*选éĄč @@ -4045,7 +3869,7 @@ rpcpassword=<password> 蟓ć‡șéąć€–çœ‘ç»œè°ƒèŻ•äżĄæŻ - + Prepend debug output with timestamp 蟓ć‡șè°ƒèŻ•äżĄæŻæ—¶ïŒŒć‰éąćŠ äžŠæ—¶é—Žæˆł @@ -4055,7 +3879,7 @@ rpcpassword=<password> 跟èžȘ/è°ƒèŻ•äżĄæŻć‘é€ćˆ°è°ƒèŻ•ć™š - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) äœżç”š <port>ç«ŻćŁç›‘ćŹ JSON-RPC èżžæŽ„ (é»˜èź€: 15715 ; testnet: 25715) @@ -4065,7 +3889,7 @@ rpcpassword=<password> ć…èźžæ„è‡ȘæŒ‡ćźšIP朰杀的 JSON-RPC èżžæŽ„ - + Send commands to node running on <ip> (default: 127.0.0.1) 搑IP朰杀äžș <ip> 的节ç‚čć‘é€æŒ‡ä»€ (çŒș省: 127.0.0.1) @@ -4075,7 +3899,7 @@ rpcpassword=<password> æ”čć˜æ—¶èŠæ±‚äž€äžȘçĄźèź€ (é»˜èź€ïŒš0) - + Enforce transaction scripts to use canonical PUSH operators (default: 1) ćŒșćˆ¶èŠæ±‚èœŹèŽŠè„šæœŹäœżç”šPUSHèżçź—(é»˜èź€ïŒš1) @@ -4085,7 +3909,7 @@ rpcpassword=<password> ćœ“æ”¶ćˆ°ç›žć…łè­ŠæŠ„æ—¶æ‰§èĄŒæŒ‡ä»€ (ć‘œä»€èĄŒäž­çš„ %s äŒšèą«æ›żæąæˆæ¶ˆæŻ) - + Upgrade wallet to latest format 捇çș§é’±ćŒ…ćˆ°æœ€æ–°ç‰ˆ @@ -4101,7 +3925,7 @@ rpcpassword=<password> é‡æ–°æ‰«ææ•°æźé“Ÿä»„æŸ„æ‰Ÿé—æŒçš„äș€æ˜“ - + Attempt to recover private keys from a corrupt wallet.dat ć°èŻ•ä»Žäž€äžȘæŸćçš„wallet.datæ–‡ä»¶äž­æąć€ç§é’„ @@ -4196,6 +4020,16 @@ rpcpassword=<password> Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -4256,6 +4090,11 @@ rpcpassword=<password> ERROR + + + Entire balance reserved + + Expires @@ -4326,11 +4165,6 @@ rpcpassword=<password> Message æ¶ˆæŻ - - - Messate Type - - Miner: @@ -4367,12 +4201,7 @@ rpcpassword=<password> - - No coins; - - - - + Offline; @@ -4382,12 +4211,7 @@ rpcpassword=<password> - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -4412,12 +4236,12 @@ rpcpassword=<password> - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) ä»„æŻ”ç‰čäžșć•äœèźŸçœźé«˜äŒ˜ć…ˆçș§/䜎èŽčç”šçš„èœŹèŽŠçš„æœ€ć€§ć€§ć° (é»˜èź€: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) SSL选éĄč(见Bitcoin Wikiäž­SSLćź‰èŁ…çš„èźČè§Ł) @@ -4439,21 +4263,17 @@ rpcpassword=<password> - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - ćŻæŽ„ć—çš„ćŠ ćŻ†ć™š (é»˜èź€äžș TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + Invalid amount for -paytxfee=<amount>: '%s' éžæł•é‡‘éą -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. è­Šć‘ŠïŒš-paytxfee èą«èźŸçœźćŸ—éžćžžé«˜ïŒè‹„æ‚šć‘é€äž€äžȘèœŹèŽŠïŒŒèż™æ˜Żæ‚šć°†æ”Żä»˜çš„èœŹèŽŠèŽč。 - + Invalid amount for -mininput=<amount>: '%s' æ— æ•ˆé‡‘éą -paytxfee=<amount>: '%s' @@ -4463,22 +4283,22 @@ rpcpassword=<password> ćˆć§‹ćŒ–ćźŒæ•Žæ€§æŁ€æŸ„ć€±èŽ„ă€‚æ Œé›·ćŸ·ćžæ­Łćœšćœæ­ąèżèĄŒă€‚ - + Wallet %s resides outside data directory %s. é’±ćŒ…%s䜍äșŽæ•°æźç›źćœ•%säč‹ć€–。 - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. æ— æł•ç»™æ•°æźç›źćœ• %s ćŠ é”ă€‚æ Œé›·ćŸ·ćžèż›çš‹ćŻèƒœć·ČćœšèżèĄŒă€‚ - + Verifying database integrity... æŁ€æŸ„æ•°æźćș“ćźŒæ•Žæ€§... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. ćˆć§‹ćŒ–æ•°æźćș“çŽŻćąƒ %s 时ć‡ș错äžșæąć€ïŒŒć€‡ä»œèŻ„ç›źćœ•ïŒŒç„¶ćŽćˆ é™€é™€wallet.datäč‹ć€–çš„ć…šéƒšæ–‡ä»¶ @@ -4488,7 +4308,7 @@ rpcpassword=<password> è­Šć‘ŠïŒšwallet.datæŸćïŒŒæ•°æźć·ČæŠąæ•‘! 掟構的wallet.dat文件ć·Č朹%s侭保歘äžșwallet.{timestamp}.bak.è‹„æ‚šçš„äœ™éąæˆ–èœŹèŽŠèź°ćœ•æœ‰èŻŻïŒŒæ‚šćș”èŻ„ä»Žć€‡ä»œäž­æąć€ă€‚ - + Weight @@ -4498,17 +4318,17 @@ rpcpassword=<password> wallet.datæŸćïŒŒæŠąæ•‘ć€±èŽ„ - + Unknown -socks proxy version requested: %i èą«æŒ‡ćźšçš„æ˜ŻæœȘ矄socksä»Łç†ç‰ˆæœŹ: %i - + Invalid -tor address: '%s' 无效的 -tor 朰杀: '%s' - + Cannot resolve -bind address: '%s' æ— æł•è§Łæž -bind ç«ŻćŁćœ°ć€: '%s' @@ -4518,15 +4338,10 @@ rpcpassword=<password> æ— æł•è§Łæž -externalip 朰杀: '%s' - + Invalid amount for -reservebalance=<amount> ćŻč-reservebalance=<amount> æ— æ•ˆçš„é‡‘éą - - Unable to sign checkpoint, wrong checkpointkey? - - æ— æł•ç­ŸćæŁ€æŸ„ç‚čïŒŒæŁ€æŸ„ç‚čćŻ†é’„é”™èŻŻïŒŸ - Error loading blkindex.dat @@ -4543,20 +4358,25 @@ rpcpassword=<password> wallet.daté’±ćŒ…æ–‡ä»¶ćŠ èœœé”™èŻŻïŒšé’±ćŒ…æŸć - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. è­Šć‘ŠïŒš èŻ»ć–wallet.dat时ć‡șçŽ°é”™èŻŻïŒæ‰€æœ‰ćŻ†é’„ć‡ć·Čæ­ŁçĄźè§ŁèŻ»ïŒŒäœ†èœŹèŽŠæ•°æźæˆ–ćœ°ć€ç°żæĄç›źćŻèƒœçŒșć€±æˆ–äžæ­ŁçĄźă€‚ - + Error loading wallet.dat: Wallet requires newer version of Gridcoin wallet.daté’±ćŒ…æ–‡ä»¶ćŠ èœœé”™èŻŻïŒšèŻ·ć‡çș§ćˆ°æœ€æ–°æ Œé›·ćŸ·ćžćźąæˆ·ç«Ż - + Vote 投焚 + + + Waiting for coins to mature + + Wallet locked; @@ -4568,12 +4388,12 @@ rpcpassword=<password> é’±ćŒ…æ–‡ä»¶éœ€èŠé‡ć†™ïŒšèŻ·é€€ć‡șćč¶é‡æ–°ćŻćŠšæ Œé›·ćŸ·ćžćźąæˆ·ç«Ż - + Error loading wallet.dat wallet.daté’±ćŒ…æ–‡ä»¶ćŠ èœœé”™èŻŻ - + Cannot downgrade wallet æ— æł•é™çș§é’±ćŒ… @@ -4583,12 +4403,12 @@ rpcpassword=<password> æ— æł•ć†™ć…„çŒș省朰杀 - + Rescanning... æ­Łćœšé‡æ–°æ‰«æ... - + Importing blockchain data file. ćŻŒć…„ćŒșć—é“Ÿæ•°æźæ–‡ä»¶ă€‚ @@ -4603,34 +4423,22 @@ rpcpassword=<password> é”™èŻŻ: æ— æł•ćŻćŠšèŠ‚ç‚č - + Done loading ćŠ èœœćźŒæˆ - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. è­Šć‘ŠïŒšèŻ·çĄźćźšæ‚šćœ“ć‰èźĄçź—æœșçš„æ—„æœŸć’Œæ—¶é—Žæ˜Żæ­ŁçĄźçš„ïŒæ Œé›·ćŸ·ćžć°†æ— æł•ćœšé”™èŻŻçš„æ—¶é—Žäž‹æ­Łćžžć·„äœœă€‚ - Warning: This version is obsolete, upgrade required! - è­Šć‘ŠïŒšæ­€ç‰ˆæœŹć·Čèą«ćșŸćŒƒïŒŒèŠæ±‚ć‡çș§ïŒ - - - WARNING: synchronized checkpoint violation detected, but skipped! - è­Šć‘ŠïŒšć‘çŽ°ć·ČćŒæ­„çš„æŁ€æŸ„ç‚č有ć†ČçȘïŒŒäœ†ć·Čè·łèż‡ïŒ - - - + Warning: Disk space is low! è­Šć‘ŠïŒšçŁç›˜ć‰©äœ™ç©ș闎䜎! - WARNING: Invalid checkpoint found! Displayed transactions may not be correct! You may need to upgrade, or notify developers. - è­Šć‘ŠïŒšć‘çŽ°æ— æ•ˆæŁ€æŸ„ç‚č星ç€șçš„èœŹèŽŠćŻèƒœäžæ­ŁçĄźïŒæ‚šćŻèƒœéœ€èŠć‡çș§æˆ–ć‘ŠçŸ„ćŒ€ć‘è€…ă€‚ - - - + Error é”™èŻŻ diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts index e4646365df..d7f4b90dea 100644 --- a/src/qt/locale/bitcoin_zh_TW.ts +++ b/src/qt/locale/bitcoin_zh_TW.ts @@ -299,12 +299,12 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... ç°œçœČèšŠæŻ... - + &Overview 瞜芜 @@ -400,7 +400,7 @@ This product includes software developed by the OpenSSL Project for use in the O ç”æŸæ‡‰ç”šçš‹ćŒ - + &Options... 遾項... @@ -415,7 +415,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + %n second(s) ago @@ -443,7 +443,7 @@ This product includes software developed by the OpenSSL Project for use in the O - + Date: %1 Amount: %2 Type: %3 @@ -451,7 +451,7 @@ Address: %4 - + Staking.<br>Your weight is %1<br>Network weight is %2<br><b>Estimated</b> time to earn reward is %3. @@ -461,18 +461,10 @@ Address: %4 - &Backup Wallet... - ć‚™ä»œéŒąćŒ…... - - - + &Change Passphrase... æ”čèźŠćŻ†çąŒ... - - Backup wallet to another location - æŠŠéŒąćŒ…ć‚™ä»œćˆ°ć…¶ćźƒćœ°æ–č - Change the passphrase used for wallet encryption @@ -524,7 +516,7 @@ Address: %4 é©—è­‰èšŠæŻ... - + Wallet 錱挅 @@ -534,7 +526,7 @@ Address: %4 - + &Send ä»˜æŹŸ @@ -554,28 +546,12 @@ Address: %4 - - &Neural Network - - - - - Neural Network - - - - - &New User Wizard - - - - - + New User Wizard - + &Voting @@ -585,7 +561,7 @@ Address: %4 - + &Diagnostics @@ -615,14 +591,14 @@ Address: %4 - + [testnet] [testnet] - + Gridcoin client @@ -632,7 +608,7 @@ Address: %4 - + Last received block was generated %1. @@ -677,7 +653,7 @@ Address: %4 - + URI handling URI 處理 @@ -736,7 +712,7 @@ Address: %4 - + %n second(s) %n 秒鐘 @@ -764,7 +740,37 @@ Address: %4 - + + Scraper: waiting on wallet to sync. + + + + + Scraper: superblock not needed - inactive. + + + + + Scraper: downloading and processing stats. + + + + + Scraper: Convergence achieved, date/time %1. All projects on whitelist included. + + + + + Scraper: Convergence achieved, date/time %1 UTC. Project(s) excluded: %2. + + + + + Scraper: No convergence able to be achieved. Will retry in a few minutes. + + + + &File æȘ”æĄˆ @@ -779,17 +785,12 @@ Address: %4 - - &Advanced - - - - + &Help èȘȘ明 - + Processed %n block(s) of transaction history. ć·Č經處理äș† %n 怋捀桊的äș€æ˜“çŽ€éŒ„ă€‚ @@ -801,12 +802,12 @@ Address: %4 最新狀態 - + Catching up... æ­Łćœšè¶•é€ČćșŠ... - + Sent transaction ä»˜æŹŸäș€æ˜“ @@ -816,16 +817,12 @@ Address: %4 æ”¶æŹŸäș€æ˜“ - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 錱挅<b>ć·Č抠毆</b>侩侔<b>è§ŁéŽ–äž­</b> - - - + Wallet is <b>encrypted</b> and currently <b>locked</b> 錱挅<b>ć·Č抠毆</b>侩侔<b>侊鎖侭</b> - + A fatal error occurred. Gridcoin can no longer continue safely and will quit. @@ -833,7 +830,7 @@ Address: %4 ClientModel - + Network Alert @@ -915,10 +912,6 @@ Address: %4 (un)select all ć…šéžæˆ–ć…šäžéž - - List mode - ćˆ—èĄšæšĄćŒ - Amount @@ -1284,7 +1277,7 @@ This label turns red, if the priority is smaller than "medium". NewPollDialog - + Create Poll @@ -1497,10 +1490,6 @@ This label turns red, if the priority is smaller than "medium". Map port using &UPnP 甹 &UPnP èš­ćźšé€šèšŠćŸ ć°æ‡‰ - - Proxy &IP: - ä»Łç†äœć€: - &Port: @@ -1734,6 +1723,14 @@ This label turns red, if the priority is smaller than "medium". + + QObject + + + %1 didn't yet exit safely... + + + QRCodeDialog @@ -1795,7 +1792,7 @@ This label turns red, if the priority is smaller than "medium". RPCConsole - + @@ -1807,7 +1804,7 @@ This label turns red, if the priority is smaller than "medium". - + N/A æœȘ矄 @@ -1827,12 +1824,12 @@ This label turns red, if the priority is smaller than "medium". ć•“ć‹•æ™‚é–“ - + Gridcoin - Debug Console - + Boost version @@ -1907,7 +1904,12 @@ This label turns red, if the priority is smaller than "medium". 開敓 - + + &Scraper + + + + Command-line options ć‘œä»€ćˆ—éžé … @@ -1997,7 +1999,7 @@ This label turns red, if the priority is smaller than "medium". - + %1 B %1 B (äœć…ƒç”„) @@ -2294,22 +2296,22 @@ This label turns red, if the priority is smaller than "medium". SendCoinsEntry - + A&mount: 金額: - + Pay &To: 付甊: - + &Label: 暙蚘: - + Alt+A Alt+A @@ -2335,12 +2337,12 @@ This label turns red, if the priority is smaller than "medium". è«‹èŒžć…„é€™ć€‹äœć€çš„æš™èš˜äŸ†æŠŠćźƒćŠ é€Čäœć€ç°żäž­ - + Form èĄšć–ź - + The address to send the payment to (e.g. Sjz75uKHzUQJnSdzvpiigEGxseKkDhQToX) @@ -2355,17 +2357,12 @@ This label turns red, if the priority is smaller than "medium". - + Send Custom Message to a Gridcoin Recipient - - Add Attachment - - - - + Enter a Gridcoin address (e.g. S67nL4vELWwdDVzjgtEP4MxryarTZ9a8GB) @@ -2612,22 +2609,47 @@ This label turns red, if the priority is smaller than "medium". - + Source 䟆æș - + Generated in CoinBase - - Generated, PoS + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE - + + MINED - UNKNOWN + + + + TX ID @@ -2662,10 +2684,6 @@ This label turns red, if the priority is smaller than "medium". Transaction Inputs - - Generated - 生由ć‡ș䟆 - @@ -2695,10 +2713,6 @@ This label turns red, if the priority is smaller than "medium". Gridcoin generated coins must mature 110 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Information - èł‡èšŠ - label @@ -2753,18 +2767,6 @@ This label turns red, if the priority is smaller than "medium". Comment 附蚻 - - Transaction ID - äș€æ˜“è­˜ćˆ„çąŒ - - - Transaction - äș€æ˜“ - - - Inputs - èŒžć…„ - Amount @@ -2794,12 +2796,7 @@ This label turns red, if the priority is smaller than "medium". 這怋版靱顯ç€șé€™æŹĄäș€æ˜“çš„è©łçŽ°èȘȘ明 - - View Attachment - - - - + Execute Contract @@ -2808,21 +2805,11 @@ This label turns red, if the priority is smaller than "medium". C&lose 關閉 - - - Gridcoin Documents - - - - - Document cannot be found on P2P server. - - TransactionTableModel - + Date 旄期 @@ -2857,32 +2844,12 @@ This label turns red, if the priority is smaller than "medium". - - Mined - DPOR - - - - - Minted - (Local) DPOR - - - - - Mined - PoR - - - - - Mined - Interest - - - - + Destination address of transaction. - + Open for %n more block(s) 戰例 %n 怋捀桊生ć‡șäŸ†ć‰ćŻäżźæ”č @@ -2919,7 +2886,7 @@ This label turns red, if the priority is smaller than "medium". 生由ć‡șäŸ†äœ†æ˜Żäžèą«æŽ„ć— - + Received with æ”¶æŹŸ @@ -2939,12 +2906,42 @@ This label turns red, if the priority is smaller than "medium". 付甊è‡Șć·± - + + MINED - POS + + + + + MINED - POR + + + + + MINED - ORPHANED + + + + + POS SIDE STAKE + + + + + POR SIDE STAKE + + + + + MINED - UNKNOWN + + + + (n/a) (䞍適甚) - + Transaction status. Hover over this field to show number of confirmations. äș€æ˜“ç‹€æ…‹ă€‚æŠŠæžžæš™ćœćœšæŹ„äœäžŠæœƒéĄŻç€șçąșèȘæŹĄæ•žă€‚ @@ -3133,17 +3130,10 @@ This label turns red, if the priority is smaller than "medium". 戰 - - UpgradeDialog - - Hide - 隱藏 - - VotingChartDialog - + Poll Results @@ -3287,7 +3277,7 @@ This label turns red, if the priority is smaller than "medium". VotingVoteDialog - + PlaceVote @@ -3320,7 +3310,7 @@ This label turns red, if the priority is smaller than "medium". WalletModel - + Sending... @@ -3328,12 +3318,12 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - + Options: 遾項: - + This help message @@ -3368,12 +3358,12 @@ This label turns red, if the priority is smaller than "medium". - + Connect through socks proxy - + Select the version of socks proxy to use (4-5, default: 5) @@ -3383,7 +3373,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for connections on <port> (default: 32749 or testnet: 32748) @@ -3393,7 +3383,7 @@ This label turns red, if the priority is smaller than "medium". - + Connect only to the specified node(s) @@ -3403,22 +3393,22 @@ This label turns red, if the priority is smaller than "medium". é€Łç·šćˆ°æŸć€‹çŻ€é»žäŸ†ć–ćŸ—ć…¶ćźƒçŻ€é»žçš„äœć€ïŒŒç„¶ćŸŒæ–·ç·š - + Specify your own public address æŒ‡ćźšè‡Șć·±çš„ć…Źé–‹äœć€ - + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Discover own IP address (default: 1 when listening and no -externalip) - + Accept connections from outside (default: 1 if no -proxy or -connect) @@ -3428,22 +3418,22 @@ This label turns red, if the priority is smaller than "medium". - + Find peers using DNS lookup (default: 1) - + Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1) - + Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) @@ -3538,6 +3528,16 @@ This label turns red, if the priority is smaller than "medium". Block read failed + + + Blocks Loaded + + + + + Blocks Verified + + Boinc Public Key @@ -3598,6 +3598,11 @@ This label turns red, if the priority is smaller than "medium". ERROR + + + Entire balance reserved + + Expires @@ -3663,11 +3668,6 @@ This label turns red, if the priority is smaller than "medium". Message èšŠæŻ - - - Messate Type - - Miner: @@ -3704,12 +3704,7 @@ This label turns red, if the priority is smaller than "medium". - - No coins; - - - - + Offline; @@ -3719,12 +3714,7 @@ This label turns red, if the priority is smaller than "medium". - - Out of rance exception while parsing Transaction Message -> - - - - + Public Key @@ -3804,12 +3794,12 @@ This label turns red, if the priority is smaller than "medium". - + Fee per KB to add to transactions you send - + When creating transactions, ignore inputs with value less than this (default: 0.01) @@ -3820,12 +3810,12 @@ This label turns red, if the priority is smaller than "medium". - + Use the test network - + Output extra debugging information. Implies all other -debug* options @@ -3835,7 +3825,7 @@ This label turns red, if the priority is smaller than "medium". - + Prepend debug output with timestamp @@ -3845,7 +3835,7 @@ This label turns red, if the priority is smaller than "medium". - + Listen for JSON-RPC connections on <port> (default: 15715 or testnet: 25715) @@ -3855,7 +3845,7 @@ This label turns red, if the priority is smaller than "medium". - + Send commands to node running on <ip> (default: 127.0.0.1) @@ -3865,7 +3855,7 @@ This label turns red, if the priority is smaller than "medium". - + Enforce transaction scripts to use canonical PUSH operators (default: 1) @@ -3875,7 +3865,7 @@ This label turns red, if the priority is smaller than "medium". - + Upgrade wallet to latest format @@ -3890,7 +3880,7 @@ This label turns red, if the priority is smaller than "medium". - + Attempt to recover private keys from a corrupt wallet.dat @@ -3910,7 +3900,7 @@ This label turns red, if the priority is smaller than "medium". - + Boinc Mining @@ -3920,7 +3910,7 @@ This label turns red, if the priority is smaller than "medium". - + Error obtaining next project. Error 06172014. @@ -3970,12 +3960,32 @@ This label turns red, if the priority is smaller than "medium". - + Mining - + + No coins + + + + + No current polls + + + + + Out of range exception while parsing Transaction Message -> + + + + + POR Blocks Verified + + + + Please wait for new user wizard to start... @@ -3990,12 +4000,12 @@ This label turns red, if the priority is smaller than "medium". - + Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + SSL options: (see the Bitcoin Wiki for SSL setup instructions) @@ -4015,17 +4025,17 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -paytxfee=<amount>: '%s' - + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Invalid amount for -mininput=<amount>: '%s' @@ -4035,22 +4045,22 @@ This label turns red, if the priority is smaller than "medium". - + Wallet %s resides outside data directory %s. - + Cannot obtain a lock on data directory %s. Gridcoin is probably already running. - + Verifying database integrity... - + Error initializing database environment %s! To recover, BACKUP THAT DIRECTORY, then remove everything from it except for wallet.dat. @@ -4060,10 +4070,15 @@ This label turns red, if the priority is smaller than "medium". - + Vote + + + Waiting for coins to mature + + Wallet locked; @@ -4080,17 +4095,17 @@ This label turns red, if the priority is smaller than "medium". - + Unknown -socks proxy version requested: %i - + Invalid -tor address: '%s' - + Cannot resolve -bind address: '%s' @@ -4100,7 +4115,7 @@ This label turns red, if the priority is smaller than "medium". - + Invalid amount for -reservebalance=<amount> @@ -4115,22 +4130,22 @@ This label turns red, if the priority is smaller than "medium". - + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Error loading wallet.dat: Wallet requires newer version of Gridcoin - + Wallet needed to be rewritten: restart Gridcoin to complete - + Error loading wallet.dat @@ -4150,17 +4165,17 @@ This label turns red, if the priority is smaller than "medium". - + Unable to bind to %s on this computer. Gridcoin is probably already running. - + Unable to bind to %s on this computer (bind returned error %d, %s) - + Error: Wallet locked, unable to create transaction @@ -4170,47 +4185,47 @@ This label turns red, if the priority is smaller than "medium". - + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds - + Error: Transaction creation failed - + Sending... - + Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Invalid amount - + Warning: Please check that your computer's date and time are correct! If your clock is wrong Gridcoin will not work properly. - + Warning: Disk space is low! - + Run in the background as a daemon and accept commands ç”šè­·éˆæšĄćŒćœšèƒŒæ™ŻćŸ·èĄŒäžŠæŽ„ć—æŒ‡ä»€ - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) ç•¶éŒąćŒ…æœ‰äș€æ˜“æ”čèźŠæ™‚èŠćŸ·èĄŒçš„æŒ‡ä»€(指什䞭的 %s æœƒèą«ć–ä»Łæˆäș€æ˜“è­˜ćˆ„çąŒ) @@ -4220,12 +4235,12 @@ This label turns red, if the priority is smaller than "medium". ć€ćĄŠèŁœé€ éžé …: - + Failed to listen on any port. Use -listen=0 if you want this. ćœšä»»æ„çš„é€šèšŠćŸ èœć€™ć€±æ•—ă€‚ćŠ‚æžœäœ ćžŒæœ›é€™æšŁçš„è©±ïŒŒćŻä»„èš­ćźš -listen=0. - + Specify wallet file (within data directory) æŒ‡ćźšéŒąćŒ…æȘ”(æœƒćœšèł‡æ–™ç›źéŒ„äž­) @@ -4250,7 +4265,7 @@ This label turns red, if the priority is smaller than "medium". JSON-RPC é€Łç·šćŻ†çąŒ - + Execute command when the best block changes (%s in cmd is replaced by block hash) ç•¶æœ€æ–°ć€ćĄŠæ”čèźŠæ™‚èŠćŸ·èĄŒçš„æŒ‡ä»€(指什䞭的 %s æœƒèą«ć–ä»Łæˆć€ćĄŠé›œæčŠć€Œ) @@ -4260,12 +4275,12 @@ This label turns red, if the priority is smaller than "medium". ć…èš±ć° -addnode, -seednode, -connect çš„ćƒæ•žäœżç”šćŸŸćæŸ„è©ą - + To use the %s option - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -4297,12 +4312,12 @@ If the file does not exist, create it with owner-readable-only file permissions. - + Gridcoin version - + Usage: ç”šæł•: @@ -4312,7 +4327,7 @@ If the file does not exist, create it with owner-readable-only file permissions. - + List commands @@ -4337,12 +4352,12 @@ If the file does not exist, create it with owner-readable-only file permissions. ç„Ąæ•ˆçš„ -proxy äœć€: '%s' - + Unknown network specified in -onlynet: '%s' 朹 -onlynet æŒ‡ćźšäș†äžæ˜Žçš„ç¶Čè·Żćˆ„: '%s' - + Insufficient funds çŽŻç©é‡‘éĄäžè¶ł @@ -4352,17 +4367,17 @@ If the file does not exist, create it with owner-readable-only file permissions. æ­ŁćœšèŒ‰ć…„ć€ćĄŠçŽąćŒ•... - + Add a node to connect to and attempt to keep the connection open ćąžćŠ äž€ć€‹èŠé€Łç·šçš„çŻ€ç·šïŒŒäžŠè©Šè‘—äżæŒć°ćźƒçš„é€Łç·šæšąé€š - + Loading wallet... æ­ŁćœšèŒ‰ć…„éŒąćŒ…èł‡æ–™... - + Cannot downgrade wallet æČ’èŸŠæł•æŠŠéŒąćŒ…æ ŒćŒé™çŽš @@ -4372,17 +4387,17 @@ If the file does not exist, create it with owner-readable-only file permissions. æČ’èŸŠæł•æŠŠé èš­äœć€ćŻ«é€Č掻 - + Rescanning... æ­Łćœšé‡æ–°æŽƒæ... - + Done loading èŒ‰ć…„ćźŒæˆ - + Error 錯èȘ€ From 4bae08442db6921d0387aec723a062cf819378b7 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Fri, 3 May 2019 06:07:29 +0200 Subject: [PATCH 006/115] Update crypto to edc68d40e9689f74f4cdfba010691e9811786086. --- configure.ac | 37 +++- src/Makefile.am | 10 + src/crypto/aes.cpp | 64 +------ src/crypto/aes.h | 53 +----- src/crypto/common.h | 2 +- src/crypto/hmac_sha256.cpp | 2 +- src/crypto/hmac_sha256.h | 8 +- src/crypto/hmac_sha512.cpp | 2 +- src/crypto/hmac_sha512.h | 2 +- src/crypto/poly1305.cpp | 141 ++++++++++++++ src/crypto/poly1305.h | 17 ++ src/crypto/ripemd160.cpp | 2 +- src/crypto/ripemd160.h | 6 +- src/crypto/sha1.cpp | 2 +- src/crypto/sha256.cpp | 96 ++++++++-- src/crypto/sha256.h | 2 +- src/crypto/sha256_avx2.cpp | 4 - src/crypto/sha256_shani.cpp | 359 ++++++++++++++++++++++++++++++++++++ src/crypto/sha256_sse4.cpp | 1 - src/crypto/sha256_sse41.cpp | 4 - src/crypto/sha512.cpp | 2 +- src/crypto/sha512.h | 2 +- src/crypto/siphash.cpp | 173 +++++++++++++++++ src/crypto/siphash.h | 47 +++++ 24 files changed, 875 insertions(+), 163 deletions(-) create mode 100644 src/crypto/poly1305.cpp create mode 100644 src/crypto/poly1305.h create mode 100644 src/crypto/sha256_shani.cpp create mode 100644 src/crypto/siphash.cpp create mode 100644 src/crypto/siphash.h diff --git a/configure.ac b/configure.ac index 70f6484cd6..10a010e646 100755 --- a/configure.ac +++ b/configure.ac @@ -234,12 +234,20 @@ if test "x$CXXFLAGS_overridden" = "xno"; then AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]]) fi - # Check for optional instruction set support. Enabling these does _not_ imply that all code will - # be compiled with them, rather that specific objects/libs may use them after checking for runtime - # compatibility. - AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]]) +enable_hwcrc32=no +enable_sse41=no +enable_avx2=no +enable_shani=no + +if test "x$use_asm" = "xyes"; then + +# Check for optional instruction set support. Enabling these does _not_ imply that all code will +# be compiled with them, rather that specific objects/libs may use them after checking for runtime +# compatibility. +AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-msse4.1],[[SSE41_CXXFLAGS="-msse4.1"]],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-mavx -mavx2],[[AVX2_CXXFLAGS="-mavx -mavx2"]],,[[$CXXFLAG_WERROR]]) +AX_CHECK_COMPILE_FLAG([-msse4 -msha],[[SHANI_CXXFLAGS="-msse4 -msha"]],,[[$CXXFLAG_WERROR]]) TEMP_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS" @@ -301,6 +309,25 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ) CXXFLAGS="$TEMP_CXXFLAGS" +TEMP_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $SHANI_CXXFLAGS" +AC_MSG_CHECKING(for SHA-NI intrinsics) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]],[[ + __m128i i = _mm_set1_epi32(0); + __m128i j = _mm_set1_epi32(1); + __m128i k = _mm_set1_epi32(2); + return _mm_extract_epi32(_mm_sha256rnds2_epu32(i, i, k), 0); + ]])], + [ AC_MSG_RESULT(yes); enable_shani=yes; AC_DEFINE(ENABLE_SHANI, 1, [Define this symbol to build code that uses SHA-NI intrinsics]) ], + [ AC_MSG_RESULT(no)] +) +CXXFLAGS="$TEMP_CXXFLAGS" + +fi + CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" AC_ARG_WITH([utils], @@ -1115,6 +1142,7 @@ AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes]) AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes]) AM_CONDITIONAL([ENABLE_SSE41],[test x$enable_sse41 = xyes]) AM_CONDITIONAL([ENABLE_AVX2],[test x$enable_avx2 = xyes]) +AM_CONDITIONAL([ENABLE_SHANI],[test x$enable_shani = xyes]) AM_CONDITIONAL([USE_ASM],[test x$use_asm = xyes]) AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version]) @@ -1149,6 +1177,7 @@ AC_SUBST(PIE_FLAGS) AC_SUBST(SSE42_CXXFLAGS) AC_SUBST(SSE41_CXXFLAGS) AC_SUBST(AVX2_CXXFLAGS) +AC_SUBST(SHANI_CXXFLAGS) AC_SUBST(LIBTOOL_APP_LDFLAGS) AC_SUBST(USE_UPNP) AC_SUBST(USE_QRCODE) diff --git a/src/Makefile.am b/src/Makefile.am index a710446646..3f7272f32d 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -34,6 +34,10 @@ if ENABLE_AVX2 LIBGRIDCOIN_CRYPTO_AVX2 = crypto/libgridcoin_crypto_avx2.a LIBGRIDCOIN_CRYPTO += $(LIBGRIDCOIN_CRYPTO_AVX2) endif +if ENABLE_SHANI +LIBGRIDCOIN_CRYPTO_SHANI = crypto/libgridcoin_crypto_shani.a +LIBGRIDCOIN_CRYPTO += $(LIBGRIDCOIN_CRYPTO_SHANI) +endif # Make is not made aware of per-object dependencies to avoid limiting building parallelization # But to build the less dependent modules first, we manually select their order here: @@ -236,6 +240,12 @@ crypto_libgridcoin_crypto_avx2_a_CXXFLAGS += $(AVX2_CXXFLAGS) crypto_libgridcoin_crypto_avx2_a_CPPFLAGS += -DENABLE_AVX2 crypto_libgridcoin_crypto_avx2_a_SOURCES = crypto/sha256_avx2.cpp +crypto_libgridcoin_crypto_shani_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +crypto_libgridcoin_crypto_shani_a_CPPFLAGS = $(AM_CPPFLAGS) +crypto_libgridcoin_crypto_shani_a_CXXFLAGS += $(SHANI_CXXFLAGS) +crypto_libgridcoin_crypto_shani_a_CPPFLAGS += -DENABLE_SHANI +crypto_libgridcoin_crypto_shani_a_SOURCES = crypto/sha256_shani.cpp + CTAES_DIST = crypto/ctaes/bench.c CTAES_DIST += crypto/ctaes/ctaes.c CTAES_DIST += crypto/ctaes/ctaes.h diff --git a/src/crypto/aes.cpp b/src/crypto/aes.cpp index bf7a252349..2dc2133434 100644 --- a/src/crypto/aes.cpp +++ b/src/crypto/aes.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2016-2017 The Bitcoin Core developers +// Copyright (c) 2016-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -12,36 +12,6 @@ extern "C" { #include } -AES128Encrypt::AES128Encrypt(const unsigned char key[16]) -{ - AES128_init(&ctx, key); -} - -AES128Encrypt::~AES128Encrypt() -{ - memset(&ctx, 0, sizeof(ctx)); -} - -void AES128Encrypt::Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const -{ - AES128_encrypt(&ctx, 1, ciphertext, plaintext); -} - -AES128Decrypt::AES128Decrypt(const unsigned char key[16]) -{ - AES128_init(&ctx, key); -} - -AES128Decrypt::~AES128Decrypt() -{ - memset(&ctx, 0, sizeof(ctx)); -} - -void AES128Decrypt::Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const -{ - AES128_decrypt(&ctx, 1, plaintext, ciphertext); -} - AES256Encrypt::AES256Encrypt(const unsigned char key[32]) { AES256_init(&ctx, key); @@ -182,35 +152,3 @@ AES256CBCDecrypt::~AES256CBCDecrypt() { memset(iv, 0, sizeof(iv)); } - -AES128CBCEncrypt::AES128CBCEncrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn) - : enc(key), pad(padIn) -{ - memcpy(iv, ivIn, AES_BLOCKSIZE); -} - -AES128CBCEncrypt::~AES128CBCEncrypt() -{ - memset(iv, 0, AES_BLOCKSIZE); -} - -int AES128CBCEncrypt::Encrypt(const unsigned char* data, int size, unsigned char* out) const -{ - return CBCEncrypt(enc, iv, data, size, pad, out); -} - -AES128CBCDecrypt::AES128CBCDecrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn) - : dec(key), pad(padIn) -{ - memcpy(iv, ivIn, AES_BLOCKSIZE); -} - -AES128CBCDecrypt::~AES128CBCDecrypt() -{ - memset(iv, 0, AES_BLOCKSIZE); -} - -int AES128CBCDecrypt::Decrypt(const unsigned char* data, int size, unsigned char* out) const -{ - return CBCDecrypt(dec, iv, data, size, pad, out); -} diff --git a/src/crypto/aes.h b/src/crypto/aes.h index 2dec8d9558..e06c8de272 100644 --- a/src/crypto/aes.h +++ b/src/crypto/aes.h @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2017 The Bitcoin Core developers +// Copyright (c) 2015-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. // @@ -12,33 +12,8 @@ extern "C" { } static const int AES_BLOCKSIZE = 16; -static const int AES128_KEYSIZE = 16; static const int AES256_KEYSIZE = 32; -/** An encryption class for AES-128. */ -class AES128Encrypt -{ -private: - AES128_ctx ctx; - -public: - explicit AES128Encrypt(const unsigned char key[16]); - ~AES128Encrypt(); - void Encrypt(unsigned char ciphertext[16], const unsigned char plaintext[16]) const; -}; - -/** A decryption class for AES-128. */ -class AES128Decrypt -{ -private: - AES128_ctx ctx; - -public: - explicit AES128Decrypt(const unsigned char key[16]); - ~AES128Decrypt(); - void Decrypt(unsigned char plaintext[16], const unsigned char ciphertext[16]) const; -}; - /** An encryption class for AES-256. */ class AES256Encrypt { @@ -89,30 +64,4 @@ class AES256CBCDecrypt unsigned char iv[AES_BLOCKSIZE]; }; -class AES128CBCEncrypt -{ -public: - AES128CBCEncrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn); - ~AES128CBCEncrypt(); - int Encrypt(const unsigned char* data, int size, unsigned char* out) const; - -private: - const AES128Encrypt enc; - const bool pad; - unsigned char iv[AES_BLOCKSIZE]; -}; - -class AES128CBCDecrypt -{ -public: - AES128CBCDecrypt(const unsigned char key[AES128_KEYSIZE], const unsigned char ivIn[AES_BLOCKSIZE], bool padIn); - ~AES128CBCDecrypt(); - int Decrypt(const unsigned char* data, int size, unsigned char* out) const; - -private: - const AES128Decrypt dec; - const bool pad; - unsigned char iv[AES_BLOCKSIZE]; -}; - #endif // BITCOIN_CRYPTO_AES_H diff --git a/src/crypto/common.h b/src/crypto/common.h index baadd8db13..01cde3fd5d 100644 --- a/src/crypto/common.h +++ b/src/crypto/common.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/hmac_sha256.cpp b/src/crypto/hmac_sha256.cpp index d4afe1439f..0ba99ae274 100644 --- a/src/crypto/hmac_sha256.cpp +++ b/src/crypto/hmac_sha256.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/hmac_sha256.h b/src/crypto/hmac_sha256.h index 58491ff471..d31fda1dd1 100644 --- a/src/crypto/hmac_sha256.h +++ b/src/crypto/hmac_sha256.h @@ -1,9 +1,9 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_CRYPTO_AES_H -#define BITCOIN_CRYPTO_AES_H +#ifndef BITCOIN_CRYPTO_HMAC_SHA256_H +#define BITCOIN_CRYPTO_HMAC_SHA256_H #include @@ -29,4 +29,4 @@ class CHMAC_SHA256 void Finalize(unsigned char hash[OUTPUT_SIZE]); }; -#endif // BITCOIN_CRYPTO_AES_H +#endif // BITCOIN_CRYPTO_HMAC_SHA256_H diff --git a/src/crypto/hmac_sha512.cpp b/src/crypto/hmac_sha512.cpp index d9c4d04100..d70aee843b 100644 --- a/src/crypto/hmac_sha512.cpp +++ b/src/crypto/hmac_sha512.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/hmac_sha512.h b/src/crypto/hmac_sha512.h index ab84ee7652..1ea9a3671e 100644 --- a/src/crypto/hmac_sha512.h +++ b/src/crypto/hmac_sha512.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/poly1305.cpp b/src/crypto/poly1305.cpp new file mode 100644 index 0000000000..8a86c9601c --- /dev/null +++ b/src/crypto/poly1305.cpp @@ -0,0 +1,141 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +// Based on the public domain implementation by Andrew Moon +// poly1305-donna-unrolled.c from https://github.com/floodyberry/poly1305-donna + +#include +#include + +#include + +#define mul32x32_64(a,b) ((uint64_t)(a) * (b)) + +void poly1305_auth(unsigned char out[POLY1305_TAGLEN], const unsigned char *m, size_t inlen, const unsigned char key[POLY1305_KEYLEN]) { + uint32_t t0,t1,t2,t3; + uint32_t h0,h1,h2,h3,h4; + uint32_t r0,r1,r2,r3,r4; + uint32_t s1,s2,s3,s4; + uint32_t b, nb; + size_t j; + uint64_t t[5]; + uint64_t f0,f1,f2,f3; + uint64_t g0,g1,g2,g3,g4; + uint64_t c; + unsigned char mp[16]; + + /* clamp key */ + t0 = ReadLE32(key+0); + t1 = ReadLE32(key+4); + t2 = ReadLE32(key+8); + t3 = ReadLE32(key+12); + + /* precompute multipliers */ + r0 = t0 & 0x3ffffff; t0 >>= 26; t0 |= t1 << 6; + r1 = t0 & 0x3ffff03; t1 >>= 20; t1 |= t2 << 12; + r2 = t1 & 0x3ffc0ff; t2 >>= 14; t2 |= t3 << 18; + r3 = t2 & 0x3f03fff; t3 >>= 8; + r4 = t3 & 0x00fffff; + + s1 = r1 * 5; + s2 = r2 * 5; + s3 = r3 * 5; + s4 = r4 * 5; + + /* init state */ + h0 = 0; + h1 = 0; + h2 = 0; + h3 = 0; + h4 = 0; + + /* full blocks */ + if (inlen < 16) goto poly1305_donna_atmost15bytes; +poly1305_donna_16bytes: + m += 16; + inlen -= 16; + + t0 = ReadLE32(m-16); + t1 = ReadLE32(m-12); + t2 = ReadLE32(m-8); + t3 = ReadLE32(m-4); + + h0 += t0 & 0x3ffffff; + h1 += ((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff; + h2 += ((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff; + h3 += ((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff; + h4 += (t3 >> 8) | (1 << 24); + + +poly1305_donna_mul: + t[0] = mul32x32_64(h0,r0) + mul32x32_64(h1,s4) + mul32x32_64(h2,s3) + mul32x32_64(h3,s2) + mul32x32_64(h4,s1); + t[1] = mul32x32_64(h0,r1) + mul32x32_64(h1,r0) + mul32x32_64(h2,s4) + mul32x32_64(h3,s3) + mul32x32_64(h4,s2); + t[2] = mul32x32_64(h0,r2) + mul32x32_64(h1,r1) + mul32x32_64(h2,r0) + mul32x32_64(h3,s4) + mul32x32_64(h4,s3); + t[3] = mul32x32_64(h0,r3) + mul32x32_64(h1,r2) + mul32x32_64(h2,r1) + mul32x32_64(h3,r0) + mul32x32_64(h4,s4); + t[4] = mul32x32_64(h0,r4) + mul32x32_64(h1,r3) + mul32x32_64(h2,r2) + mul32x32_64(h3,r1) + mul32x32_64(h4,r0); + + h0 = (uint32_t)t[0] & 0x3ffffff; c = (t[0] >> 26); + t[1] += c; h1 = (uint32_t)t[1] & 0x3ffffff; b = (uint32_t)(t[1] >> 26); + t[2] += b; h2 = (uint32_t)t[2] & 0x3ffffff; b = (uint32_t)(t[2] >> 26); + t[3] += b; h3 = (uint32_t)t[3] & 0x3ffffff; b = (uint32_t)(t[3] >> 26); + t[4] += b; h4 = (uint32_t)t[4] & 0x3ffffff; b = (uint32_t)(t[4] >> 26); + h0 += b * 5; + + if (inlen >= 16) goto poly1305_donna_16bytes; + + /* final bytes */ +poly1305_donna_atmost15bytes: + if (!inlen) goto poly1305_donna_finish; + + for (j = 0; j < inlen; j++) mp[j] = m[j]; + mp[j++] = 1; + for (; j < 16; j++) mp[j] = 0; + inlen = 0; + + t0 = ReadLE32(mp+0); + t1 = ReadLE32(mp+4); + t2 = ReadLE32(mp+8); + t3 = ReadLE32(mp+12); + + h0 += t0 & 0x3ffffff; + h1 += ((((uint64_t)t1 << 32) | t0) >> 26) & 0x3ffffff; + h2 += ((((uint64_t)t2 << 32) | t1) >> 20) & 0x3ffffff; + h3 += ((((uint64_t)t3 << 32) | t2) >> 14) & 0x3ffffff; + h4 += (t3 >> 8); + + goto poly1305_donna_mul; + +poly1305_donna_finish: + b = h0 >> 26; h0 = h0 & 0x3ffffff; + h1 += b; b = h1 >> 26; h1 = h1 & 0x3ffffff; + h2 += b; b = h2 >> 26; h2 = h2 & 0x3ffffff; + h3 += b; b = h3 >> 26; h3 = h3 & 0x3ffffff; + h4 += b; b = h4 >> 26; h4 = h4 & 0x3ffffff; + h0 += b * 5; b = h0 >> 26; h0 = h0 & 0x3ffffff; + h1 += b; + + g0 = h0 + 5; b = g0 >> 26; g0 &= 0x3ffffff; + g1 = h1 + b; b = g1 >> 26; g1 &= 0x3ffffff; + g2 = h2 + b; b = g2 >> 26; g2 &= 0x3ffffff; + g3 = h3 + b; b = g3 >> 26; g3 &= 0x3ffffff; + g4 = h4 + b - (1 << 26); + + b = (g4 >> 31) - 1; + nb = ~b; + h0 = (h0 & nb) | (g0 & b); + h1 = (h1 & nb) | (g1 & b); + h2 = (h2 & nb) | (g2 & b); + h3 = (h3 & nb) | (g3 & b); + h4 = (h4 & nb) | (g4 & b); + + f0 = ((h0 ) | (h1 << 26)) + (uint64_t)ReadLE32(&key[16]); + f1 = ((h1 >> 6) | (h2 << 20)) + (uint64_t)ReadLE32(&key[20]); + f2 = ((h2 >> 12) | (h3 << 14)) + (uint64_t)ReadLE32(&key[24]); + f3 = ((h3 >> 18) | (h4 << 8)) + (uint64_t)ReadLE32(&key[28]); + + WriteLE32(&out[ 0], f0); f1 += (f0 >> 32); + WriteLE32(&out[ 4], f1); f2 += (f1 >> 32); + WriteLE32(&out[ 8], f2); f3 += (f2 >> 32); + WriteLE32(&out[12], f3); +} diff --git a/src/crypto/poly1305.h b/src/crypto/poly1305.h new file mode 100644 index 0000000000..1598b013b9 --- /dev/null +++ b/src/crypto/poly1305.h @@ -0,0 +1,17 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_CRYPTO_POLY1305_H +#define BITCOIN_CRYPTO_POLY1305_H + +#include +#include + +#define POLY1305_KEYLEN 32 +#define POLY1305_TAGLEN 16 + +void poly1305_auth(unsigned char out[POLY1305_TAGLEN], const unsigned char *m, size_t inlen, + const unsigned char key[POLY1305_KEYLEN]); + +#endif // BITCOIN_CRYPTO_POLY1305_H diff --git a/src/crypto/ripemd160.cpp b/src/crypto/ripemd160.cpp index 51468ec8d0..a00331dcb7 100644 --- a/src/crypto/ripemd160.cpp +++ b/src/crypto/ripemd160.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/ripemd160.h b/src/crypto/ripemd160.h index 1beb96f53b..38ea375c1f 100644 --- a/src/crypto/ripemd160.h +++ b/src/crypto/ripemd160.h @@ -2,8 +2,8 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef GRIDCOIN_CRYPTO_RIPEMD160_H -#define GRIDCOIN_CRYPTO_RIPEMD160_H +#ifndef BITCOIN_CRYPTO_RIPEMD160_H +#define BITCOIN_CRYPTO_RIPEMD160_H #include #include @@ -25,4 +25,4 @@ class CRIPEMD160 CRIPEMD160& Reset(); }; -#endif // GRIDCOIN_CRYPTO_RIPEMD160_H +#endif // BITCOIN_CRYPTO_RIPEMD160_H diff --git a/src/crypto/sha1.cpp b/src/crypto/sha1.cpp index dc96ac507a..5c601c54a6 100644 --- a/src/crypto/sha1.cpp +++ b/src/crypto/sha1.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/sha256.cpp b/src/crypto/sha256.cpp index c7d183a9da..cab37e0322 100644 --- a/src/crypto/sha256.cpp +++ b/src/crypto/sha256.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -29,6 +29,16 @@ namespace sha256d64_avx2 void Transform_8way(unsigned char* out, const unsigned char* in); } +namespace sha256d64_shani +{ +void Transform_2way(unsigned char* out, const unsigned char* in); +} + +namespace sha256_shani +{ +void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks); +} + // Internal implementation code. namespace { @@ -448,6 +458,7 @@ void TransformD64Wrapper(unsigned char* out, const unsigned char* in) TransformType Transform = sha256::Transform; TransformD64Type TransformD64 = sha256::TransformD64; +TransformD64Type TransformD64_2way = nullptr; TransformD64Type TransformD64_4way = nullptr; TransformD64Type TransformD64_8way = nullptr; @@ -512,6 +523,13 @@ bool SelfTest() { TransformD64(out, data + 1); if (!std::equal(out, out + 32, result_d64)) return false; + // Test TransformD64_2way, if available. + if (TransformD64_2way) { + unsigned char out[64]; + TransformD64_2way(out, data + 1); + if (!std::equal(out, out + 64, result_d64)) return false; + } + // Test TransformD64_4way, if available. if (TransformD64_4way) { unsigned char out[128]; @@ -534,13 +552,13 @@ bool SelfTest() { // We can't use cpuid.h's __get_cpuid as it does not support subleafs. void inline cpuid(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uint32_t& c, uint32_t& d) { -// The below conditional define is needed to prevent compilation failure for some i686 builds on some GCC versions. #ifdef __GNUC__ __cpuid_count(leaf, subleaf, a, b, c, d); #else - __asm__ ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "0"(leaf), "2"(subleaf)); + __asm__ ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "0"(leaf), "2"(subleaf)); #endif } + /** Check whether the OS has enabled AVX registers. */ bool AVXEnabled() { @@ -556,32 +574,64 @@ std::string SHA256AutoDetect() { std::string ret = "standard"; #if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__)) - (void)AVXEnabled; // Silence unused warning (in case ENABLE_AVX2 is not defined) + bool have_sse4 = false; + bool have_xsave = false; + bool have_avx = false; + bool have_avx2 = false; + bool have_shani = false; + bool enabled_avx = false; + + (void)AVXEnabled; + (void)have_sse4; + (void)have_avx; + (void)have_xsave; + (void)have_avx2; + (void)have_shani; + (void)enabled_avx; + uint32_t eax, ebx, ecx, edx; cpuid(1, 0, eax, ebx, ecx, edx); - if ((ecx >> 19) & 1) { + have_sse4 = (ecx >> 19) & 1; + have_xsave = (ecx >> 27) & 1; + have_avx = (ecx >> 28) & 1; + if (have_xsave && have_avx) { + enabled_avx = AVXEnabled(); + } + if (have_sse4) { + cpuid(7, 0, eax, ebx, ecx, edx); + have_avx2 = (ebx >> 5) & 1; + have_shani = (ebx >> 29) & 1; + } + +#if defined(ENABLE_SHANI) && !defined(BUILD_BITCOIN_INTERNAL) + if (have_shani) { + Transform = sha256_shani::Transform; + TransformD64 = TransformD64Wrapper; + TransformD64_2way = sha256d64_shani::Transform_2way; + ret = "shani(1way,2way)"; + have_sse4 = false; // Disable SSE4/AVX2; + have_avx2 = false; + } +#endif + + if (have_sse4) { #if defined(__x86_64__) || defined(__amd64__) Transform = sha256_sse4::Transform; TransformD64 = TransformD64Wrapper; + ret = "sse4(1way)"; #endif #if defined(ENABLE_SSE41) && !defined(BUILD_BITCOIN_INTERNAL) TransformD64_4way = sha256d64_sse41::Transform_4way; - ret = "sse4(1way+4way)"; -#if defined(ENABLE_AVX2) && !defined(BUILD_BITCOIN_INTERNAL) - if (((ecx >> 27) & 1) && ((ecx >> 28) & 1)) { // XSAVE and AVX - cpuid(7, 0, eax, ebx, ecx, edx); - if ((ebx >> 5) & 1) { // AVX2 flag - if (AVXEnabled()) { // OS has enabled AVX registers - TransformD64_8way = sha256d64_avx2::Transform_8way; - ret += ",avx2(8way)"; - } - } - } -#endif -#else - ret = "sse4"; + ret += ",sse41(4way)"; #endif } + +#if defined(ENABLE_AVX2) && !defined(BUILD_BITCOIN_INTERNAL) + if (have_avx2 && have_avx && enabled_avx) { + TransformD64_8way = sha256d64_avx2::Transform_8way; + ret += ",avx2(8way)"; + } +#endif #endif assert(SelfTest()); @@ -663,6 +713,14 @@ void SHA256D64(unsigned char* out, const unsigned char* in, size_t blocks) blocks -= 4; } } + if (TransformD64_2way) { + while (blocks >= 2) { + TransformD64_2way(out, in); + out += 64; + in += 128; + blocks -= 2; + } + } while (blocks) { TransformD64(out, in); out += 32; diff --git a/src/crypto/sha256.h b/src/crypto/sha256.h index 31b2b3b3df..028ee14345 100644 --- a/src/crypto/sha256.h +++ b/src/crypto/sha256.h @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/sha256_avx2.cpp b/src/crypto/sha256_avx2.cpp index b338b06927..068e0e5ff6 100644 --- a/src/crypto/sha256_avx2.cpp +++ b/src/crypto/sha256_avx2.cpp @@ -1,11 +1,7 @@ #ifdef ENABLE_AVX2 #include -#if defined(_MSC_VER) #include -#elif defined(__GNUC__) -#include -#endif #include #include diff --git a/src/crypto/sha256_shani.cpp b/src/crypto/sha256_shani.cpp new file mode 100644 index 0000000000..e561da42c5 --- /dev/null +++ b/src/crypto/sha256_shani.cpp @@ -0,0 +1,359 @@ +// Copyright (c) 2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// +// Based on https://github.com/noloader/SHA-Intrinsics/blob/master/sha256-x86.c, +// Written and placed in public domain by Jeffrey Walton. +// Based on code from Intel, and by Sean Gulley for the miTLS project. + +#ifdef ENABLE_SHANI + +#include +#include + +#include + + +namespace { + +const __m128i MASK = _mm_set_epi64x(0x0c0d0e0f08090a0bULL, 0x0405060700010203ULL); +const __m128i INIT0 = _mm_set_epi64x(0x6a09e667bb67ae85ull, 0x510e527f9b05688cull); +const __m128i INIT1 = _mm_set_epi64x(0x3c6ef372a54ff53aull, 0x1f83d9ab5be0cd19ull); + +void inline __attribute__((always_inline)) QuadRound(__m128i& state0, __m128i& state1, uint64_t k1, uint64_t k0) +{ + const __m128i msg = _mm_set_epi64x(k1, k0); + state1 = _mm_sha256rnds2_epu32(state1, state0, msg); + state0 = _mm_sha256rnds2_epu32(state0, state1, _mm_shuffle_epi32(msg, 0x0e)); +} + +void inline __attribute__((always_inline)) QuadRound(__m128i& state0, __m128i& state1, __m128i m, uint64_t k1, uint64_t k0) +{ + const __m128i msg = _mm_add_epi32(m, _mm_set_epi64x(k1, k0)); + state1 = _mm_sha256rnds2_epu32(state1, state0, msg); + state0 = _mm_sha256rnds2_epu32(state0, state1, _mm_shuffle_epi32(msg, 0x0e)); +} + +void inline __attribute__((always_inline)) ShiftMessageA(__m128i& m0, __m128i m1) +{ + m0 = _mm_sha256msg1_epu32(m0, m1); +} + +void inline __attribute__((always_inline)) ShiftMessageC(__m128i& m0, __m128i m1, __m128i& m2) +{ + m2 = _mm_sha256msg2_epu32(_mm_add_epi32(m2, _mm_alignr_epi8(m1, m0, 4)), m1); +} + +void inline __attribute__((always_inline)) ShiftMessageB(__m128i& m0, __m128i m1, __m128i& m2) +{ + ShiftMessageC(m0, m1, m2); + ShiftMessageA(m0, m1); +} + +void inline __attribute__((always_inline)) Shuffle(__m128i& s0, __m128i& s1) +{ + const __m128i t1 = _mm_shuffle_epi32(s0, 0xB1); + const __m128i t2 = _mm_shuffle_epi32(s1, 0x1B); + s0 = _mm_alignr_epi8(t1, t2, 0x08); + s1 = _mm_blend_epi16(t2, t1, 0xF0); +} + +void inline __attribute__((always_inline)) Unshuffle(__m128i& s0, __m128i& s1) +{ + const __m128i t1 = _mm_shuffle_epi32(s0, 0x1B); + const __m128i t2 = _mm_shuffle_epi32(s1, 0xB1); + s0 = _mm_blend_epi16(t1, t2, 0xF0); + s1 = _mm_alignr_epi8(t2, t1, 0x08); +} + +__m128i inline __attribute__((always_inline)) Load(const unsigned char* in) +{ + return _mm_shuffle_epi8(_mm_loadu_si128((const __m128i*)in), MASK); +} + +void inline __attribute__((always_inline)) Save(unsigned char* out, __m128i s) +{ + _mm_storeu_si128((__m128i*)out, _mm_shuffle_epi8(s, MASK)); +} +} + +namespace sha256_shani { +void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks) +{ + __m128i m0, m1, m2, m3, s0, s1, so0, so1; + + /* Load state */ + s0 = _mm_loadu_si128((const __m128i*)s); + s1 = _mm_loadu_si128((const __m128i*)(s + 4)); + Shuffle(s0, s1); + + while (blocks--) { + /* Remember old state */ + so0 = s0; + so1 = s1; + + /* Load data and transform */ + m0 = Load(chunk); + QuadRound(s0, s1, m0, 0xe9b5dba5b5c0fbcfull, 0x71374491428a2f98ull); + m1 = Load(chunk + 16); + QuadRound(s0, s1, m1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + ShiftMessageA(m0, m1); + m2 = Load(chunk + 32); + QuadRound(s0, s1, m2, 0x550c7dc3243185beull, 0x12835b01d807aa98ull); + ShiftMessageA(m1, m2); + m3 = Load(chunk + 48); + QuadRound(s0, s1, m3, 0xc19bf1749bdc06a7ull, 0x80deb1fe72be5d74ull); + ShiftMessageB(m2, m3, m0); + QuadRound(s0, s1, m0, 0x240ca1cc0fc19dc6ull, 0xefbe4786E49b69c1ull); + ShiftMessageB(m3, m0, m1); + QuadRound(s0, s1, m1, 0x76f988da5cb0a9dcull, 0x4a7484aa2de92c6full); + ShiftMessageB(m0, m1, m2); + QuadRound(s0, s1, m2, 0xbf597fc7b00327c8ull, 0xa831c66d983e5152ull); + ShiftMessageB(m1, m2, m3); + QuadRound(s0, s1, m3, 0x1429296706ca6351ull, 0xd5a79147c6e00bf3ull); + ShiftMessageB(m2, m3, m0); + QuadRound(s0, s1, m0, 0x53380d134d2c6dfcull, 0x2e1b213827b70a85ull); + ShiftMessageB(m3, m0, m1); + QuadRound(s0, s1, m1, 0x92722c8581c2c92eull, 0x766a0abb650a7354ull); + ShiftMessageB(m0, m1, m2); + QuadRound(s0, s1, m2, 0xc76c51A3c24b8b70ull, 0xa81a664ba2bfe8a1ull); + ShiftMessageB(m1, m2, m3); + QuadRound(s0, s1, m3, 0x106aa070f40e3585ull, 0xd6990624d192e819ull); + ShiftMessageB(m2, m3, m0); + QuadRound(s0, s1, m0, 0x34b0bcb52748774cull, 0x1e376c0819a4c116ull); + ShiftMessageB(m3, m0, m1); + QuadRound(s0, s1, m1, 0x682e6ff35b9cca4full, 0x4ed8aa4a391c0cb3ull); + ShiftMessageC(m0, m1, m2); + QuadRound(s0, s1, m2, 0x8cc7020884c87814ull, 0x78a5636f748f82eeull); + ShiftMessageC(m1, m2, m3); + QuadRound(s0, s1, m3, 0xc67178f2bef9A3f7ull, 0xa4506ceb90befffaull); + + /* Combine with old state */ + s0 = _mm_add_epi32(s0, so0); + s1 = _mm_add_epi32(s1, so1); + + /* Advance */ + chunk += 64; + } + + Unshuffle(s0, s1); + _mm_storeu_si128((__m128i*)s, s0); + _mm_storeu_si128((__m128i*)(s + 4), s1); +} +} + +namespace sha256d64_shani { + +void Transform_2way(unsigned char* out, const unsigned char* in) +{ + __m128i am0, am1, am2, am3, as0, as1, aso0, aso1; + __m128i bm0, bm1, bm2, bm3, bs0, bs1, bso0, bso1; + + /* Transform 1 */ + bs0 = as0 = INIT0; + bs1 = as1 = INIT1; + am0 = Load(in); + bm0 = Load(in + 64); + QuadRound(as0, as1, am0, 0xe9b5dba5b5c0fbcfull, 0x71374491428a2f98ull); + QuadRound(bs0, bs1, bm0, 0xe9b5dba5b5c0fbcfull, 0x71374491428a2f98ull); + am1 = Load(in + 16); + bm1 = Load(in + 80); + QuadRound(as0, as1, am1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + QuadRound(bs0, bs1, bm1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + ShiftMessageA(am0, am1); + ShiftMessageA(bm0, bm1); + am2 = Load(in + 32); + bm2 = Load(in + 96); + QuadRound(as0, as1, am2, 0x550c7dc3243185beull, 0x12835b01d807aa98ull); + QuadRound(bs0, bs1, bm2, 0x550c7dc3243185beull, 0x12835b01d807aa98ull); + ShiftMessageA(am1, am2); + ShiftMessageA(bm1, bm2); + am3 = Load(in + 48); + bm3 = Load(in + 112); + QuadRound(as0, as1, am3, 0xc19bf1749bdc06a7ull, 0x80deb1fe72be5d74ull); + QuadRound(bs0, bs1, bm3, 0xc19bf1749bdc06a7ull, 0x80deb1fe72be5d74ull); + ShiftMessageB(am2, am3, am0); + ShiftMessageB(bm2, bm3, bm0); + QuadRound(as0, as1, am0, 0x240ca1cc0fc19dc6ull, 0xefbe4786E49b69c1ull); + QuadRound(bs0, bs1, bm0, 0x240ca1cc0fc19dc6ull, 0xefbe4786E49b69c1ull); + ShiftMessageB(am3, am0, am1); + ShiftMessageB(bm3, bm0, bm1); + QuadRound(as0, as1, am1, 0x76f988da5cb0a9dcull, 0x4a7484aa2de92c6full); + QuadRound(bs0, bs1, bm1, 0x76f988da5cb0a9dcull, 0x4a7484aa2de92c6full); + ShiftMessageB(am0, am1, am2); + ShiftMessageB(bm0, bm1, bm2); + QuadRound(as0, as1, am2, 0xbf597fc7b00327c8ull, 0xa831c66d983e5152ull); + QuadRound(bs0, bs1, bm2, 0xbf597fc7b00327c8ull, 0xa831c66d983e5152ull); + ShiftMessageB(am1, am2, am3); + ShiftMessageB(bm1, bm2, bm3); + QuadRound(as0, as1, am3, 0x1429296706ca6351ull, 0xd5a79147c6e00bf3ull); + QuadRound(bs0, bs1, bm3, 0x1429296706ca6351ull, 0xd5a79147c6e00bf3ull); + ShiftMessageB(am2, am3, am0); + ShiftMessageB(bm2, bm3, bm0); + QuadRound(as0, as1, am0, 0x53380d134d2c6dfcull, 0x2e1b213827b70a85ull); + QuadRound(bs0, bs1, bm0, 0x53380d134d2c6dfcull, 0x2e1b213827b70a85ull); + ShiftMessageB(am3, am0, am1); + ShiftMessageB(bm3, bm0, bm1); + QuadRound(as0, as1, am1, 0x92722c8581c2c92eull, 0x766a0abb650a7354ull); + QuadRound(bs0, bs1, bm1, 0x92722c8581c2c92eull, 0x766a0abb650a7354ull); + ShiftMessageB(am0, am1, am2); + ShiftMessageB(bm0, bm1, bm2); + QuadRound(as0, as1, am2, 0xc76c51A3c24b8b70ull, 0xa81a664ba2bfe8a1ull); + QuadRound(bs0, bs1, bm2, 0xc76c51A3c24b8b70ull, 0xa81a664ba2bfe8a1ull); + ShiftMessageB(am1, am2, am3); + ShiftMessageB(bm1, bm2, bm3); + QuadRound(as0, as1, am3, 0x106aa070f40e3585ull, 0xd6990624d192e819ull); + QuadRound(bs0, bs1, bm3, 0x106aa070f40e3585ull, 0xd6990624d192e819ull); + ShiftMessageB(am2, am3, am0); + ShiftMessageB(bm2, bm3, bm0); + QuadRound(as0, as1, am0, 0x34b0bcb52748774cull, 0x1e376c0819a4c116ull); + QuadRound(bs0, bs1, bm0, 0x34b0bcb52748774cull, 0x1e376c0819a4c116ull); + ShiftMessageB(am3, am0, am1); + ShiftMessageB(bm3, bm0, bm1); + QuadRound(as0, as1, am1, 0x682e6ff35b9cca4full, 0x4ed8aa4a391c0cb3ull); + QuadRound(bs0, bs1, bm1, 0x682e6ff35b9cca4full, 0x4ed8aa4a391c0cb3ull); + ShiftMessageC(am0, am1, am2); + ShiftMessageC(bm0, bm1, bm2); + QuadRound(as0, as1, am2, 0x8cc7020884c87814ull, 0x78a5636f748f82eeull); + QuadRound(bs0, bs1, bm2, 0x8cc7020884c87814ull, 0x78a5636f748f82eeull); + ShiftMessageC(am1, am2, am3); + ShiftMessageC(bm1, bm2, bm3); + QuadRound(as0, as1, am3, 0xc67178f2bef9A3f7ull, 0xa4506ceb90befffaull); + QuadRound(bs0, bs1, bm3, 0xc67178f2bef9A3f7ull, 0xa4506ceb90befffaull); + as0 = _mm_add_epi32(as0, INIT0); + bs0 = _mm_add_epi32(bs0, INIT0); + as1 = _mm_add_epi32(as1, INIT1); + bs1 = _mm_add_epi32(bs1, INIT1); + + /* Transform 2 */ + aso0 = as0; + bso0 = bs0; + aso1 = as1; + bso1 = bs1; + QuadRound(as0, as1, 0xe9b5dba5b5c0fbcfull, 0x71374491c28a2f98ull); + QuadRound(bs0, bs1, 0xe9b5dba5b5c0fbcfull, 0x71374491c28a2f98ull); + QuadRound(as0, as1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + QuadRound(bs0, bs1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + QuadRound(as0, as1, 0x550c7dc3243185beull, 0x12835b01d807aa98ull); + QuadRound(bs0, bs1, 0x550c7dc3243185beull, 0x12835b01d807aa98ull); + QuadRound(as0, as1, 0xc19bf3749bdc06a7ull, 0x80deb1fe72be5d74ull); + QuadRound(bs0, bs1, 0xc19bf3749bdc06a7ull, 0x80deb1fe72be5d74ull); + QuadRound(as0, as1, 0x240cf2540fe1edc6ull, 0xf0fe4786649b69c1ull); + QuadRound(bs0, bs1, 0x240cf2540fe1edc6ull, 0xf0fe4786649b69c1ull); + QuadRound(as0, as1, 0x16f988fa61b9411eull, 0x6cc984be4fe9346full); + QuadRound(bs0, bs1, 0x16f988fa61b9411eull, 0x6cc984be4fe9346full); + QuadRound(as0, as1, 0xb9d99ec7b019fc65ull, 0xa88e5a6df2c65152ull); + QuadRound(bs0, bs1, 0xb9d99ec7b019fc65ull, 0xa88e5a6df2c65152ull); + QuadRound(as0, as1, 0xc7353eb0fdb1232bull, 0xe70eeaa09a1231c3ull); + QuadRound(bs0, bs1, 0xc7353eb0fdb1232bull, 0xe70eeaa09a1231c3ull); + QuadRound(as0, as1, 0xdc1eeefd5a0f118full, 0xcb976d5f3069bad5ull); + QuadRound(bs0, bs1, 0xdc1eeefd5a0f118full, 0xcb976d5f3069bad5ull); + QuadRound(as0, as1, 0xe15d5b1658f4ca9dull, 0xde0b7a040a35b689ull); + QuadRound(bs0, bs1, 0xe15d5b1658f4ca9dull, 0xde0b7a040a35b689ull); + QuadRound(as0, as1, 0x6fab9537a507ea32ull, 0x37088980007f3e86ull); + QuadRound(bs0, bs1, 0x6fab9537a507ea32ull, 0x37088980007f3e86ull); + QuadRound(as0, as1, 0xc0bbbe37cdaa3b6dull, 0x0d8cd6f117406110ull); + QuadRound(bs0, bs1, 0xc0bbbe37cdaa3b6dull, 0x0d8cd6f117406110ull); + QuadRound(as0, as1, 0x6fd15ca70b02e931ull, 0xdb48a36383613bdaull); + QuadRound(bs0, bs1, 0x6fd15ca70b02e931ull, 0xdb48a36383613bdaull); + QuadRound(as0, as1, 0x6d4378906ed41a95ull, 0x31338431521afacaull); + QuadRound(bs0, bs1, 0x6d4378906ed41a95ull, 0x31338431521afacaull); + QuadRound(as0, as1, 0x532fb63cb5c9a0e6ull, 0x9eccabbdc39c91f2ull); + QuadRound(bs0, bs1, 0x532fb63cb5c9a0e6ull, 0x9eccabbdc39c91f2ull); + QuadRound(as0, as1, 0x4c191d76a4954b68ull, 0x07237ea3d2c741c6ull); + QuadRound(bs0, bs1, 0x4c191d76a4954b68ull, 0x07237ea3d2c741c6ull); + as0 = _mm_add_epi32(as0, aso0); + bs0 = _mm_add_epi32(bs0, bso0); + as1 = _mm_add_epi32(as1, aso1); + bs1 = _mm_add_epi32(bs1, bso1); + + /* Extract hash */ + Unshuffle(as0, as1); + Unshuffle(bs0, bs1); + am0 = as0; + bm0 = bs0; + am1 = as1; + bm1 = bs1; + + /* Transform 3 */ + bs0 = as0 = INIT0; + bs1 = as1 = INIT1; + QuadRound(as0, as1, am0, 0xe9b5dba5B5c0fbcfull, 0x71374491428a2f98ull); + QuadRound(bs0, bs1, bm0, 0xe9b5dba5B5c0fbcfull, 0x71374491428a2f98ull); + QuadRound(as0, as1, am1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + QuadRound(bs0, bs1, bm1, 0xab1c5ed5923f82a4ull, 0x59f111f13956c25bull); + ShiftMessageA(am0, am1); + ShiftMessageA(bm0, bm1); + bm2 = am2 = _mm_set_epi64x(0x0ull, 0x80000000ull); + QuadRound(as0, as1, 0x550c7dc3243185beull, 0x12835b015807aa98ull); + QuadRound(bs0, bs1, 0x550c7dc3243185beull, 0x12835b015807aa98ull); + ShiftMessageA(am1, am2); + ShiftMessageA(bm1, bm2); + bm3 = am3 = _mm_set_epi64x(0x10000000000ull, 0x0ull); + QuadRound(as0, as1, 0xc19bf2749bdc06a7ull, 0x80deb1fe72be5d74ull); + QuadRound(bs0, bs1, 0xc19bf2749bdc06a7ull, 0x80deb1fe72be5d74ull); + ShiftMessageB(am2, am3, am0); + ShiftMessageB(bm2, bm3, bm0); + QuadRound(as0, as1, am0, 0x240ca1cc0fc19dc6ull, 0xefbe4786e49b69c1ull); + QuadRound(bs0, bs1, bm0, 0x240ca1cc0fc19dc6ull, 0xefbe4786e49b69c1ull); + ShiftMessageB(am3, am0, am1); + ShiftMessageB(bm3, bm0, bm1); + QuadRound(as0, as1, am1, 0x76f988da5cb0a9dcull, 0x4a7484aa2de92c6full); + QuadRound(bs0, bs1, bm1, 0x76f988da5cb0a9dcull, 0x4a7484aa2de92c6full); + ShiftMessageB(am0, am1, am2); + ShiftMessageB(bm0, bm1, bm2); + QuadRound(as0, as1, am2, 0xbf597fc7b00327c8ull, 0xa831c66d983e5152ull); + QuadRound(bs0, bs1, bm2, 0xbf597fc7b00327c8ull, 0xa831c66d983e5152ull); + ShiftMessageB(am1, am2, am3); + ShiftMessageB(bm1, bm2, bm3); + QuadRound(as0, as1, am3, 0x1429296706ca6351ull, 0xd5a79147c6e00bf3ull); + QuadRound(bs0, bs1, bm3, 0x1429296706ca6351ull, 0xd5a79147c6e00bf3ull); + ShiftMessageB(am2, am3, am0); + ShiftMessageB(bm2, bm3, bm0); + QuadRound(as0, as1, am0, 0x53380d134d2c6dfcull, 0x2e1b213827b70a85ull); + QuadRound(bs0, bs1, bm0, 0x53380d134d2c6dfcull, 0x2e1b213827b70a85ull); + ShiftMessageB(am3, am0, am1); + ShiftMessageB(bm3, bm0, bm1); + QuadRound(as0, as1, am1, 0x92722c8581c2c92eull, 0x766a0abb650a7354ull); + QuadRound(bs0, bs1, bm1, 0x92722c8581c2c92eull, 0x766a0abb650a7354ull); + ShiftMessageB(am0, am1, am2); + ShiftMessageB(bm0, bm1, bm2); + QuadRound(as0, as1, am2, 0xc76c51a3c24b8b70ull, 0xa81a664ba2bfe8A1ull); + QuadRound(bs0, bs1, bm2, 0xc76c51a3c24b8b70ull, 0xa81a664ba2bfe8A1ull); + ShiftMessageB(am1, am2, am3); + ShiftMessageB(bm1, bm2, bm3); + QuadRound(as0, as1, am3, 0x106aa070f40e3585ull, 0xd6990624d192e819ull); + QuadRound(bs0, bs1, bm3, 0x106aa070f40e3585ull, 0xd6990624d192e819ull); + ShiftMessageB(am2, am3, am0); + ShiftMessageB(bm2, bm3, bm0); + QuadRound(as0, as1, am0, 0x34b0bcb52748774cull, 0x1e376c0819a4c116ull); + QuadRound(bs0, bs1, bm0, 0x34b0bcb52748774cull, 0x1e376c0819a4c116ull); + ShiftMessageB(am3, am0, am1); + ShiftMessageB(bm3, bm0, bm1); + QuadRound(as0, as1, am1, 0x682e6ff35b9cca4full, 0x4ed8aa4a391c0cb3ull); + QuadRound(bs0, bs1, bm1, 0x682e6ff35b9cca4full, 0x4ed8aa4a391c0cb3ull); + ShiftMessageC(am0, am1, am2); + ShiftMessageC(bm0, bm1, bm2); + QuadRound(as0, as1, am2, 0x8cc7020884c87814ull, 0x78a5636f748f82eeull); + QuadRound(bs0, bs1, bm2, 0x8cc7020884c87814ull, 0x78a5636f748f82eeull); + ShiftMessageC(am1, am2, am3); + ShiftMessageC(bm1, bm2, bm3); + QuadRound(as0, as1, am3, 0xc67178f2bef9a3f7ull, 0xa4506ceb90befffaull); + QuadRound(bs0, bs1, bm3, 0xc67178f2bef9a3f7ull, 0xa4506ceb90befffaull); + as0 = _mm_add_epi32(as0, INIT0); + bs0 = _mm_add_epi32(bs0, INIT0); + as1 = _mm_add_epi32(as1, INIT1); + bs1 = _mm_add_epi32(bs1, INIT1); + + /* Extract hash into out */ + Unshuffle(as0, as1); + Unshuffle(bs0, bs1); + Save(out, as0); + Save(out + 16, as1); + Save(out + 32, bs0); + Save(out + 48, bs1); +} + +} + +#endif diff --git a/src/crypto/sha256_sse4.cpp b/src/crypto/sha256_sse4.cpp index 78bb76bcce..89f529a3ab 100644 --- a/src/crypto/sha256_sse4.cpp +++ b/src/crypto/sha256_sse4.cpp @@ -953,7 +953,6 @@ void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks) : "m"(K256), "m"(FLIP_MASK), "m"(SHUF_00BA), "m"(SHUF_DC00) : "cc", "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12" ); - } } diff --git a/src/crypto/sha256_sse41.cpp b/src/crypto/sha256_sse41.cpp index be71dd8fb8..adca870e2d 100644 --- a/src/crypto/sha256_sse41.cpp +++ b/src/crypto/sha256_sse41.cpp @@ -1,11 +1,7 @@ #ifdef ENABLE_SSE41 #include -#if defined(_MSC_VER) #include -#elif defined(__GNUC__) -#include -#endif #include #include diff --git a/src/crypto/sha512.cpp b/src/crypto/sha512.cpp index dff4d8da1a..bc64135cae 100644 --- a/src/crypto/sha512.cpp +++ b/src/crypto/sha512.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The Bitcoin Core developers +// Copyright (c) 2014-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. diff --git a/src/crypto/sha512.h b/src/crypto/sha512.h index cd1023bc85..4118ac1b18 100644 --- a/src/crypto/sha512.h +++ b/src/crypto/sha512.h @@ -17,7 +17,7 @@ class CSHA512 uint64_t bytes; public: - static const size_t OUTPUT_SIZE = 64; + static constexpr size_t OUTPUT_SIZE = 64; CSHA512(); CSHA512& Write(const unsigned char* data, size_t len); diff --git a/src/crypto/siphash.cpp b/src/crypto/siphash.cpp new file mode 100644 index 0000000000..e81957111a --- /dev/null +++ b/src/crypto/siphash.cpp @@ -0,0 +1,173 @@ +// Copyright (c) 2016-2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +#define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) + +#define SIPROUND do { \ + v0 += v1; v1 = ROTL(v1, 13); v1 ^= v0; \ + v0 = ROTL(v0, 32); \ + v2 += v3; v3 = ROTL(v3, 16); v3 ^= v2; \ + v0 += v3; v3 = ROTL(v3, 21); v3 ^= v0; \ + v2 += v1; v1 = ROTL(v1, 17); v1 ^= v2; \ + v2 = ROTL(v2, 32); \ +} while (0) + +CSipHasher::CSipHasher(uint64_t k0, uint64_t k1) +{ + v[0] = 0x736f6d6570736575ULL ^ k0; + v[1] = 0x646f72616e646f6dULL ^ k1; + v[2] = 0x6c7967656e657261ULL ^ k0; + v[3] = 0x7465646279746573ULL ^ k1; + count = 0; + tmp = 0; +} + +CSipHasher& CSipHasher::Write(uint64_t data) +{ + uint64_t v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3]; + + assert(count % 8 == 0); + + v3 ^= data; + SIPROUND; + SIPROUND; + v0 ^= data; + + v[0] = v0; + v[1] = v1; + v[2] = v2; + v[3] = v3; + + count += 8; + return *this; +} + +CSipHasher& CSipHasher::Write(const unsigned char* data, size_t size) +{ + uint64_t v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3]; + uint64_t t = tmp; + int c = count; + + while (size--) { + t |= ((uint64_t)(*(data++))) << (8 * (c % 8)); + c++; + if ((c & 7) == 0) { + v3 ^= t; + SIPROUND; + SIPROUND; + v0 ^= t; + t = 0; + } + } + + v[0] = v0; + v[1] = v1; + v[2] = v2; + v[3] = v3; + count = c; + tmp = t; + + return *this; +} + +uint64_t CSipHasher::Finalize() const +{ + uint64_t v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3]; + + uint64_t t = tmp | (((uint64_t)count) << 56); + + v3 ^= t; + SIPROUND; + SIPROUND; + v0 ^= t; + v2 ^= 0xFF; + SIPROUND; + SIPROUND; + SIPROUND; + SIPROUND; + return v0 ^ v1 ^ v2 ^ v3; +} + +uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256& val) +{ + /* Specialized implementation for efficiency */ + uint64_t d = val.GetUint64(0); + + uint64_t v0 = 0x736f6d6570736575ULL ^ k0; + uint64_t v1 = 0x646f72616e646f6dULL ^ k1; + uint64_t v2 = 0x6c7967656e657261ULL ^ k0; + uint64_t v3 = 0x7465646279746573ULL ^ k1 ^ d; + + SIPROUND; + SIPROUND; + v0 ^= d; + d = val.GetUint64(1); + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + d = val.GetUint64(2); + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + d = val.GetUint64(3); + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + v3 ^= ((uint64_t)4) << 59; + SIPROUND; + SIPROUND; + v0 ^= ((uint64_t)4) << 59; + v2 ^= 0xFF; + SIPROUND; + SIPROUND; + SIPROUND; + SIPROUND; + return v0 ^ v1 ^ v2 ^ v3; +} + +uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256& val, uint32_t extra) +{ + /* Specialized implementation for efficiency */ + uint64_t d = val.GetUint64(0); + + uint64_t v0 = 0x736f6d6570736575ULL ^ k0; + uint64_t v1 = 0x646f72616e646f6dULL ^ k1; + uint64_t v2 = 0x6c7967656e657261ULL ^ k0; + uint64_t v3 = 0x7465646279746573ULL ^ k1 ^ d; + + SIPROUND; + SIPROUND; + v0 ^= d; + d = val.GetUint64(1); + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + d = val.GetUint64(2); + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + d = val.GetUint64(3); + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + d = (((uint64_t)36) << 56) | extra; + v3 ^= d; + SIPROUND; + SIPROUND; + v0 ^= d; + v2 ^= 0xFF; + SIPROUND; + SIPROUND; + SIPROUND; + SIPROUND; + return v0 ^ v1 ^ v2 ^ v3; +} diff --git a/src/crypto/siphash.h b/src/crypto/siphash.h new file mode 100644 index 0000000000..b312f913f9 --- /dev/null +++ b/src/crypto/siphash.h @@ -0,0 +1,47 @@ +// Copyright (c) 2016-2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_CRYPTO_SIPHASH_H +#define BITCOIN_CRYPTO_SIPHASH_H + +#include + +#include + +/** SipHash-2-4 */ +class CSipHasher +{ +private: + uint64_t v[4]; + uint64_t tmp; + int count; + +public: + /** Construct a SipHash calculator initialized with 128-bit key (k0, k1) */ + CSipHasher(uint64_t k0, uint64_t k1); + /** Hash a 64-bit integer worth of data + * It is treated as if this was the little-endian interpretation of 8 bytes. + * This function can only be used when a multiple of 8 bytes have been written so far. + */ + CSipHasher& Write(uint64_t data); + /** Hash arbitrary bytes. */ + CSipHasher& Write(const unsigned char* data, size_t size); + /** Compute the 64-bit SipHash-2-4 of the data written so far. The object remains untouched. */ + uint64_t Finalize() const; +}; + +/** Optimized SipHash-2-4 implementation for uint256. + * + * It is identical to: + * SipHasher(k0, k1) + * .Write(val.GetUint64(0)) + * .Write(val.GetUint64(1)) + * .Write(val.GetUint64(2)) + * .Write(val.GetUint64(3)) + * .Finalize() + */ +uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256& val); +uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256& val, uint32_t extra); + +#endif // BITCOIN_CRYPTO_SIPHASH_H From 95e070f90407744a4588fb0811a387aaa02de46e Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Fri, 10 May 2019 07:01:06 +0200 Subject: [PATCH 007/115] Update version. --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index a528748e50..1b033d13f1 100755 --- a/configure.ac +++ b/configure.ac @@ -3,8 +3,8 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 3) -define(_CLIENT_VERSION_BUILD, 0) -define(_CLIENT_VERSION_IS_RELEASE, true) +define(_CLIENT_VERSION_BUILD, 1) +define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Gridcoin]]) From ec025e0cdbec804269dbed9abd18cfb3aee7ca84 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 11 May 2019 17:52:14 -0400 Subject: [PATCH 008/115] Constrain walletpassphrase to 10000000 seconds This conforms the walletpassphrase rpc function to Bitcoin's implementation, and also solves the large timeout race condition bug. (issue #1457). --- src/rpcwallet.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index 51dd33119a..a3ebb482fb 100644 --- a/src/rpcwallet.cpp +++ b/src/rpcwallet.cpp @@ -1955,9 +1955,19 @@ UniValue walletpassphrase(const UniValue& params, bool fHelp) if (!pwalletMain->IsLocked()) throw JSONRPCError(RPC_WALLET_ALREADY_UNLOCKED, "Error: Wallet is already unlocked, use walletlock first if need to change unlock settings."); + // Adapted from Bitcoin (20190511)... + // Get the timeout int64_t nSleepTime = params[1].get_int64(); - if (nSleepTime <= 0 || nSleepTime >= std::numeric_limits::max() / 1000000000) - throw runtime_error("timeout is out of bounds"); + // Timeout cannot be negative or zero, otherwise it will relock immediately. + if (nSleepTime <= 0) { + throw JSONRPCError(RPC_INVALID_PARAMETER, "Timeout cannot be negative or zero."); + } + // Clamp timeout + constexpr int64_t MAX_SLEEP_TIME = 100000000; // larger values trigger a macos/libevent bug? + if (nSleepTime > MAX_SLEEP_TIME) { + nSleepTime = MAX_SLEEP_TIME; + LogPrintf("WARN: walletpassphrase: timeout is too large. Set to limit of 10000000 seconds."); + } // Note that the walletpassphrase is stored in params[0] which is not mlock()ed SecureString strWalletPass; From a516b5afa96e1e400311768b3587b8b137aafb47 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 11 May 2019 21:49:42 -0400 Subject: [PATCH 009/115] Quiet logging for getmininginfo --- src/miner.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 92ec11749f..7b77350c62 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1067,7 +1067,7 @@ bool GetSideStakingStatusAndAlloc(SideStakeAlloc& vSideStakeAlloc) double dSumAllocation = 0.0; bool fEnableSideStaking = GetBoolArg("-enablesidestaking"); - LogPrintf("StakeMiner: fEnableSideStaking = %u", fEnableSideStaking); + if (fDebug2) LogPrintf("StakeMiner: fEnableSideStaking = %u", fEnableSideStaking); // If side staking is enabled, parse destinations and allocations. We don't need to worry about any that are rejected // other than a warning message, because any unallocated rewards will go back into the coinstake output(s). @@ -1126,7 +1126,7 @@ bool GetSideStakingStatusAndAlloc(SideStakeAlloc& vSideStakeAlloc) } vSideStakeAlloc.push_back(std::pair(sAddress, dAllocation)); - LogPrintf("StakeMiner: SideStakeAlloc Address %s, Allocation %f", sAddress.c_str(), dAllocation); + if (fDebug2) LogPrintf("StakeMiner: SideStakeAlloc Address %s, Allocation %f", sAddress.c_str(), dAllocation); vSubParam.clear(); } @@ -1146,7 +1146,7 @@ bool GetStakeSplitStatusAndParams(int64_t& nMinStakeSplitValue, double& dEfficie { // Parse StakeSplit and SideStaking flags. bool fEnableStakeSplit = GetBoolArg("-enablestakesplit"); - LogPrintf("StakeMiner: fEnableStakeSplit = %u", fEnableStakeSplit); + if (fDebug2) LogPrintf("StakeMiner: fEnableStakeSplit = %u", fEnableStakeSplit); // If stake output splitting is enabled, determine efficiency and minimum stake split value. if (fEnableStakeSplit) @@ -1158,13 +1158,13 @@ bool GetStakeSplitStatusAndParams(int64_t& nMinStakeSplitValue, double& dEfficie else if (dEfficiency < 0.75) dEfficiency = 0.75; - LogPrintf("StakeMiner: dEfficiency = %f", dEfficiency); + if (fDebug2) LogPrintf("StakeMiner: dEfficiency = %f", dEfficiency); // Pull Minimum Post Stake UTXO Split Value from config or command line parameter. // Default to 800 and do not allow it to be specified below 800 GRC. nMinStakeSplitValue = max(GetArg("-minstakesplitvalue", MIN_STAKE_SPLIT_VALUE_GRC), MIN_STAKE_SPLIT_VALUE_GRC) * COIN; - LogPrintf("StakeMiner: nMinStakeSplitValue = %f", CoinToDouble(nMinStakeSplitValue)); + if (fDebug2) LogPrintf("StakeMiner: nMinStakeSplitValue = %f", CoinToDouble(nMinStakeSplitValue)); // For the definition of the constant G, please see // https://docs.google.com/document/d/1OyuTwdJx1Ax2YZ42WYkGn_UieN0uY13BTlA5G5IAN00/edit?usp=sharing From 247581fcf6ddef7877133a9111c5a29bf9b7fe02 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 11 May 2019 22:11:22 -0400 Subject: [PATCH 010/115] Prevent INFO level scraper logging from also going to the main debug.log --- src/scraper/scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 4d7f647ce9..fb88782b09 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -389,7 +389,7 @@ void _log(logattribute eType, const std::string& sCall, const std::string& sMess // Send to UI for log window. uiInterface.NotifyScraperEvent(scrapereventtypes::Log, CT_NEW, sOut); - LogPrintf(std::string(sType + ": Scraper: <" + sCall + ">: %s").c_str(), sMessage); + if (eType != logattribute::INFO) LogPrintf(std::string(sType + ": Scraper: <" + sCall + ">: %s").c_str(), sMessage); return; } From db5cec119f240e805056311b8bb527fa41612ef1 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sun, 12 May 2019 06:58:34 +0200 Subject: [PATCH 011/115] Remove unused enum value. --- src/rpcprotocol.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rpcprotocol.h b/src/rpcprotocol.h index 2d8f2e9e20..df097ff917 100644 --- a/src/rpcprotocol.h +++ b/src/rpcprotocol.h @@ -41,7 +41,6 @@ enum RPCErrorCode // General application defined errors RPC_MISC_ERROR = -1, // std::exception thrown in command handling - RPC_FORBIDDEN_BY_SAFE_MODE = -2, // Server is in safe mode, and command is not allowed in safe mode RPC_TYPE_ERROR = -3, // Unexpected type was passed as parameter RPC_INVALID_ADDRESS_OR_KEY = -5, // Invalid address or key RPC_OUT_OF_MEMORY = -7, // Ran out of memory during operation From 95bfa2daa0348369cece6de20748ef05ac05fbd4 Mon Sep 17 00:00:00 2001 From: Richard Leckinger Date: Sun, 12 May 2019 17:48:01 +1200 Subject: [PATCH 012/115] Update diagnosticsdialog.cpp occured > occurred --- src/qt/diagnosticsdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/diagnosticsdialog.cpp b/src/qt/diagnosticsdialog.cpp index 569edf1cab..58a22d484f 100644 --- a/src/qt/diagnosticsdialog.cpp +++ b/src/qt/diagnosticsdialog.cpp @@ -454,7 +454,7 @@ void DiagnosticsDialog::getGithubVersionFinished(QNetworkReply *reply) catch (std::exception& ex) { - ui->checkClientVersionResultLbl->setText("Failed: std exception occured -> " + QString::fromUtf8(ex.what())); + ui->checkClientVersionResultLbl->setText("Failed: std exception occurred -> " + QString::fromUtf8(ex.what())); } return; From 0950d7ddf214a6b099e51a8dad979cd1c815b7db Mon Sep 17 00:00:00 2001 From: Richard Leckinger Date: Sun, 12 May 2019 17:50:05 +1200 Subject: [PATCH 013/115] Update scraper.cpp occured > occurred --- src/scraper/scraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index fb88782b09..6bc1b8f94d 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -372,7 +372,7 @@ void _log(logattribute eType, const std::string& sCall, const std::string& sMess catch (std::exception& ex) { - printf("Logger : exception occured in _log function (%s)\n", ex.what()); + printf("Logger : exception occurred in _log function (%s)\n", ex.what()); return; } @@ -817,7 +817,7 @@ void Scraper(bool bSingleShot) } else if (sbage <= -1) - _log(logattribute::ERR, "Scraper", "RPC error occured, check logs"); + _log(logattribute::ERR, "Scraper", "RPC error occurred, check logs"); // This is the section to download statistics. Only do if authorized. else if (IsScraperAuthorized() || IsScraperAuthorizedToBroadcastManifests(AddressOut, KeyOut)) From d8225108d2a03511ae06877d80ce2e8c6bfc40d2 Mon Sep 17 00:00:00 2001 From: Richard Leckinger Date: Sun, 12 May 2019 17:51:59 +1200 Subject: [PATCH 014/115] Update scraper.cpp modifed > modified --- src/scraper/scraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 6bc1b8f94d..7f03a89b67 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -2186,7 +2186,7 @@ bool InsertScraperFileManifestEntry(ScraperFileManifestEntry& entry) { StructScraperFileManifest.nFileManifestMapHash = GetmScraperFileManifestHash(); - if (fDebug) _log(logattribute::INFO, "InsertScraperFileManifestEntry", "Inserted File Manifest Entry and stored modifed nFileManifestMapHash."); + if (fDebug) _log(logattribute::INFO, "InsertScraperFileManifestEntry", "Inserted File Manifest Entry and stored modified nFileManifestMapHash."); } } @@ -2210,7 +2210,7 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry) { StructScraperFileManifest.nFileManifestMapHash = GetmScraperFileManifestHash(); - if (fDebug) _log(logattribute::INFO, "DeleteScraperFileManifestEntry", "Deleted File Manifest Entry and stored modifed nFileManifestMapHash."); + if (fDebug) _log(logattribute::INFO, "DeleteScraperFileManifestEntry", "Deleted File Manifest Entry and stored modified nFileManifestMapHash."); } // Returns number of elements erased, either 0 or 1. From 4f41679c71c63149d4e0ef22346f74aa0a22fd05 Mon Sep 17 00:00:00 2001 From: Richard Leckinger Date: Mon, 13 May 2019 20:02:41 +1200 Subject: [PATCH 015/115] Update scraper.cpp modifed > modified missed in earlier PR. --- src/scraper/scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index fb88782b09..4e1c0c742a 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -2228,7 +2228,7 @@ bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry) StructScraperFileManifest.nFileManifestMapHash = GetmScraperFileManifestHash(); - if (fDebug) _log(logattribute::INFO, "DeleteScraperFileManifestEntry", "Marked File Manifest Entry non-current and stored modifed nFileManifestMapHash."); + if (fDebug) _log(logattribute::INFO, "DeleteScraperFileManifestEntry", "Marked File Manifest Entry non-current and stored modified nFileManifestMapHash."); return true; } From 6ee594194de33fd4cc8232f8d8854b041dbb02f9 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 13 May 2019 20:33:55 -0400 Subject: [PATCH 016/115] Adds back the new user wizard inadvertently removed --- src/qt/bitcoingui.cpp | 53 ++++++++++++++++++++++++++++++++++--------- src/qt/bitcoingui.h | 3 +++ 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index a83cbe3a50..9f6ba8814e 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -315,6 +315,10 @@ void BitcoinGUI::createActions() diagnosticsAction->setStatusTip(tr("Diagnostics")); diagnosticsAction->setMenuRole(QAction::TextHeuristicRole); + newUserWizardAction = new QAction(tr("&New User Wizard"), this); + newUserWizardAction->setStatusTip(tr("New User Wizard")); + newUserWizardAction->setMenuRole(QAction::TextHeuristicRole); + optionsAction = new QAction(tr("&Options..."), this); optionsAction->setToolTip(tr("Modify configuration options for Gridcoin")); optionsAction->setMenuRole(QAction::PreferencesRole); @@ -350,6 +354,7 @@ void BitcoinGUI::createActions() connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab())); connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab())); connect(diagnosticsAction, SIGNAL(triggered()), this, SLOT(diagnosticsClicked())); + connect(newUserWizardAction, SIGNAL(triggered()), this, SLOT(newUserWizardClicked())); } void BitcoinGUI::setIcons() @@ -372,6 +377,7 @@ void BitcoinGUI::setIcons() boincAction->setIcon(QPixmap(":/images/boinc")); quitAction->setIcon(QPixmap(":/icons/quit")); aboutAction->setIcon(QPixmap(":/images/gridcoin")); + newUserWizardAction->setIcon(QPixmap(":/images/gridcoin")); diagnosticsAction->setIcon(QPixmap(":/images/gridcoin")); optionsAction->setIcon(QPixmap(":/icons/options")); toggleHideAction->setIcon(QPixmap(":/images/gridcoin")); @@ -409,6 +415,10 @@ void BitcoinGUI::createMenuBar() settings->addAction(unlockWalletAction); settings->addAction(lockWalletAction); settings->addSeparator(); + // This new wizard menu item is disabled until we make the wizard more advanced, because the existing one it makes no sense + // to run it after the conf file is created. + //settings->addAction(newUserWizardAction); + //settings->addSeparator(); settings->addAction(optionsAction); QMenu *community = appMenuBar->addMenu(tr("&Community")); @@ -853,6 +863,12 @@ bool CreateNewConfigFile(std::string boinc_email) myConfig << row; row = "addnode=seeds.gridcoin.ifoggz-network.xyz \r\n"; myConfig << row; + row = "addnode=ec2-3-81-39-58.compute-1.amazonaws.com \r\n"; + myConfig << row; + row = "addnode=addnode-us-central.cycy.me \r\n"; + myConfig << row; + row = "addnode=gridcoin.ddns.net \r\n"; + myConfig << row; myConfig.close(); return true; } @@ -872,7 +888,8 @@ bool ForceInAddNode(std::string sMyAddNode) void BitcoinGUI::NewUserWizard() { - if (!IsConfigFileEmpty()) return; + if (IsConfigFileEmpty()) + { QString boincemail = ""; //Typhoon- Check to see if boinc exists in default path - 11-19-2014 @@ -883,10 +900,10 @@ void BitcoinGUI::NewUserWizard() std::string sBoincNarr = ""; if (sout == "-1") { - LogPrintf("Boinc not installed in default location! "); + LogPrintf("BOINC not installed in default location! "); //BoincInstalled=false; std::string nicePath = GetBoincDataDir(); - sBoincNarr = "Boinc is not installed in default location " + nicePath + "! Please set boincdatadir=c:\\programdata\\boinc\\ to the correct path where Boincs programdata directory resides."; + sBoincNarr = "BOINC is not installed in the default location " + nicePath + "! Please set boincdatadir in the gridcoinresearch.conf file to the correct path where the BOINC client_state.xml file resides."; } bool ok; @@ -894,6 +911,7 @@ void BitcoinGUI::NewUserWizard() tr("Please enter your boinc E-mail address, or click to skip for now:"), QLineEdit::Normal, "", &ok); + if (ok && !boincemail.isEmpty()) { std::string new_email = tostdstring(boincemail); @@ -910,26 +928,26 @@ void BitcoinGUI::NewUserWizard() { //Create Config File CreateNewConfigFile("investor"); - QString strMessage = tr("To get started with Boinc, run the boinc client, choose projects, then populate the gridcoinresearch.conf file in %appdata%\\GridcoinResearch with your boinc e-mail address. To run this wizard again, please delete the gridcoinresearch.conf file. "); + QString strMessage = tr("To get started with BOINC, run the BOINC client, choose projects, then populate the gridcoinresearch.conf file in %appdata%\\GridcoinResearch with your boinc e-mail address. To run this wizard again, please delete the gridcoinresearch.conf file. "); QMessageBox::warning(this, tr("New User Wizard - Skipped"), strMessage); } // Read in the mapargs, and set the seed nodes 10-13-2015 ReadConfigFile(mapArgs, mapMultiArgs); + //Force some addnodes in to get user started ForceInAddNode("node.gridcoin.us"); - ForceInAddNode("london.grcnode.co.uk"); - ForceInAddNode("gridcoin.crypto.fans"); - ForceInAddNode("seeds.gridcoin.ifoggz-network.xyz"); - ForceInAddNode("nuad.de"); ForceInAddNode("www.grcpool.com"); + ForceInAddNode("seeds.gridcoin.ifoggz-network.xyz"); + ForceInAddNode("ec2-3-81-39-58.compute-1.amazonaws.com"); + ForceInAddNode("addnode-us-central.cycy.me"); + ForceInAddNode("gridcoin.ddns.net"); if (sBoincNarr != "") { QString qsMessage = tr(sBoincNarr.c_str()); QMessageBox::warning(this, tr("Attention! - Boinc Path Error!"), qsMessage); } - - + } } @@ -976,6 +994,12 @@ void BitcoinGUI::diagnosticsClicked() diagnosticsDialog->activateWindow(); } +// Note this is for the menu item. The menu item is disabled until we implement a more advanced wizard. +void BitcoinGUI::newUserWizardClicked() +{ + NewUserWizard(); +} + // links to websites and services outside the gridcoin client void BitcoinGUI::bxClicked() { @@ -1298,7 +1322,14 @@ void BitcoinGUI::timerfire() { try { - // TODO: Check if these SetRPCResponse calls are really needed. + static bool bNewUserWizardNotified = false; + if (!bNewUserWizardNotified) + { + bNewUserWizardNotified=true; + NewUserWizard(); + } + + // TODO: Check if these SetRPCResponse calls are really needed. /*if (bGlobalcomInitialized) { //R Halford - Allow .NET to talk to Core: 6-21-2015 diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index ee0cec3e2b..05da19c7fa 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -92,6 +92,7 @@ class BitcoinGUI : public QMainWindow QAction *exchangeAction; QAction *votingAction; QAction *diagnosticsAction; + QAction *newUserWizardAction; QAction *verifyMessageAction; QAction *aboutAction; QAction *receiveCoinsAction; @@ -194,6 +195,8 @@ private slots: void chatClicked(); void diagnosticsClicked(); + void newUserWizardClicked(); + #ifndef Q_OS_MAC /** Handle tray icon clicked */ void trayIconActivated(QSystemTrayIcon::ActivationReason reason); From 0203aeab15e557a402559fed23060a71f26c0c64 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 21 May 2019 17:56:55 -0400 Subject: [PATCH 017/115] Add warning in help for blockchain scan for importprivkey --- src/rpcdump.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index e3bcd79544..443d8ff710 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -112,6 +112,7 @@ UniValue importprivkey(const UniValue& params, bool fHelp) "\n" "[label] -------> Optional; Label for imported address\n" "[bool:rescan] -> Optional; Default true\n" + "WARNING: if true rescan of blockchain will occur. This could take up to 20 minutes.\n" "\n" "Adds a private key (as returned by dumpprivkey) to your wallet\n"); From 991046c321b3bc1341909128780a4260da8215d5 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 26 May 2019 00:52:09 -0400 Subject: [PATCH 018/115] Straigten out localization in the scraper. Addresses issue #1470 --- src/init.cpp | 5 ----- src/net.cpp | 12 +++++++--- src/scraper/scraper.cpp | 50 ++++++++++++++++++++--------------------- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 6049905ca0..4272a35ce6 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -540,11 +540,6 @@ bool AppInit2(ThreadHandlerPtr threads) if (!lock.try_lock()) return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Gridcoin is probably already running."), strDataDir)); - // Set the scraper file staging directory. - pathScraper = GetDataDir() / "Scraper"; - - - #if !defined(WIN32) if (fDaemon) { diff --git a/src/net.cpp b/src/net.cpp index fbce259329..e891a0d927 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2253,9 +2253,15 @@ void StartNode(void* parg) else { LogPrintf("Scraper disabled."); - LogPrintf("NN housekeeping thread enabled."); - if (!netThreads->createThread(ThreadNeuralNetwork,NULL,"NeuralNetwork")) - LogPrintf("Error: createThread(NeuralNetwork) failed"); + + // If the neural network is specified to be disabled, do not enable housekeeping thread. + if (!GetBoolArg("-disablenn", false)) + { + LogPrintf("NN housekeeping thread enabled."); + + if (!netThreads->createThread(ThreadNeuralNetwork,NULL,"NeuralNetwork")) + LogPrintf("Error: createThread(NeuralNetwork) failed"); + } } } diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 1d3cd79208..bff0cef1c1 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -163,7 +163,7 @@ class logger LOCK(cs_log); fs::path plogfile = pathDataDir / "scraper.log"; - logfile.open(plogfile.c_str(), std::ios_base::out | std::ios_base::app); + logfile.open(plogfile, std::ios_base::out | std::ios_base::app); if (!logfile.is_open()) LogPrintf("ERROR: Scraper: Logger: Failed to open logging file\n"); @@ -261,7 +261,7 @@ class logger // Re-open log file. fs::path plogfile = pathDataDir / "scraper.log"; - logfile.open(plogfile.c_str(), std::ios_base::out | std::ios_base::app); + logfile.open(plogfile, std::ios_base::out | std::ios_base::app); if (!logfile.is_open()) LogPrintf("ERROR: Scraper: Logger: Failed to open logging file\n"); @@ -269,7 +269,7 @@ class logger PrevArchiveCheckDate = ArchiveCheckDate; } - std::ifstream infile(pfile_temp.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream infile(pfile_temp.string(), std::ios_base::in | std::ios_base::binary); if (!infile) { @@ -277,7 +277,7 @@ class logger return false; } - std::ofstream outgzfile(pfile_out.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outgzfile(pfile_out.string(), std::ios_base::out | std::ios_base::binary); if (!outgzfile) { @@ -486,7 +486,7 @@ class userpass fs::path plistfile = GetDataDir() / "userpass.dat"; - userpassfile.open(plistfile.c_str(), std::ios_base::in); + userpassfile.open(plistfile, std::ios_base::in); if (!userpassfile.is_open()) _log(logattribute::CRITICAL, "userpass_data", "Failed to open userpass file"); @@ -542,9 +542,9 @@ class authdata authdata(const std::string& project) { std::string outfile = project + "_auth.dat"; - fs::path poutfile = GetDataDir() / outfile.c_str(); + fs::path poutfile = GetDataDir() / outfile; - oauthdata.open(poutfile.c_str(), std::ios_base::out | std::ios_base::app); + oauthdata.open(poutfile, std::ios_base::out | std::ios_base::app); if (!oauthdata.is_open()) _log(logattribute::CRITICAL, "auth_data", "Failed to open auth data file"); @@ -708,7 +708,7 @@ void Scraper(bool bSingleShot) { pathDataDir = GetDataDir(); // This is necessary to maintain compatibility with Windows. - pathDataDir.imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16())); + // pathDataDir.imbue(std::locale(std::locale(), new std::codecvt)); pathScraper = pathDataDir / "Scraper"; } @@ -958,7 +958,7 @@ void NeuralNetwork() { pathDataDir = GetDataDir(); // This is necessary to maintain compatibility with Windows. - pathDataDir.imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16())); + // pathDataDir.imbue(std::locale(std::locale(), new std::codecvt)); pathScraper = pathDataDir / "Scraper"; @@ -1293,7 +1293,7 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) std::string team_file_name = prjs.m_name + "-team.gz"; - fs::path team_file = pathScraper / team_file_name.c_str(); + fs::path team_file = pathScraper / team_file_name; // Grab ETag of team file Http http; @@ -1344,7 +1344,7 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) } std::string chketagfile = prjs.m_name + "-" + sTeamETag + ".csv" + ".gz"; - fs::path chkfile = pathScraper / chketagfile.c_str(); + fs::path chkfile = pathScraper / chketagfile; if (fs::exists(chkfile)) { @@ -1387,7 +1387,7 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: if (file.string().empty()) return false; - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { @@ -1529,7 +1529,7 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist std::string rac_file_name = prjs.m_name + +"-user.gz"; - fs::path rac_file = pathScraper / rac_file_name.c_str(); + fs::path rac_file = pathScraper / rac_file_name; // Grab ETag of rac file Http http; @@ -1580,7 +1580,7 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist } std::string chketagfile = prjs.m_name + "-" + sRacETag + ".csv" + ".gz"; - fs::path chkfile = pathScraper / chketagfile.c_str(); + fs::path chkfile = pathScraper / chketagfile; if (fs::exists(chkfile)) { @@ -1636,7 +1636,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil if (file.string().empty()) return false; - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { @@ -1772,7 +1772,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil try { size_t filea = fs::file_size(file); - fs::path temp = gzetagfile.c_str(); + fs::path temp = gzetagfile; size_t fileb = fs::file_size(temp); _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); @@ -1927,7 +1927,7 @@ uint256 GetmScraperFileManifestHash() bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap) { - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { @@ -1972,7 +1972,7 @@ bool LoadBeaconList(const fs::path& file, BeaconMap& mBeaconMap) bool LoadTeamIDList(const fs::path& file) { - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { @@ -2071,7 +2071,7 @@ bool StoreBeaconList(const fs::path& file) if (fs::exists(file)) fs::remove(file); - std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outgzfile(file.string(), std::ios_base::out | std::ios_base::binary); if (!outgzfile) { @@ -2116,7 +2116,7 @@ bool StoreTeamIDList(const fs::path& file) if (fs::exists(file)) fs::remove(file); - std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outgzfile(file.string(), std::ios_base::out | std::ios_base::binary); if (!outgzfile) { @@ -2236,7 +2236,7 @@ bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry) bool LoadScraperFileManifest(const fs::path& file) { - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { @@ -2299,7 +2299,7 @@ bool StoreScraperFileManifest(const fs::path& file) if (fs::exists(file)) fs::remove(file); - std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outgzfile(file.string(), std::ios_base::out | std::ios_base::binary); if (!outgzfile) { @@ -2357,7 +2357,7 @@ bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats) if (fs::exists(file)) fs::remove(file); - std::ofstream outgzfile(file.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outgzfile(file.string(), std::ios_base::out | std::ios_base::binary); if (!outgzfile) { @@ -2435,7 +2435,7 @@ bool StoreStats(const fs::path& file, const ScraperStats& mScraperStats) bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats) { - std::ifstream ingzfile(file.string().c_str(), std::ios_base::in | std::ios_base::binary); + std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); if (!ingzfile) { @@ -2925,7 +2925,7 @@ bool ScraperSaveCScraperManifestToFiles(uint256 nManifestHash) outputfilewpath = savepath / outputfile; - std::ofstream outfile(outputfilewpath.string().c_str(), std::ios_base::out | std::ios_base::binary); + std::ofstream outfile(outputfilewpath.string(), std::ios_base::out | std::ios_base::binary); if (!outfile) { From b17721c2941d71c6929f08c609a453b44dd95d25 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 26 May 2019 14:53:23 -0400 Subject: [PATCH 019/115] Removing unnecessary commented out localization code --- src/scraper/scraper.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index bff0cef1c1..0c43f3cf74 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -707,9 +707,6 @@ void Scraper(bool bSingleShot) if (pathDataDir.empty()) { pathDataDir = GetDataDir(); - // This is necessary to maintain compatibility with Windows. - // pathDataDir.imbue(std::locale(std::locale(), new std::codecvt)); - pathScraper = pathDataDir / "Scraper"; } @@ -811,7 +808,7 @@ void Scraper(bool bSingleShot) sbage = SuperblockAge(); _log(logattribute::INFO, "Scraper", "Superblock not needed. age=" + std::to_string(sbage)); _log(logattribute::INFO, "Scraper", "Sleeping for " + std::to_string(nScraperSleep / 1000) +" seconds"); - + MilliSleep(nScraperSleep); } } @@ -957,9 +954,6 @@ void NeuralNetwork() if (!fScraperActive && pathDataDir.empty()) { pathDataDir = GetDataDir(); - // This is necessary to maintain compatibility with Windows. - // pathDataDir.imbue(std::locale(std::locale(), new std::codecvt)); - pathScraper = pathDataDir / "Scraper"; // Initialize log singleton. Must be after the imbue. From c51418473813e7e60315654c295ba1e697e3424f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 27 May 2019 17:21:34 -0400 Subject: [PATCH 020/115] Initial roughout of consolidateutxos Includes a new overloaded CreateTransaction function. This function works by rpc call... consolidateutxos
[utxo size limit [max num of inputs]] The address is an address in your wallet for which you want to combine UTXOs. The optional utxo size limit means to try and make an output of that size. The function consolidates UTXO's starting from the smallest ascending order on that address, stopping when either the total output size exceeds the utxo size limit (if specified) OR max num of inputs (selected UTXO's) have been reached OR all UTXO's on that address have been selected, whichever occurs first. The max num of inputs is clamped to 200. The fees are calculated and netted to produce no change, but coincontrol is used to route the change back to the same address just in case. --- src/rpcclient.cpp | 2 + src/rpcrawtransaction.cpp | 154 ++++++++++++++++++++++++++++++++++++++ src/rpcserver.cpp | 1 + src/rpcserver.h | 1 + src/wallet.cpp | 48 +++++++++--- src/wallet.h | 2 + 6 files changed, 196 insertions(+), 12 deletions(-) mode change 100644 => 100755 src/rpcrawtransaction.cpp diff --git a/src/rpcclient.cpp b/src/rpcclient.cpp index 6c22206b26..ead7563a4c 100644 --- a/src/rpcclient.cpp +++ b/src/rpcclient.cpp @@ -132,6 +132,8 @@ static const CRPCConvertParam vRPCConvertParams[] = { "listunspent" , 0 }, { "listunspent" , 1 }, { "listunspent" , 2 }, + { "consolidateutxos" , 1 }, + { "consolidateutxos" , 2 }, { "move" , 2 }, { "move" , 3 }, { "rainbymagnitude" , 0 }, diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp old mode 100644 new mode 100755 index 127e766735..25a324bba6 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -13,6 +13,7 @@ #include "main.h" #include "net.h" #include "wallet.h" +#include "coincontrol.h" using namespace std; using namespace boost; @@ -604,6 +605,159 @@ UniValue listunspent(const UniValue& params, bool fHelp) } +UniValue consolidateutxos(const UniValue& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 3) + throw runtime_error( + "consolidateutxos
[UTXO size [maximum number of inputs]]\n" + "\n" + "Performs a single transaction to consolidate UTXOs on\n" + "a given address. The optional parameter of UTXO size will result\n" + "in consolidating UTXOs to generate an output of that size or\n" + "the output for the total value of the specified maximum,\n" + "maximum number of smallest inputs, whichever is less.\n"); + + UniValue result(UniValue::VOBJ); + + std::string sAddress = params[0].get_str(); + CBitcoinAddress OptimizeAddress(sAddress); + + int64_t nConsolidateLimit = 0; + // Set default maximum consolidation to 200 inputs if it is not specified. + unsigned int nInputNumberLimit = 200; + + if (params.size() > 1) nConsolidateLimit = AmountFromValue(params[1]); + if (params.size() > 2) nInputNumberLimit = params[2].get_int(); + + // Clamp InputNumberLimit to 200. + nInputNumberLimit = std::min(nInputNumberLimit, (unsigned int) 200); + + if (!OptimizeAddress.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Gridcoin address: ") + sAddress); + + // Set the consolidation transaction address to the same as the inputs to consolidate. + CScript scriptDestPubKey; + scriptDestPubKey.SetDestination(OptimizeAddress.Get()); + + std::vector vecInputs; + + std::multimap mInputs; + + LOCK(pwalletMain->cs_wallet); + + pwalletMain->AvailableCoins(vecInputs, false, NULL, false); + + // Filter outputs by matching address and insert into sorted multimap. + for (auto const& out : vecInputs) + { + CTxDestination outaddress; + int64_t nOutValue = out.tx->vout[out.i].nValue; + + if (!ExtractDestination(out.tx->vout[out.i].scriptPubKey, outaddress)) continue; + + if (CBitcoinAddress(outaddress) == OptimizeAddress) + mInputs.insert(std::make_pair(nOutValue, out)); + } + + CWalletTx wtxNew; + + // For min fee + CTransaction txDummy; + + set> setCoins; + + unsigned int iInputCount = 0; + int64_t nValue = 0; + + // Construct the inputs to the consolidation transaction. Either all of the inputs from above, or 200, + // or when the total reaches/exceeds nConsolidateLimit, whichever is more limiting. The map allows us + // to elegantly select the UTXO's from the smallest upwards. + for (auto const& out : mInputs) + { + // Increment first so the count is 1 based. + ++iInputCount; + + if (fDebug) LogPrintf("INFO consolidateutxos: input value = %f, confirmations = %" PRId64, ((double) out.first) / (double) COIN, out.second.nDepth); + + setCoins.insert(make_pair(out.second.tx, out.second.i)); + nValue += out.second.tx->vout[out.second.i].nValue; + + if (iInputCount == nInputNumberLimit || (nValue >= nConsolidateLimit && nConsolidateLimit != 0)) break; + } + + // If number of inputs that meet criteria is less than two, then do nothing. + if (iInputCount < 2) + { + result.pushKV("result", true); + result.pushKV("UTXOs consolidated", (uint64_t) 0); + + return result; + } + + CReserveKey reservekey(pwalletMain); + + + // Fee calculation to avoid change. + + // Bytes - Assume two outputs (because there might be change for the time being). + // ----------The inputs to the tx - The one output. + int64_t nBytes = iInputCount * 148 + 34 + 10; + + // Min Fee + int64_t nMinFee = txDummy.GetMinFee(1, GMF_SEND, nBytes); + + int64_t nFee = nTransactionFee * (1 + nBytes / 1000); + + int64_t nFeeRequired = max(nMinFee, nFee); + + + if (pwalletMain->IsLocked()) + { + string strError = _("Error: Wallet locked, unable to create transaction."); + LogPrintf("consolidateutxos: %s", strError); + return strError; + } + + if (fWalletUnlockStakingOnly) + { + string strError = _("Error: Wallet unlocked for staking only, unable to create transaction."); + LogPrintf("consolidateutxos: %s", strError); + return strError; + } + + vector > vecSend; + + // Reduce the out value for the transaction by nFeeRequired from the total of the inputs to provide a fee + // to the staker. The fee has been calculated so that no change should be produced from the CreateTransaction + // call. Just in case, the input address is specified as the return address via coincontrol. + vecSend.push_back(std::make_pair(scriptDestPubKey, nValue - nFeeRequired)); + + CCoinControl* coinControl = new CCoinControl(); + + // Send the change back to the same address. + coinControl->destChange = OptimizeAddress.Get(); + + if (!pwalletMain->CreateTransaction(vecSend, setCoins, wtxNew, reservekey, nFeeRequired, coinControl)) + { + string strError; + if (nValue + nFeeRequired > pwalletMain->GetBalance()) + strError = strprintf(_("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds "), FormatMoney(nFeeRequired)); + else + strError = _("Error: Transaction creation failed "); + LogPrintf("consolidateutxos: %s", strError); + return strError; + } + + if (!pwalletMain->CommitTransaction(wtxNew, reservekey)) + return _("Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."); + + result.pushKV("result", true); + result.pushKV("UTXOs consolidated", (uint64_t) iInputCount); + result.pushKV("Output UTXO value", (double)(nValue - nFeeRequired) / COIN); + + return result; +} + UniValue createrawtransaction(const UniValue& params, bool fHelp) { diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index b8b1484484..57a47bf6bf 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -312,6 +312,7 @@ static const CRPCCommand vRPCCommands[] = { "listsinceblock", &listsinceblock, cat_wallet }, { "listtransactions", &listtransactions, cat_wallet }, { "listunspent", &listunspent, cat_wallet }, + { "consolidateutxos", &consolidateutxos, cat_wallet }, { "makekeypair", &makekeypair, cat_wallet }, { "move", &movecmd, cat_wallet }, { "rain", &rain, cat_wallet }, diff --git a/src/rpcserver.h b/src/rpcserver.h index a6f5abdb49..426bcee544 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -133,6 +133,7 @@ extern UniValue listreceivedbyaddress(const UniValue& params, bool fHelp); extern UniValue listsinceblock(const UniValue& params, bool fHelp); extern UniValue listtransactions(const UniValue& params, bool fHelp); extern UniValue listunspent(const UniValue& params, bool fHelp); +extern UniValue consolidateutxos(const UniValue& params, bool fHelp); extern UniValue makekeypair(const UniValue& params, bool fHelp); extern UniValue movecmd(const UniValue& params, bool fHelp); extern UniValue rain(const UniValue& params, bool fHelp); diff --git a/src/wallet.cpp b/src/wallet.cpp index 8ef137cc7f..63a912d6f4 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -1530,19 +1530,19 @@ bool CWallet::SelectCoinsForStaking(int64_t nTargetValueIn, unsigned int nSpendT return true; } -bool CWallet::CreateTransaction(const vector >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, - int64_t& nFeeRet, const CCoinControl* coinControl) +bool CWallet::CreateTransaction(const vector >& vecSend, set>& setCoins, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, const CCoinControl* coinControl) { - int64_t nValue = 0; + int64_t nValueOut = 0; for (auto const& s : vecSend) { - if (nValue < 0) + if (nValueOut < 0) return false; - nValue += s.second; + nValueOut += s.second; } - if (vecSend.empty() || nValue < 0) + if (vecSend.empty() || nValueOut < 0) return false; wtxNew.BindWallet(this); @@ -1559,24 +1559,36 @@ bool CWallet::CreateTransaction(const vector >& vecSend, wtxNew.vout.clear(); wtxNew.fFromMe = true; - int64_t nTotalValue = nValue + nFeeRet; + int64_t nTotalValue = nValueOut + nFeeRet; double dPriority = 0; // vouts to the payees for (auto const& s : vecSend) wtxNew.vout.push_back(CTxOut(s.second, s.first)); - // Choose coins to use - set > setCoins; int64_t nValueIn = 0; - if (!SelectCoins(nTotalValue, wtxNew.nTime, setCoins, nValueIn, coinControl)) - return false; + + // If provided coin set is empty, choose coins to use. + if (!setCoins.size()) + { + if (!SelectCoins(nTotalValue, wtxNew.nTime, setCoins, nValueIn, coinControl)) + return false; + } + else + { + // Add up input value for the provided set of coins. + for (auto const& input : setCoins) + { + nValueIn += input.first->vout[input.second].nValue; + } + } + for (auto const& pcoin : setCoins) { int64_t nCredit = pcoin.first->vout[pcoin.second].nValue; dPriority += (double)nCredit * pcoin.first->GetDepthInMainChain(); } - int64_t nChange = nValueIn - nValue - nFeeRet; + int64_t nChange = nValueIn - nValueOut - nFeeRet; // if sub-cent change is required, the fee must be raised to at least MIN_TX_FEE // or until nChange becomes zero // NOTE: this depends on the exact behaviour of GetMinFee @@ -1659,6 +1671,18 @@ bool CWallet::CreateTransaction(const vector >& vecSend, return true; } +bool CWallet::CreateTransaction(const vector >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, + int64_t& nFeeRet, const CCoinControl* coinControl) +{ + // Initialize setCoins empty to let CreateTransaction choose via SelectCoins... + set> setCoins; + + return CreateTransaction(vecSend, setCoins, wtxNew, reservekey, nFeeRet, coinControl); +} + + + + bool CWallet::CreateTransaction(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, const CCoinControl* coinControl) { vector< pair > vecSend; diff --git a/src/wallet.h b/src/wallet.h index f6f73a60e6..129810270c 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -7,6 +7,7 @@ #include #include +#include #include #include "main.h" #include "key.h" @@ -199,6 +200,7 @@ class CWallet : public CCryptoKeyStore int64_t GetStake() const; int64_t GetNewMint() const; bool CreateTransaction(const std::vector >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, const CCoinControl *coinControl=NULL); + bool CreateTransaction(const std::vector >& vecSend, std::set>& setCoins, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, const CCoinControl *coinControl=NULL); bool CreateTransaction(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, const CCoinControl *coinControl=NULL); bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey); From fba1ef5ddd27437432268fce21cb1c3eca9d281d Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 1 Jun 2019 15:31:08 -0400 Subject: [PATCH 021/115] Add lock on cs_main --- src/rpcrawtransaction.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index 25a324bba6..99b7339481 100755 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -643,7 +643,7 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) std::multimap mInputs; - LOCK(pwalletMain->cs_wallet); + LOCK2(cs_main, pwalletMain->cs_wallet); pwalletMain->AvailableCoins(vecInputs, false, NULL, false); From 0018c21516070dfb0bfd343e3797637b403e89a5 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 2 Jun 2019 09:33:17 -0400 Subject: [PATCH 022/115] Change default nInputNumberLimit to 50 Also add additional comments and minor cleanup. --- src/rpcrawtransaction.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index 99b7339481..d010818ba7 100755 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -623,13 +623,16 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) CBitcoinAddress OptimizeAddress(sAddress); int64_t nConsolidateLimit = 0; - // Set default maximum consolidation to 200 inputs if it is not specified. - unsigned int nInputNumberLimit = 200; + // Set default maximum consolidation to 50 inputs if it is not specified. This is based + // on performance tests on the Pi to ensure the transaction returns within a reasonable time. + // The performance tests on the Pi show about 3 UTXO's/second. Intel machines should do + // about 3x that. The GUI will not be responsive during the transaction. + unsigned int nInputNumberLimit = 50; if (params.size() > 1) nConsolidateLimit = AmountFromValue(params[1]); if (params.size() > 2) nInputNumberLimit = params[2].get_int(); - // Clamp InputNumberLimit to 200. + // Clamp InputNumberLimit to 200. Above 200 risks an invalid transaction due to the size. nInputNumberLimit = std::min(nInputNumberLimit, (unsigned int) 200); if (!OptimizeAddress.IsValid()) @@ -641,10 +644,15 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) std::vector vecInputs; + // A convenient way to do a sort without the bother of writing a comparison operator. + // The map does it for us! It must be a multimap, because it is highly likely one or + // more UTXO's will have the same nValue. std::multimap mInputs; + // Have to lock both main and wallet to prevent deadlocks. LOCK2(cs_main, pwalletMain->cs_wallet); + // Get the current UTXO's. pwalletMain->AvailableCoins(vecInputs, false, NULL, false); // Filter outputs by matching address and insert into sorted multimap. @@ -661,7 +669,7 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) CWalletTx wtxNew; - // For min fee + // For min fee calculation. CTransaction txDummy; set> setCoins; @@ -677,7 +685,7 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) // Increment first so the count is 1 based. ++iInputCount; - if (fDebug) LogPrintf("INFO consolidateutxos: input value = %f, confirmations = %" PRId64, ((double) out.first) / (double) COIN, out.second.nDepth); + if (fDebug) LogPrintf("INFO: consolidateutxos: input value = %f, confirmations = %" PRId64, ((double) out.first) / (double) COIN, out.second.nDepth); setCoins.insert(make_pair(out.second.tx, out.second.i)); nValue += out.second.tx->vout[out.second.i].nValue; @@ -699,8 +707,8 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) // Fee calculation to avoid change. - // Bytes - Assume two outputs (because there might be change for the time being). - // ----------The inputs to the tx - The one output. + // Bytes + // --------- The inputs to the tx - The one output. int64_t nBytes = iInputCount * 148 + 34 + 10; // Min Fee From 25672559a32b51ade4cdc973771a7ee9d2075189 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 2 Jun 2019 22:11:27 -0400 Subject: [PATCH 023/115] Quick fix for rainbymagnitude This ignores the "NA"s and invalid addresses n the beacon section that correspond to mvMagnitude entries. This is due to an issue with the beacon publishing process which will be fixed in Elizabeth. --- src/rpcblockchain.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index ebd3efb0ec..fea9c044e4 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -929,6 +929,8 @@ UniValue rainbymagnitude(const UniValue& params, bool fHelp) std::string sContract = DecodeBase64(scacheContract); std::string sGRCAddress = ExtractValue(sContract, ";", 2); + if (fDebug) LogPrintf("INFO: rainbymagnitude: sGRCaddress = %s.", sGRCAddress); + double dPayout = (structMag.Magnitude / dTotalNetworkMagnitude) * dAmount; if (dPayout <= 0) @@ -939,7 +941,10 @@ UniValue rainbymagnitude(const UniValue& params, bool fHelp) CBitcoinAddress address(sGRCAddress); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Gridcoin address: ") + sGRCAddress); + { + LogPrintf("ERROR: rainbymagnitude: Invalid Gridcoin address: %s.", sGRCAddress); + continue; + } setAddress.insert(address); From 5fde818b2cf7fc9bb5686f60782d1610a7467ee3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 3 Jun 2019 18:10:23 -0400 Subject: [PATCH 024/115] Move dPayout incrementor to after the address validity check. --- src/rpcblockchain.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index fea9c044e4..49ed174439 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -936,8 +936,6 @@ UniValue rainbymagnitude(const UniValue& params, bool fHelp) if (dPayout <= 0) continue; - dTotalAmount += dPayout; - CBitcoinAddress address(sGRCAddress); if (!address.IsValid()) @@ -946,6 +944,8 @@ UniValue rainbymagnitude(const UniValue& params, bool fHelp) continue; } + dTotalAmount += dPayout; + setAddress.insert(address); CScript scriptPubKey; From 3554b08584f44c189423c8b913fa587d0e20c3cd Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 3 Jun 2019 18:31:57 -0400 Subject: [PATCH 025/115] Change name of rpc function to consolidateunspent This is to better align the function name with other unspent output functions. --- src/rpcclient.cpp | 4 ++-- src/rpcrawtransaction.cpp | 12 ++++++------ src/rpcserver.cpp | 2 +- src/rpcserver.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/rpcclient.cpp b/src/rpcclient.cpp index ead7563a4c..00559b6dfe 100644 --- a/src/rpcclient.cpp +++ b/src/rpcclient.cpp @@ -132,8 +132,8 @@ static const CRPCConvertParam vRPCConvertParams[] = { "listunspent" , 0 }, { "listunspent" , 1 }, { "listunspent" , 2 }, - { "consolidateutxos" , 1 }, - { "consolidateutxos" , 2 }, + { "consolidateunspent" , 1 }, + { "consolidateunspent" , 2 }, { "move" , 2 }, { "move" , 3 }, { "rainbymagnitude" , 0 }, diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index d010818ba7..c474567551 100755 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -605,11 +605,11 @@ UniValue listunspent(const UniValue& params, bool fHelp) } -UniValue consolidateutxos(const UniValue& params, bool fHelp) +UniValue consolidateunspent(const UniValue& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 3) throw runtime_error( - "consolidateutxos
[UTXO size [maximum number of inputs]]\n" + "consolidateunspent
[UTXO size [maximum number of inputs]]\n" "\n" "Performs a single transaction to consolidate UTXOs on\n" "a given address. The optional parameter of UTXO size will result\n" @@ -685,7 +685,7 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) // Increment first so the count is 1 based. ++iInputCount; - if (fDebug) LogPrintf("INFO: consolidateutxos: input value = %f, confirmations = %" PRId64, ((double) out.first) / (double) COIN, out.second.nDepth); + if (fDebug) LogPrintf("INFO: consolidateunspent: input value = %f, confirmations = %" PRId64, ((double) out.first) / (double) COIN, out.second.nDepth); setCoins.insert(make_pair(out.second.tx, out.second.i)); nValue += out.second.tx->vout[out.second.i].nValue; @@ -722,14 +722,14 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) if (pwalletMain->IsLocked()) { string strError = _("Error: Wallet locked, unable to create transaction."); - LogPrintf("consolidateutxos: %s", strError); + LogPrintf("consolidateunspent: %s", strError); return strError; } if (fWalletUnlockStakingOnly) { string strError = _("Error: Wallet unlocked for staking only, unable to create transaction."); - LogPrintf("consolidateutxos: %s", strError); + LogPrintf("consolidateunspent: %s", strError); return strError; } @@ -752,7 +752,7 @@ UniValue consolidateutxos(const UniValue& params, bool fHelp) strError = strprintf(_("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds "), FormatMoney(nFeeRequired)); else strError = _("Error: Transaction creation failed "); - LogPrintf("consolidateutxos: %s", strError); + LogPrintf("consolidateunspent: %s", strError); return strError; } diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 57a47bf6bf..c8a8edec5f 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -312,7 +312,7 @@ static const CRPCCommand vRPCCommands[] = { "listsinceblock", &listsinceblock, cat_wallet }, { "listtransactions", &listtransactions, cat_wallet }, { "listunspent", &listunspent, cat_wallet }, - { "consolidateutxos", &consolidateutxos, cat_wallet }, + { "consolidateunspent", &consolidateunspent, cat_wallet }, { "makekeypair", &makekeypair, cat_wallet }, { "move", &movecmd, cat_wallet }, { "rain", &rain, cat_wallet }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 426bcee544..18c287cc8e 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -133,7 +133,7 @@ extern UniValue listreceivedbyaddress(const UniValue& params, bool fHelp); extern UniValue listsinceblock(const UniValue& params, bool fHelp); extern UniValue listtransactions(const UniValue& params, bool fHelp); extern UniValue listunspent(const UniValue& params, bool fHelp); -extern UniValue consolidateutxos(const UniValue& params, bool fHelp); +extern UniValue consolidateunspent(const UniValue& params, bool fHelp); extern UniValue makekeypair(const UniValue& params, bool fHelp); extern UniValue movecmd(const UniValue& params, bool fHelp); extern UniValue rain(const UniValue& params, bool fHelp); From 8ded881d27016c7eedcce176e33569ca2e6c685c Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 4 Jun 2019 12:02:55 -0400 Subject: [PATCH 026/115] Fix small memory leak with coincontrol --- src/rpcrawtransaction.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index c474567551..aa82f937f4 100755 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -740,12 +740,12 @@ UniValue consolidateunspent(const UniValue& params, bool fHelp) // call. Just in case, the input address is specified as the return address via coincontrol. vecSend.push_back(std::make_pair(scriptDestPubKey, nValue - nFeeRequired)); - CCoinControl* coinControl = new CCoinControl(); + CCoinControl coinControl; // Send the change back to the same address. - coinControl->destChange = OptimizeAddress.Get(); + coinControl.destChange = OptimizeAddress.Get(); - if (!pwalletMain->CreateTransaction(vecSend, setCoins, wtxNew, reservekey, nFeeRequired, coinControl)) + if (!pwalletMain->CreateTransaction(vecSend, setCoins, wtxNew, reservekey, nFeeRequired, &coinControl)) { string strError; if (nValue + nFeeRequired > pwalletMain->GetBalance()) From d80ff0debc54f169bbf6bb5d61adf4e3ee281eb1 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 4 Jun 2019 14:09:01 -0400 Subject: [PATCH 027/115] Update .travis.yml for Bionic --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1f0bb56035..2a641bb78a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,12 +21,12 @@ env: - PYTHON_DEBUG=1 - WINEDEBUG=fixme-all matrix: -# ARM - disabled for now, because Xenial has fPIC error with depends that can't be solved. Need to upgrade to Bionic, which is not available. - #- HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf zlib1g-dev" GCCFLAGS="-fPIC" DEP_OPTS="NO_QT=1" CHECK_DOC=1 GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --disable-tests RUN_TESTS=false" +# ARM + - HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf zlib1g-dev" GCCFLAGS="-fPIC" DEP_OPTS="NO_QT=1" CHECK_DOC=1 GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --disable-tests RUN_TESTS=false" # Win32 - HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-i686 wine1.6" RUN_TESTS=false GOAL="" GRIDCOIN_CONFIG="--enable-reduce-exports" # Qt5 & system libs - - HOST=x86_64-unknown-linux-gnu PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-iostreams-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev protobuf-compiler libqrencode-dev xvfb zlib1g-dev" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" GRIDCOIN_CONFIG=" --with-incompatible-bdb --enable-reduce-exports --with-gui=qt5" + - HOST=x86_64-unknown-linux-gnu PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libqt5charts5-dev libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-iostreams-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev protobuf-compiler libqrencode-dev xvfb zlib1g-dev" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" GRIDCOIN_CONFIG=" --with-incompatible-bdb --enable-reduce-exports --with-gui=qt5" # 32-bit + dash - HOST=i686-pc-linux-gnu PACKAGES="g++-multilib" DEP_OPTS="NO_QT=1" RUN_TESTS=false GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash" # Win64 @@ -36,10 +36,10 @@ env: before_install: - export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/python/d' | tr "\n" ":" | sed "s|::|:|g") - - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + #- sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt-get update -q - - sudo apt-get install gcc-7 -y - - sudo apt-get install gcc-5-arm-linux-gnueabihf -y + #- sudo apt-get install gcc-7 -y + #- sudo apt-get install gcc-5-arm-linux-gnueabihf -y install: - if [ -n "$DPKG_ADD_ARCH" ]; then sudo dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi - if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get update; fi From 39f901ce1c13570c0b147586f4e7bfc4aa380e92 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 4 Jun 2019 12:45:22 -0400 Subject: [PATCH 028/115] Add field excludefromcsmanifest to ScraperFileManifestEntry to support retaining of team and host files for the explorer while not including in CScraperManifests. Also maintains backward compatibility with ver 1 file manifests. --- src/scraper/scraper.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index dce6a7eee3..7f05faed6e 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -51,6 +51,7 @@ struct ScraperFileManifestEntry uint256 hash; // hash of file int64_t timestamp; bool current; + bool excludefromcsmanifest; }; typedef std::map ScraperFileManifestMap; @@ -1797,6 +1798,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // By definition the record we are about to insert is current. If a new file is downloaded for // a given project, it has to be more up to date than any others. NewRecord.current = true; + NewRecord.excludefromcsmanifest = false; // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { @@ -2201,7 +2203,7 @@ unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry) // Delete corresponding file if it exists. if (fs::exists(pathScraper / entry.filename)) - fs::remove(pathScraper /entry.filename); + fs::remove(pathScraper / entry.filename); ret = StructScraperFileManifest.mScraperFileManifest.erase(entry.filename); @@ -2277,6 +2279,20 @@ bool LoadScraperFileManifest(const fs::path& file) LoadEntry.filename = vline[4]; + // This handles startup with legacy manifest file without excludefromcsmanifest column. + if (vline.size() == 6) + { + // Intended for explorer mode, where files not to be included in CScraperManifest + // are to be maintained, such as team and host files. + LoadEntry.excludefromcsmanifest = std::stoi(vline[5]); + } + else + { + // The default if the field is not there is false. (Because scraper ver 1 all files are to be + // included.) + LoadEntry.excludefromcsmanifest = false; + } + // Lock cs_StructScraperFileManifest before updating // global structure. { @@ -2320,7 +2336,7 @@ bool StoreScraperFileManifest(const fs::path& file) if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); // Header. - stream << "Hash," << "Current," << "Time," << "Project," << "Filename\n"; + stream << "Hash," << "Current," << "Time," << "Project," << "Filename," << "ExcludeFromCSManifest" << "\n"; for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -2330,7 +2346,8 @@ bool StoreScraperFileManifest(const fs::path& file) + std::to_string(entry.second.current) + "," + std::to_string(entry.second.timestamp) + "," + entry.second.project + "," - + entry.first + "\n"; + + entry.first + "," + + std::to_string(entry.second.excludefromcsmanifest) + "\n"; stream << sScraperFileManifestEntry; } From 532659d56ea0de55a160611cc58c810aa96184dd Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 4 Jun 2019 20:23:41 -0400 Subject: [PATCH 029/115] Update .travis.yml to support Bionic --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1f0bb56035..2a641bb78a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,12 +21,12 @@ env: - PYTHON_DEBUG=1 - WINEDEBUG=fixme-all matrix: -# ARM - disabled for now, because Xenial has fPIC error with depends that can't be solved. Need to upgrade to Bionic, which is not available. - #- HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf zlib1g-dev" GCCFLAGS="-fPIC" DEP_OPTS="NO_QT=1" CHECK_DOC=1 GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --disable-tests RUN_TESTS=false" +# ARM + - HOST=arm-linux-gnueabihf PACKAGES="g++-arm-linux-gnueabihf zlib1g-dev" GCCFLAGS="-fPIC" DEP_OPTS="NO_QT=1" CHECK_DOC=1 GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --disable-tests RUN_TESTS=false" # Win32 - HOST=i686-w64-mingw32 DPKG_ADD_ARCH="i386" DEP_OPTS="NO_QT=1" PACKAGES="python3 nsis g++-mingw-w64-i686 wine1.6" RUN_TESTS=false GOAL="" GRIDCOIN_CONFIG="--enable-reduce-exports" # Qt5 & system libs - - HOST=x86_64-unknown-linux-gnu PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-iostreams-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev protobuf-compiler libqrencode-dev xvfb zlib1g-dev" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" GRIDCOIN_CONFIG=" --with-incompatible-bdb --enable-reduce-exports --with-gui=qt5" + - HOST=x86_64-unknown-linux-gnu PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libqt5charts5-dev libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-iostreams-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev protobuf-compiler libqrencode-dev xvfb zlib1g-dev" NO_DEPENDS=1 NEED_XVFB=1 RUN_TESTS=true GOAL="install" GRIDCOIN_CONFIG=" --with-incompatible-bdb --enable-reduce-exports --with-gui=qt5" # 32-bit + dash - HOST=i686-pc-linux-gnu PACKAGES="g++-multilib" DEP_OPTS="NO_QT=1" RUN_TESTS=false GOAL="install" GRIDCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" USE_SHELL="/bin/dash" # Win64 @@ -36,10 +36,10 @@ env: before_install: - export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/python/d' | tr "\n" ":" | sed "s|::|:|g") - - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + #- sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt-get update -q - - sudo apt-get install gcc-7 -y - - sudo apt-get install gcc-5-arm-linux-gnueabihf -y + #- sudo apt-get install gcc-7 -y + #- sudo apt-get install gcc-5-arm-linux-gnueabihf -y install: - if [ -n "$DPKG_ADD_ARCH" ]; then sudo dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi - if [ -n "$PACKAGES" ]; then travis_retry sudo apt-get update; fi From c3c6d438f8abca6a82b7de795853dd6d6e3d1818 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 6 May 2019 17:40:17 -0500 Subject: [PATCH 030/115] Create NN CPID and MiningId classes --- src/Makefile.am | 2 + src/Makefile.test.include | 1 + src/neuralnet/cpid.cpp | 233 +++++++++++++++ src/neuralnet/cpid.h | 347 ++++++++++++++++++++++ src/test/neuralnet/cpid_tests.cpp | 467 ++++++++++++++++++++++++++++++ 5 files changed, 1050 insertions(+) create mode 100644 src/neuralnet/cpid.cpp create mode 100644 src/neuralnet/cpid.h create mode 100644 src/test/neuralnet/cpid_tests.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 3f7272f32d..9abc448421 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -90,6 +90,7 @@ GRIDCOIN_CORE_H = \ main.h \ miner.h \ mruset.h \ + neuralnet/cpid.h \ neuralnet/neuralnet.h \ neuralnet/neuralnet_native.h \ neuralnet/neuralnet_stub.h \ @@ -148,6 +149,7 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ neuralnet/neuralnet.cpp \ neuralnet/neuralnet_native.cpp \ neuralnet/neuralnet_stub.cpp \ + neuralnet/cpid.cpp \ neuralnet/project.cpp \ netbase.cpp \ net.cpp \ diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 3be889975a..e9406f42ae 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -42,6 +42,7 @@ GRIDCOIN_TESTS =\ test/mruset_tests.cpp \ test/multisig_tests.cpp \ test/netbase_tests.cpp \ + test/neuralnet/cpid_tests.cpp \ test/neuralnet/project_tests.cpp \ test/rpc_tests.cpp \ test/script_P2SH_tests.cpp \ diff --git a/src/neuralnet/cpid.cpp b/src/neuralnet/cpid.cpp new file mode 100644 index 0000000000..38365c6064 --- /dev/null +++ b/src/neuralnet/cpid.cpp @@ -0,0 +1,233 @@ +#include "neuralnet/cpid.h" +#include "util.h" + +#include +#include + +using namespace NN; + +namespace { +//! +//! \brief Gets the string representation of a mining ID object. +//! +struct MiningIdToStringVisitor : boost::static_visitor +{ + //! + //! \brief Call the mining ID variant type's \c ToString() method directly. + //! + //! \param variant The object to create a string for. + //! + //! \return The string representation of the mining ID. + //! + template + std::string operator()(const T& variant) const + { + return variant.ToString(); + } +}; +} // anonymous namespace + +// ----------------------------------------------------------------------------- +// Class: Cpid +// ----------------------------------------------------------------------------- + +Cpid::Cpid() : m_bytes({ }) +{ +} + +Cpid::Cpid(const std::vector& bytes) +{ + if (bytes.size() == 16) { + std::copy_n(bytes.begin(), 16, m_bytes.begin()); + } else { + m_bytes.fill(0x00); + } +} + +Cpid Cpid::Parse(const std::string& hex) +{ + if (hex.size() != 32) { + return Cpid(); + } + + return Cpid(ParseHex(hex)); +} + +Cpid Cpid::Hash(const std::string& internal, const std::string& email) +{ + if (internal.empty() || email.empty()) { + return Cpid(); + } + + Cpid cpid; + + // Even though the internal CPID is hex-encoded, BOINC creates the external + // CPID hash from the hex string, not from the encoded bytes: + // + std::vector input(internal.begin(), internal.end()); + input.insert(input.end(), email.begin(), email.end()); + + MD5(input.data(), input.size(), cpid.m_bytes.data()); + + return cpid; +} + +bool Cpid::operator==(const Cpid& other) const +{ + return m_bytes == other.m_bytes; +} + +bool Cpid::operator!=(const Cpid& other) const +{ + return m_bytes != other.m_bytes; +} + +bool Cpid::IsZero() const +{ + const auto zero = [](const unsigned char& i) { return i == 0; }; + + return std::all_of(m_bytes.begin(), m_bytes.end(), zero); +} + +bool Cpid::Matches(const std::string& internal, const std::string& email) const +{ + return m_bytes == Cpid::Hash(internal, email).m_bytes; +} + +const std::array& Cpid::Raw() const +{ + return m_bytes; +} + +std::array& Cpid::Raw() +{ + return m_bytes; +} + +std::string Cpid::ToString() const +{ + return HexStr(m_bytes.begin(), m_bytes.end()); +} + +// ----------------------------------------------------------------------------- +// Class: MiningId +// ----------------------------------------------------------------------------- + +MiningId::MiningId() : m_variant(Invalid()) +{ +} + +MiningId::MiningId(Cpid cpid) : m_variant(std::move(cpid)) +{ +} + +MiningId MiningId::ForInvestor() +{ + MiningId miningId; + miningId.m_variant = Investor(); + + return miningId; +} + +MiningId MiningId::Parse(const std::string& input) +{ + if (input.empty()) { + return MiningId(); + } + + if (input == "INVESTOR" || input == "investor") { + return MiningId::ForInvestor(); + } + + if (input.size() == 32) { + std::vector bytes = ParseHex(input); + + if (bytes.size() == 16) { + return MiningId(Cpid(bytes)); + } + } + + return MiningId(); +} + +bool MiningId::operator==(const MiningId& other) const +{ + if (m_variant.which() != other.m_variant.which()) { + return false; + } + + if (Which() == Kind::CPID) { + return *this == boost::get(other.m_variant); + } + + return true; +} + +bool MiningId::operator!=(const MiningId& other) const +{ + return !(*this == other); +} + +bool MiningId::operator==(const Cpid& other) const +{ + return Which() == Kind::CPID + && boost::get(m_variant) == other; +} + +bool MiningId::operator!=(const Cpid& other) const +{ + return !(*this == other); +} + +MiningId::Kind MiningId::Which() const +{ + return static_cast(m_variant.which()); +} + +bool MiningId::Valid() const +{ + return Which() != Kind::INVALID; +} + +CpidOption MiningId::TryCpid() const +{ + if (Which() != Kind::CPID) { + return boost::none; + } + + return boost::get(m_variant); +} + +std::string MiningId::ToString() const +{ + return boost::apply_visitor(MiningIdToStringVisitor(), m_variant); +} + +unsigned int MiningId::GetSerializeSize(int nType, int nVersion) const +{ + if (Which() == Kind::CPID) { + return 1 + 16; // Variant tag byte + CPID bytes + } + + // For variants without any associated data, we serialize the variant tag + // only as a single byte: + return 1; +} + +// ----------------------------------------------------------------------------- +// Class: MiningId::Invalid +// ----------------------------------------------------------------------------- + +std::string MiningId::Invalid::ToString() const +{ + return std::string(); +} + +// ----------------------------------------------------------------------------- +// Class: MiningId::Investor +// ----------------------------------------------------------------------------- + +std::string MiningId::Investor::ToString() const +{ + return "INVESTOR"; +} diff --git a/src/neuralnet/cpid.h b/src/neuralnet/cpid.h new file mode 100644 index 0000000000..a3dad978f6 --- /dev/null +++ b/src/neuralnet/cpid.h @@ -0,0 +1,347 @@ +#pragma once + +#include "serialize.h" + +#include +#include +#include +#include +#include +#include + +namespace NN { +//! +//! \brief Represents a BOINC researcher's external, public CPID. +//! +//! An external CPID is the MD5 digest of the concatenation of a BOINC account's +//! internal CPID and email address. +//! +class Cpid +{ +public: + //! + //! \brief Initialize a zero-value CPID object. + //! + Cpid(); + + //! + //! \brief Initialize a CPID object from the bytes in an MD5 hash. + //! + //! \param bytes CPID output bytes from an MD5 hashing function to copy. + //! + Cpid(const std::vector& bytes); + + //! + //! \brief Create a CPID object from its MD5 string representation. + //! + //! Malformed CPIDs parse to the zero value. Because a zero-value CPID is + //! technically a valid value, prefer to use MiningId::Parse() to parse a + //! string that may not contain a well-formed CPID. + //! + //! \param hex Hex-encoded bytes of the MD5 hash. + //! + //! \return A new CPID object that contains the bytes in the provided hash + //! or a zero-value CPID object if the input string does not represent a + //! valid MD5 hash. + //! + static Cpid Parse(const std::string& hex); + + //! + //! \brief Initialize a CPID object by hashing an internal, private CPID + //! and email address to produce the external, public CPID. + //! + //! \param internal Private (internal) CPID as a hex-encoded string. + //! \param email Email address of the BOINC account for the CPID. + //! + //! \return The public CPID that represents the provided internal CPID and + //! email address pair. + //! + static Cpid Hash(const std::string& internal, const std::string& email); + + //! + //! \brief Compare a supplied CPID value for equality. + //! + //! \param other A CPID value to check equality for. + //! + //! \return \c true if the supplied CPID's bytes match. + //! + bool operator==(const Cpid& other) const; + + //! + //! \brief Compare a supplied CPID value for inequality. + //! + //! \param other A CPID value to check inequality for. + //! + //! \return \c true if the supplied CPID's bytes do not match. + //! + bool operator!=(const Cpid& other) const; + + //! + //! \brief Determine whether the CPID contains only zeros. + //! + //! \return \c true if every byte in the CPID equals \c 0x00. + //! + bool IsZero() const; + + //! + //! \brief Determine whether the external CPID matches the hash created from + //! the supplied internal CPID and email address. + //! + //! \param internal Private CPID as a 32-character hex-encoded string. + //! \param email Email address of the BOINC account for the CPID. + //! + //! \return \c true if the hashed concatenation of the internal CPID and + //! email address match the external CPID represented by this object. + //! + bool Matches(const std::string& internal, const std::string& email) const; + + //! + //! \brief Get the bytes that make up the CPID. + //! + //! \return An immutable reference to the underlying byte array. + //! + const std::array& Raw() const; + + //! + //! \brief Get the bytes that make up the CPID. + //! + //! \return A mutable reference to the underlying byte array. + //! + std::array& Raw(); + + //! + //! \brief Get the MD5 string representation of the CPID. + //! + //! \return Hex-encoded bytes of the MD5 hash. + //! + std::string ToString() const; + + IMPLEMENT_SERIALIZE + ( + READWRITE(FLATDATA(m_bytes)); + ) + +private: + //! + //! \brief Bytes that make up the public CPID (an MD5 hash). + //! + //! Store these as an array instead of a \c uint128 object because CPIDs + //! have little in common with that numeric type. The \c uint128 numbers + //! represent themselves as big-endian whereas CPIDs display canonically + //! as little-endian. Use of \c uint128 here would complicate validation + //! and add unnecessary overhead. + //! + std::array m_bytes; +}; // Cpid + +//! +//! \brief An optional type that either contains a reference to some external +//! CPID value or does not. +//! +typedef boost::optional CpidOption; + +//! +//! \brief A variant type that identifies an entity that may receive rewards. +//! +class MiningId +{ +public: + //! + //! \brief Describes the kind of miner represented by a \c MiningId object. + //! + enum class Kind : unsigned char + { + INVALID = 0x00, //!< An empty or invalid CPID. + INVESTOR = 0x01, //!< A CPID that represents a non-researcher. + CPID = 0x02, //!< A valid exernal CPID. + }; + + //! + //! \brief A tag type that describes an empty or invalid CPID. + //! + struct Invalid + { + //! + //! \brief Get the string representation of an invalid mining ID. + //! + //! \return An empty string. + //! + std::string ToString() const; + }; + + //! + //! \brief A tag type that describes a CPID that represents a non-researcher + //! (an investor without a BOINC CPID). + //! + struct Investor + { + //! + //! \brief Get the string representation of an investor. + //! + //! \return The string literal "INVESTOR". + //! + std::string ToString() const; + }; + + //! + //! \brief Initialize an empty, invalid mining ID object. + //! + MiningId(); + + //! + //! \brief Initialize a mining ID for the provided CPID value. + //! + //! \param cpid An external BOINC CPID. + //! + MiningId(Cpid cpid); + + //! + //! \brief Initialize a mining ID that represents a non-researcher. + //! + static MiningId ForInvestor(); + + //! + //! \brief Create a mining ID object from its string representation. + //! + //! \param input Hex-encoded bytes of a CPID, or the string "INVESTOR". + //! + //! \return A mining ID object parsed from the input. + //! + static MiningId Parse(const std::string& input); + + //! + //! \brief Compare a supplied mining ID value for equality. + //! + //! \param other A mining ID value to check equality for. + //! + //! \return \c true if the supplied mining ID's bytes match. + //! + bool operator==(const MiningId& other) const; + + //! + //! \brief Compare a supplied mining ID value for inequality. + //! + //! \param other A mining ID value to check inequality for. + //! + //! \return \c true if the supplied mining ID's bytes do not match. + //! + bool operator!=(const MiningId& other) const; + + //! + //! \brief Compare a supplied CPID value for equality. + //! + //! \param other A CPID value to check equality for. + //! + //! \return \c true if this object contains a CPID variant and the supplied + //! CPID's bytes match. + //! + bool operator==(const Cpid& other) const; + + //! + //! \brief Compare a supplied CPID value for inequality. + //! + //! \param other A CPID value to check inequality for. + //! + //! \return \c true if this object does not contain a CPID variant or the + //! supplied CPID's bytes do not match. + //! + bool operator!=(const Cpid& other) const; + + //! + //! \brief Describe the type of entity represented by the mining ID. + //! + //! \return A value enumerated on \c MiningId::Kind . + //! + Kind Which() const; + + //! + //! \brief Determine whether the mining ID is valid. + //! + //! \return \c true if the object represents a valid CPID or an investor. + //! + bool Valid() const; + + //! + //! \brief Get the CPID value if it exists. + //! + //! \return An object that contains a reference to a \c Cpid object if the + //! variant holds a CPID value. + //! + CpidOption TryCpid() const; + + //! + //! \brief Get the string representation of the mining ID. + //! + //! \return Hex-encoded bytes of the MD5 hash for a CPID, "INVESTOR" for + //! an investor, or an empty string for invalid mining IDs. + //! + std::string ToString() const; + + //! + //! \brief Get the size of the data to serialize. + //! + //! \param nType Target protocol type (network, disk, etc.). + //! \param nVersion Protocol version. + //! + //! \return Size of the data in bytes. + //! + unsigned int GetSerializeSize(int nType, int nVersion) const; + + //! + //! \brief Serialize the object to the provided stream. + //! + //! \param stream The output stream. + //! \param nType Target protocol type (network, disk, etc.). + //! \param nVersion Protocol version. + //! + template + void Serialize(Stream& stream, int nType, int nVersion) const + { + unsigned char kind = m_variant.which(); + + ::Serialize(stream, kind, nType, nVersion); + + if (static_cast(kind) == Kind::CPID) { + boost::get(m_variant).Serialize(stream, nType, nVersion); + } + } + + //! + //! \brief Deserialize the object from the provided stream. + //! + //! \param stream The input stream. + //! \param nType Target protocol type (network, disk, etc.). + //! \param nVersion Protocol version. + //! + template + void Unserialize(Stream& stream, int nType, int nVersion) + { + unsigned char kind; + + ::Unserialize(stream, kind, nType, nVersion); + + switch (static_cast(kind)) { + case Kind::INVESTOR: + m_variant = Investor(); + break; + case Kind::CPID: + { + Cpid cpid; + cpid.Unserialize(stream, nType, nVersion); + + m_variant = std::move(cpid); + } + break; + default: + m_variant = Invalid(); + break; + } + } + +private: + //! + //! \brief Stores the various states that a mining ID may exist in. + //! + boost::variant m_variant; +}; // MiningId +} diff --git a/src/test/neuralnet/cpid_tests.cpp b/src/test/neuralnet/cpid_tests.cpp new file mode 100644 index 0000000000..2863c85dc1 --- /dev/null +++ b/src/test/neuralnet/cpid_tests.cpp @@ -0,0 +1,467 @@ +#include "neuralnet/cpid.h" + +#include +#include +#include + +// ----------------------------------------------------------------------------- +// Cpid +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(Cpid) + +BOOST_AUTO_TEST_CASE(it_initializes_to_a_zero_cpid) +{ + NN::Cpid cpid; + + std::array zeros { }; + + BOOST_CHECK(cpid.Raw() == zeros); +} + +BOOST_AUTO_TEST_CASE(it_initializes_to_the_supplied_bytes) +{ + std::vector expected { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + NN::Cpid cpid(expected); + + std::vector bytes(cpid.Raw().begin(), cpid.Raw().end()); + + BOOST_CHECK(bytes == expected); +} + +BOOST_AUTO_TEST_CASE(it_parses_a_cpid_from_its_string_representation) +{ + NN::Cpid cpid = NN::Cpid::Parse("00010203040506070809101112131415"); + + BOOST_CHECK(cpid.Raw() == (std::array { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + })); +} + +BOOST_AUTO_TEST_CASE(it_parses_an_invalid_cpid_string_to_zeros) +{ + // Empty: + NN::Cpid cpid = NN::Cpid::Parse(""); + BOOST_CHECK(cpid.IsZero() == true); + + // Too short: 31 characters + cpid = NN::Cpid::Parse("0001020304050607080910111213141"); + BOOST_CHECK(cpid.IsZero() == true); + + // Too long: 33 characters + cpid = NN::Cpid::Parse("000102030405060708091011121314155"); + BOOST_CHECK(cpid.IsZero() == true); + + // Non-hex character at the end: + cpid = NN::Cpid::Parse("0001020304050607080910111213141Z"); + BOOST_CHECK(cpid.IsZero() == true); +} + +BOOST_AUTO_TEST_CASE(it_hashes_an_internal_cpid_and_email_to_make_a_public_cpid) +{ + std::vector expected { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + }; + + NN::Cpid cpid = NN::Cpid::Hash( + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // internal CPID + "test@example.com"); + + std::vector bytes(cpid.Raw().begin(), cpid.Raw().end()); + + BOOST_CHECK(bytes == expected); +} + +BOOST_AUTO_TEST_CASE(it_refuses_to_hash_an_invalid_internal_cpid_or_email) +{ + NN::Cpid cpid = NN::Cpid::Hash("", "test@example.com"); + + BOOST_CHECK(cpid.IsZero() == true); + + cpid = NN::Cpid::Hash("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", ""); + + BOOST_CHECK(cpid.IsZero() == true); + + cpid = NN::Cpid::Hash("", ""); + + BOOST_CHECK(cpid.IsZero() == true); +} + +BOOST_AUTO_TEST_CASE(it_compares_another_cpid_for_equality) +{ + NN::Cpid cpid1(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + }); + + NN::Cpid cpid2(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + }); + + BOOST_CHECK(cpid1 == cpid2); + BOOST_CHECK(cpid1 != NN::Cpid()); +} + +BOOST_AUTO_TEST_CASE(it_determines_whether_a_cpid_is_all_zeros) +{ + NN::Cpid cpid; + + BOOST_CHECK(cpid.IsZero() == true); + + cpid = NN::Cpid::Parse("00010203040506070809101112131415"); + + BOOST_CHECK(cpid.IsZero() == false); +} + +BOOST_AUTO_TEST_CASE(it_determines_whether_a_cpid_matches_an_internal_cpid) +{ + NN::Cpid cpid(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + }); + + std::string internal_cpid = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; + std::string email = "test@example.com"; + + BOOST_CHECK(cpid.Matches(internal_cpid, email) == true); + BOOST_CHECK(cpid.Matches(internal_cpid, "invalid") == false); + BOOST_CHECK(cpid.Matches("invalid", email) == false); + + // An invalid CPID should not match: + BOOST_CHECK(NN::Cpid().Matches(internal_cpid, email) == false); +} + +BOOST_AUTO_TEST_CASE(it_represents_itself_as_a_string) +{ + NN::Cpid cpid(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + BOOST_CHECK(cpid.ToString() == "00010203040506070809101112131415"); +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) +{ + std::vector expected { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + NN::Cpid cpid(expected); + + BOOST_CHECK(cpid.GetSerializeSize(SER_NETWORK, 1) == 16); + + CDataStream stream(SER_NETWORK, 1); + stream << cpid; + std::vector output(stream.begin(), stream.end()); + + BOOST_CHECK(output == expected); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) +{ + NN::Cpid cpid; + + std::vector expected { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + CDataStream stream(expected, SER_NETWORK, 1); + stream >> cpid; + std::vector bytes(cpid.Raw().begin(), cpid.Raw().end()); + + BOOST_CHECK(bytes == expected); +} + +BOOST_AUTO_TEST_SUITE_END() + +// ----------------------------------------------------------------------------- +// MiningId +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(MiningId) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_invalid_mining_id) +{ + NN::MiningId mining_id; + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); +} + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_investor) +{ + NN::MiningId mining_id = NN::MiningId::ForInvestor(); + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVESTOR); +} + +BOOST_AUTO_TEST_CASE(it_initializes_to_the_provided_cpid) +{ + NN::Cpid expected(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + NN::MiningId mining_id(expected); + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::CPID); + + if (const NN::CpidOption cpid = mining_id.TryCpid()) { + BOOST_CHECK(*cpid == expected); + } else { + BOOST_FAIL("MiningId variant does not contain the CPID."); + } +} + +BOOST_AUTO_TEST_CASE(it_parses_an_investor_mining_id) +{ + NN::MiningId mining_id = NN::MiningId::Parse("INVESTOR"); + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVESTOR); + + mining_id = NN::MiningId::Parse("investor"); + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVESTOR); +} + +BOOST_AUTO_TEST_CASE(it_parses_a_cpid_mining_id) +{ + std::string hex = "00010203040506070809101112131415"; + + NN::MiningId mining_id = NN::MiningId::Parse(hex); + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::CPID); + + NN::Cpid expected = NN::Cpid::Parse(hex); + + if (const NN::CpidOption cpid = mining_id.TryCpid()) { + BOOST_CHECK(*cpid == expected); + + BOOST_CHECK((*cpid).Raw() == (std::array { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + })); + } else { + BOOST_FAIL("MiningId variant does not contain the CPID."); + } +} + +BOOST_AUTO_TEST_CASE(it_refuses_to_parse_an_invalid_cpid) +{ + // Empty: + NN::MiningId mining_id = NN::MiningId::Parse(""); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); + + // Bad investor: + mining_id = NN::MiningId::Parse("INVESTOR "); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); + + // Too short: 31 characters + mining_id = NN::MiningId::Parse("0001020304050607080910111213141"); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); + + // Too long: 33 characters + mining_id = NN::MiningId::Parse("000102030405060708091011121314155"); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); + + // Non-hex character at the end: + mining_id = NN::MiningId::Parse("0001020304050607080910111213141Z"); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); +} + +BOOST_AUTO_TEST_CASE(it_compares_another_mining_id_for_equality) +{ + NN::MiningId mining_id1(NN::Cpid(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + })); + + NN::MiningId mining_id2(NN::Cpid(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + })); + + BOOST_CHECK(NN::MiningId() == NN::MiningId()); + BOOST_CHECK(NN::MiningId::ForInvestor() == NN::MiningId::ForInvestor()); + + BOOST_CHECK(mining_id1 == mining_id2); + BOOST_CHECK(mining_id1 != NN::MiningId()); + BOOST_CHECK(mining_id1 != NN::MiningId::ForInvestor()); + BOOST_CHECK(mining_id1 != NN::MiningId(NN::Cpid())); +} + +BOOST_AUTO_TEST_CASE(it_compares_another_cpid_for_equality) +{ + NN::MiningId mining_id(NN::Cpid(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + })); + + NN::Cpid cpid(std::vector { + 0x56, 0xd4, 0x2d, 0x93, 0xc5, 0x0c, 0xfa, 0xd6, + 0x5e, 0x13, 0x0d, 0xea, 0x34, 0x2a, 0xa0, 0xf9, + }); + + BOOST_CHECK(mining_id == cpid); + BOOST_CHECK(mining_id != NN::Cpid()); +} + +BOOST_AUTO_TEST_CASE(it_determines_which_mining_id_variant_it_exhibits) +{ + NN::MiningId mining_id; + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); + + mining_id = NN::MiningId::ForInvestor(); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVESTOR); + + mining_id = NN::MiningId(NN::Cpid()); + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::CPID); +} + +BOOST_AUTO_TEST_CASE(it_provides_guarded_access_to_stored_cpid_values) +{ + NN::Cpid expected(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + NN::MiningId mining_id(expected); + + // To prevent mistakes, client code must check that a MiningId variant + // actually contains a CPID before using it: + if (const NN::CpidOption cpid = mining_id.TryCpid()) { + BOOST_CHECK(*cpid == expected); + } else { + BOOST_FAIL("MiningId variant does not contain the CPID."); + } + + mining_id = NN::MiningId(); + if (const NN::CpidOption cpid = mining_id.TryCpid()) { + BOOST_FAIL("MiningId variant should not contain the CPID."); + } + + mining_id = NN::MiningId::ForInvestor(); + if (const NN::CpidOption cpid = mining_id.TryCpid()) { + BOOST_FAIL("MiningId variant should not contain the CPID."); + } +} + +BOOST_AUTO_TEST_CASE(it_represents_itself_as_a_string) +{ + BOOST_CHECK(NN::MiningId().ToString().empty() == true); + BOOST_CHECK(NN::MiningId::ForInvestor().ToString() == "INVESTOR"); + + NN::MiningId mining_id(NN::Cpid(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + })); + + BOOST_CHECK(mining_id.ToString() == "00010203040506070809101112131415"); +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream_for_invalid) +{ + NN::MiningId mining_id; + + BOOST_CHECK(mining_id.GetSerializeSize(SER_NETWORK, 1) == 1); + + CDataStream stream(SER_NETWORK, 1); + stream << mining_id; + + BOOST_CHECK(stream.size() == 1); + BOOST_CHECK(stream[0] == 0x00); // MiningId::Kind::INVALID +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream_for_investor) +{ + NN::MiningId mining_id = NN::MiningId::ForInvestor(); + + BOOST_CHECK(mining_id.GetSerializeSize(SER_NETWORK, 1) == 1); + + CDataStream stream(SER_NETWORK, 1); + stream << mining_id; + + BOOST_CHECK(stream.size() == 1); + BOOST_CHECK(stream[0] == 0x01); // MiningId::Kind::INVESTOR +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream_for_cpid) +{ + std::vector expected { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + NN::MiningId mining_id{NN::Cpid(expected)}; + + BOOST_CHECK(mining_id.GetSerializeSize(SER_NETWORK, 1) == 17); + + CDataStream stream(SER_NETWORK, 1); + stream << mining_id; + std::vector output(stream.begin(), stream.end()); + + BOOST_CHECK(output[0] == 0x02); // MiningId::Kind::CPID + + BOOST_CHECK_EQUAL_COLLECTIONS( + ++output.begin(), // we already checked the first byte + output.end(), + expected.begin(), + expected.end()); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_invalid) +{ + // Initialize mining_id with a valid value to test invalid: + NN::MiningId mining_id = NN::MiningId::ForInvestor(); + + CDataStream stream(SER_NETWORK, 1); + stream << (unsigned char)0x00; // MiningId::Kind::INVALID + stream >> mining_id; + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVALID); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_investor) +{ + NN::MiningId mining_id; + + CDataStream stream(SER_NETWORK, 1); + stream << (unsigned char)0x01; // MiningId::Kind::INVESTOR + stream >> mining_id; + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::INVESTOR); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_cpid) +{ + NN::MiningId mining_id; + + NN::Cpid expected(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + CDataStream stream(SER_NETWORK, 1); + stream << (unsigned char)0x02; // MiningId::Kind::CPID + stream << expected; + stream >> mining_id; + + BOOST_CHECK(mining_id.Which() == NN::MiningId::Kind::CPID); + + if (const boost::optional cpid = mining_id.TryCpid()) { + BOOST_CHECK(*cpid == expected); + } else { + BOOST_FAIL("MiningId variant does not contain the CPID."); + } +} + +BOOST_AUTO_TEST_SUITE_END() From 7bac59c04de243b66468d52490aa134232d28e77 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 6 May 2019 15:43:50 -0500 Subject: [PATCH 031/115] Remove boinckey export RPC method and import handler --- src/main.cpp | 79 +++---------------------------------------- src/rpcblockchain.cpp | 33 ------------------ src/rpcserver.cpp | 1 - src/rpcserver.h | 1 - 4 files changed, 5 insertions(+), 109 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index c6e50a04f3..dd2f674f8c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -762,9 +762,6 @@ MiningCPID GetInitializedGlobalCPUMiningCPID(std::string cpid) MiningCPID GetNextProject(bool bForce) { - - - if (GlobalCPUMiningCPID.projectname.length() > 3 && GlobalCPUMiningCPID.projectname != "INVESTOR" && GlobalCPUMiningCPID.Magnitude >= 1) { if (!Timer_Main("globalcpuminingcpid",10)) @@ -774,25 +771,6 @@ MiningCPID GetNextProject(bool bForce) } } - - std::string sBoincKey = GetArgument("boinckey",""); - if (!sBoincKey.empty()) - { - if (fDebug3 && LessVerbose(50)) LogPrintf("Using cached boinckey for project %s",GlobalCPUMiningCPID.projectname); - msMiningProject = GlobalCPUMiningCPID.projectname; - msMiningCPID = GlobalCPUMiningCPID.cpid; - if (LessVerbose(5)) LogPrintf("BoincKey - Mining project %s RAC(%f)", GlobalCPUMiningCPID.projectname, GlobalCPUMiningCPID.rac); - double ProjectRAC = GetNetworkAvgByProject(GlobalCPUMiningCPID.projectname); - GlobalCPUMiningCPID.NetworkRAC = ProjectRAC; - GlobalCPUMiningCPID.Magnitude = CalculatedMagnitude(GetAdjustedTime(),false); - if (fDebug3) LogPrintf("(boinckey) For CPID %s Verified Magnitude = %f",GlobalCPUMiningCPID.cpid,GlobalCPUMiningCPID.Magnitude); - msMiningErrors = (msMiningCPID == "INVESTOR" || msPrimaryCPID=="INVESTOR" || msMiningCPID.empty()) ? _("Staking Interest") : _("Mining"); - GlobalCPUMiningCPID.RSAWeight = GetRSAWeightByCPID(GlobalCPUMiningCPID.cpid); - GlobalCPUMiningCPID.LastPaymentTime = GetLastPaymentTimeByCPID(GlobalCPUMiningCPID.cpid); - return GlobalCPUMiningCPID; - } - - msMiningProject = ""; msMiningCPID = ""; GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID(""); @@ -800,8 +778,6 @@ MiningCPID GetNextProject(bool bForce) std::string email = GetArgument("email", "NA"); boost::to_lower(email); - - if (IsInitialBlockDownload() && !bForce) { if (LessVerbose(100)) LogPrintf("CPUMiner: Gridcoin is downloading blocks Or CPIDs are not yet loaded..."); @@ -7357,56 +7333,11 @@ void HarvestCPIDs(bool cleardata) if (fDebug10) LogPrintf("loading BOINC cpids ..."); - //Remote Boinc Feature - R Halford - std::string sBoincKey = GetArgument("boinckey",""); - - if (!sBoincKey.empty()) - { - //Deserialize key into Global CPU Mining CPID 2-6-2015 - LogPrintf("Using key %s ",sBoincKey); - - std::string sDec=DecodeBase64(sBoincKey); - LogPrintf("Using key %s ",sDec); - - if (sDec.empty()) LogPrintf("Error while deserializing boinc key! Please use execute genboinckey to generate a boinc key from the host with boinc installed."); - //Version not needed for keys for now - GlobalCPUMiningCPID = DeserializeBoincBlock(sDec,7); - - GlobalCPUMiningCPID.initialized = true; - - if (GlobalCPUMiningCPID.cpid.empty()) - { - LogPrintf("Error while deserializing boinc key! Please use execute genboinckey to generate a boinc key from the host with boinc installed."); - } - else - { - LogPrintf("CPUMiningCPID Initialized."); - } - - GlobalCPUMiningCPID.email = GlobalCPUMiningCPID.aesskein; - LogPrintf("Using Serialized Boinc CPID %s with orig email of %s and bpk of %s with cpidhash of %s ",GlobalCPUMiningCPID.cpid, GlobalCPUMiningCPID.email, GlobalCPUMiningCPID.boincruntimepublickey, GlobalCPUMiningCPID.cpidhash); - GlobalCPUMiningCPID.cpidhash = GlobalCPUMiningCPID.boincruntimepublickey; - LogPrintf("Using Serialized Boinc CPID %s with orig email of %s and bpk of %s with cpidhash of %s ",GlobalCPUMiningCPID.cpid, GlobalCPUMiningCPID.email, GlobalCPUMiningCPID.boincruntimepublickey, GlobalCPUMiningCPID.cpidhash); - StructCPID structcpid = GetStructCPID(); - structcpid.initialized = true; - structcpid.cpidhash = GlobalCPUMiningCPID.cpidhash; - structcpid.projectname = GlobalCPUMiningCPID.projectname; - structcpid.team = "gridcoin"; - structcpid.rac = GlobalCPUMiningCPID.rac; - structcpid.cpid = GlobalCPUMiningCPID.cpid; - structcpid.boincpublickey = GlobalCPUMiningCPID.encboincpublickey; - structcpid.NetworkRAC = GlobalCPUMiningCPID.NetworkRAC; - // 2-6-2015 R Halford - Ensure CPIDv2 Is populated After deserializing GenBoincKey - LogPrintf("GenBoincKey using email %s and cpidhash %s key %s ", GlobalCPUMiningCPID.email, structcpid.cpidhash, sDec); - structcpid.cpidv2 = ComputeCPIDv2(GlobalCPUMiningCPID.email, structcpid.cpidhash, 0); - structcpid.Iscpidvalid = true; - mvCPIDs.insert(map::value_type(structcpid.projectname,structcpid)); - // CreditCheck(structcpid.cpid,false); - GetNextProject(false); - if (fDebug10) LogPrintf("GCMCPI %s",GlobalCPUMiningCPID.cpid); - if (fDebug10) LogPrintf("Finished getting first remote boinc project"); - return; - } + if (!GetArgument("boinckey", "").empty()) { + // TODO: implement a safer way to export researcher context that doesn't + // risk accidental exposure of internal CPID and email address. + LogPrintf("ERROR: boinckey is no longer supported."); + } try { diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 49ed174439..e7074ffe4a 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -87,7 +87,6 @@ double CoinToDouble(double surrogate); extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry); double LederstrumpfMagnitude2(double mag,int64_t locktime); bool IsCPIDValidv2(MiningCPID& mc, int height); -std::string RetrieveMd5(std::string s1); extern double GetNetworkAvgByProject(std::string projectname); void HarvestCPIDs(bool cleardata); @@ -1784,38 +1783,6 @@ UniValue gatherneuralhashes(const UniValue& params, bool fHelp) return res; } -UniValue genboinckey(const UniValue& params, bool fHelp) -{ - if (fHelp || params.size() != 0) - throw runtime_error( - "genboinckey\n" - "\n" - "Generates a boinc key\n"); - - UniValue res(UniValue::VOBJ); - - //Gridcoin - R Halford - Generate Boinc Mining Key - 2-6-2015 - GetNextProject(false); - std::string email = GetArgument("email", "NA"); - boost::to_lower(email); - GlobalCPUMiningCPID.email = email; - GlobalCPUMiningCPID.cpidv2 = ComputeCPIDv2(GlobalCPUMiningCPID.email, GlobalCPUMiningCPID.boincruntimepublickey, 0); - //Store the BPK in the aesskein, and the cpid in version - GlobalCPUMiningCPID.aesskein = email; //Good - GlobalCPUMiningCPID.lastblockhash = GlobalCPUMiningCPID.cpidhash; - - //block version not needed for keys for now - std::string sParam = SerializeBoincBlock(GlobalCPUMiningCPID,7); - std::string sBase = EncodeBase64(sParam); - - if (fDebug3) - LogPrintf("GenBoincKey: Utilizing email %s with %s for %s", GlobalCPUMiningCPID.email, GlobalCPUMiningCPID.boincruntimepublickey, sParam); - - res.pushKV("[Specify in config file without quotes] boinckey=", sBase); - - return res; -} - UniValue getlistof(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index c8a8edec5f..d82ad4ec5c 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -369,7 +369,6 @@ static const CRPCCommand vRPCCommands[] = { "exportstats1", &rpc_exportstats, cat_developer }, { "forcequorum", &forcequorum, cat_developer }, { "gatherneuralhashes", &gatherneuralhashes, cat_developer }, - { "genboinckey", &genboinckey, cat_developer }, { "getblockstats", &rpc_getblockstats, cat_developer }, { "getlistof", &getlistof, cat_developer }, { "getnextproject", &getnextproject, cat_developer }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 18c287cc8e..9c2a395194 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -189,7 +189,6 @@ extern UniValue debugnet(const UniValue& params, bool fHelp); extern UniValue dportally(const UniValue& params, bool fHelp); extern UniValue forcequorum(const UniValue& params, bool fHelp); extern UniValue gatherneuralhashes(const UniValue& params, bool fHelp); -extern UniValue genboinckey(const UniValue& params, bool fHelp); extern UniValue rpc_getblockstats(const UniValue& params, bool fHelp); extern UniValue getlistof(const UniValue& params, bool fHelp); extern UniValue getnextproject(const UniValue& params, bool fHelp); From b2a0459edad33e75a2c1d6b988faf84e2873baa3 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 6 May 2019 15:25:49 -0500 Subject: [PATCH 032/115] Clean up old CPID functions in favor of NN API --- src/Makefile.am | 2 - src/Makefile.test.include | 1 - src/contract/contract.cpp | 1 - src/contract/polls.cpp | 1 - src/cpid.cpp | 600 -------------------------------------- src/cpid.h | 71 ----- src/main.cpp | 212 +++----------- src/miner.cpp | 1 - src/net.cpp | 5 - src/rpcblockchain.cpp | 17 +- src/rpcdataacq.cpp | 1 - src/test/cpid_tests.cpp | 15 - src/wallet.cpp | 1 - 13 files changed, 41 insertions(+), 887 deletions(-) delete mode 100644 src/cpid.cpp delete mode 100644 src/cpid.h delete mode 100755 src/test/cpid_tests.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 9abc448421..e43a561a6b 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -75,7 +75,6 @@ GRIDCOIN_CORE_H = \ contract/polls.h \ contract/contract.h \ contract/superblock.h \ - cpid.h \ crypter.h \ db.h \ fwd.h \ @@ -136,7 +135,6 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ contract/polls.cpp \ contract/contract.cpp \ contract/superblock.cpp \ - cpid.cpp \ crypter.cpp \ db.cpp \ gridcoin.cpp \ diff --git a/src/Makefile.test.include b/src/Makefile.test.include index e9406f42ae..13546d7fac 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -34,7 +34,6 @@ GRIDCOIN_TESTS =\ test/beacon_tests.cpp \ test/bignum_tests.cpp \ test/block_tests.cpp \ - test/cpid_tests.cpp \ test/crypter_tests.cpp \ test/getarg_tests.cpp \ test/gridcoin_tests.cpp \ diff --git a/src/contract/contract.cpp b/src/contract/contract.cpp index 7a372370e0..4a1cb6ec9d 100644 --- a/src/contract/contract.cpp +++ b/src/contract/contract.cpp @@ -1,4 +1,3 @@ -#include "cpid.h" #include "init.h" #include "rpcclient.h" #include "rpcserver.h" diff --git a/src/contract/polls.cpp b/src/contract/polls.cpp index 7e201507e5..2cd60130db 100644 --- a/src/contract/polls.cpp +++ b/src/contract/polls.cpp @@ -7,7 +7,6 @@ #include "rpcclient.h" #include "rpcserver.h" #include "appcache.h" -#include "cpid.h" #include "init.h" // for pwalletMain #include "block.h" diff --git a/src/cpid.cpp b/src/cpid.cpp deleted file mode 100644 index 371c7bbb59..0000000000 --- a/src/cpid.cpp +++ /dev/null @@ -1,600 +0,0 @@ -#include "cpid.h" -#include "util.h" - -#include -#include -#include -#include - -#define S11 (0x9e5+1366-0xf34) -#define S12 (0x161b+3182-0x227d) -#define S13 (0x39b+3002-0xf44) -#define S14 (0xe94+6207-0x26bd) -#define S21 (0x4ef+2412-0xe56) -#define S22 (0x311+2131-0xb5b) -#define S23 (0x6cd+6218-0x1f09) -#define S24 (0x16+1307-0x51d) -#define S31 (0x13b1+3020-0x1f79) -#define S32 (0x10d4+714-0x1393) -#define S33 (0x1f32+1918-0x26a0) -#define S34 (0x514+6441-0x1e26) -#define S41 (0x2df+307-0x40c) -#define S42 (0x131b+4053-0x22e6) -#define S43 (0x817+1038-0xc16) -#define S44 (0x1021+2805-0x1b01) - - -inline CPID::uint4 CPID::F(uint4 x, uint4 y, uint4 z) -{ - return ((x & y) | (~x & z)); -} - -inline CPID::uint4 CPID::G(uint4 x, uint4 y, uint4 z) -{ - return ((x & z) | (y & ~z)); -} - -inline CPID::uint4 CPID::H(uint4 x, uint4 y, uint4 z) -{ - return (x ^ y ^ z); -} - -inline CPID::uint4 CPID::I(uint4 x, uint4 y, uint4 z) -{ - return y ^ (x | ~z); -} - -inline CPID::uint4 CPID::rotate_left(uint4 x, int n) -{ - return (x << n) | (x >> ((0x724 + 7488 - 0x2444) - n)); -} - -inline CPID::uint4 CPID::rotate_right(uint4 x, int n) -{ - return (x >> n) | (x << ((0xf51 + 544 - 0x1151) - n)); -} - -inline CPID::uint4 CPID::rotate_left8(int x, int n) -{ - return (x << n) | (x >> ((0x1673 + 891 - 0x19e6) - n)); -} - -inline CPID::uint4 CPID::rotate_right8(int x, int n) -{ - return (x >> n) | (x << ((0x12e9 + 2293 - 0x1bd6) - n)); -} - -inline void CPID::FF(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, - uint4 s, uint4 ac) -{ - a = rotate_left(a + F(b, c, d) + x + ac, s) + b; -} - -inline void CPID::GG(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, - uint4 s, uint4 ac) -{ - a = rotate_left(a + G(b, c, d) + x + ac, s) + b; -} - -inline void CPID::HH(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, - uint4 s, uint4 ac) -{ - a = rotate_left(a + H(b, c, d) + x + ac, s) + b; -} - -inline void CPID::II(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, - uint4 s, uint4 ac) -{ - a = rotate_left(a + I(b, c, d) + x + ac, s) + b; -} - -CPID::CPID() -{ - init(); -} - -CPID::CPID(std::string text) -{ - init(); - update(text.c_str(), text.length()); - finalize(); -} - -CPID::CPID(std::string text, int entropybit, uint256 hash_block) -{ - init(); - entropybit++; - update5(text, hash_block); - finalize(); -} - -template < typename T > std::string ByteToHex(T i) -{ - std::stringstream stream; - stream << std::setfill(((char) (0xbac + 70 - 0xbc2))) << std:: - setw((0x1344 + 4775 - 0x25e9)) << std::hex << i; - return stream.str(); -} - -std::string CPID::HashKey(std::string email1, std::string bpk1) -{ - boost::algorithm::to_lower(bpk1); - boost::algorithm::to_lower(email1); - boinc_hash_new = bpk1 + email1; - CPID c = CPID(boinc_hash_new); - std::string non_finalized = ""; - non_finalized = c.hexdigest(); - return non_finalized; -} - -int BitwiseCount(std:: string str, int pos) -{ - char ch; - if (pos < (int) str.length()) - { - ch = str.at(pos); - int asc = (int) ch; - if (asc > (0x87c + 6520 - 0x21c5) - && asc < (0x1597 + 4174 - 0x259e)) - asc = asc - (0x4c5 + 8720 - 0x26a6); - return asc; - } - return (0x8b0 + 1872 - 0xfff); -} - -std::string HashHex(uint256 blockhash) -{ - CPID c2 = CPID(blockhash.GetHex()); - std::string shash = c2.hexdigest(); - return shash; -} - -std::string ROR(std::string blockhash, int iPos, std::string hash) -{ - if (iPos <= (int) hash.length() - (0x1f5b + 1342 - 0x2498)) - { - int asc1 = (int) hash.at(iPos); - int rorcount = BitwiseCount(blockhash, iPos); - std::string hex = ByteToHex(asc1 + rorcount); - return hex; - } - return "\x30\x30"; -} - -std::string CPID::CPID_V2(std::string email1, std::string bpk1, - uint256 block_hash) -{ - std::string non_finalized = HashKey(email1, bpk1); - std::string digest = Update6(non_finalized, block_hash); - return digest; -} - -void CPID::init() -{ - finalized = false; - count[(0x88d + 1394 - 0xdff)] = (0x1fe5 + 1717 - 0x269a); - count[(0x373 + 6812 - 0x1e0e)] = (0x65b + 2790 - 0x1141); - state[(0xc88 + 3077 - 0x188d)] = 1732584193; - state[(0x1230 + 1876 - 0x1983)] = 4023233417; - state[(0xada + 3060 - 0x16cc)] = 2562383102; - state[(0x8d + 3707 - 0xf05)] = 271733878; -} - -void CPID::decode(uint4 output[], const uint1 input[], size_type len) -{ - for (unsigned int i = (0xbb + 8818 - 0x232d), j = - (0xcad + 2297 - 0x15a6); j < len; - i++, j += (0x150f + 1818 - 0x1c25)) - output[i] = - ((uint4) input[j]) | - (((uint4) input[j + (0x320 + 7218 - 0x1f51)]) << - (0x1c36 + 2528 - - 0x260e)) | (((uint4) input[j + - (0x20c3 + 1239 - - 0x2598)]) << (0x9d + 5272 - - 0x1525)) | - (((uint4) input[j + (0xbb7 + 2557 - 0x15b1)]) << - (0x131b + 3426 - 0x2065)); -} - -void CPID::encode(uint1 output[], const uint4 input[], size_type len) -{ - for (size_type i = (0x3e2 + 7679 - 0x21e1), j = - (0x23a4 + 674 - 0x2646); j < len; - i++, j += (0x23d3 + 36 - 0x23f3)) - { - output[j] = input[i] & (0xa45 + 3187 - 0x15b9); - output[j + (0x90a + 3950 - 0x1877)] = - (input[i] >> (0x201 + 7372 - 0x1ec5)) & (0x9bf + 6024 - - 0x2048); - output[j + (0x94 + 872 - 0x3fa)] = - (input[i] >> (0x396 + 7043 - 0x1f09)) & (0x561 + 8582 - - 0x25e8); - output[j + (0x1a86 + 2527 - 0x2462)] = - (input[i] >> (0xd14 + 4931 - 0x203f)) & (0x37b + 3944 - - 0x11e4); - } -} - -void CPID::transform(const uint1 block[blocksize]) -{ - uint4 a = state[(0x8a5 + 4443 - 0x1a00)], b = - state[(0x643 + 3050 - 0x122c)], c = - state[(0x280 + 7521 - 0x1fdf)], d = - state[(0x1de9 + 985 - 0x21bf)], x[(0x1784 + 2549 - 0x2169)]; - decode(x, block, blocksize); - FF(a, b, c, d, x[(0xd59 + 2856 - 0x1881)], S11, 3614090360); - FF(d, a, b, c, x[(0x4b9 + 4745 - 0x1741)], S12, 3905402710); - FF(c, d, a, b, x[(0x82a + 7856 - 0x26d8)], S13, 606105819); - FF(b, c, d, a, x[(0x9a1 + 574 - 0xbdc)], S14, 3250441966); - FF(a, b, c, d, x[(0xfeb + 4629 - 0x21fc)], S11, 4118548399); - FF(d, a, b, c, x[(0x1016 + 3805 - 0x1eee)], S12, 1200080426); - FF(c, d, a, b, x[(0xb8f + 2088 - 0x13b1)], S13, 2821735955); - FF(b, c, d, a, x[(0xbcc + 5992 - 0x232d)], S14, 4249261313); - FF(a, b, c, d, x[(0xd35 + 3872 - 0x1c4d)], S11, 1770035416); - FF(d, a, b, c, x[(0x1104 + 5535 - 0x269a)], S12, 2336552879); - FF(c, d, a, b, x[(0xd1b + 1447 - 0x12b8)], S13, 4294925233); - FF(b, c, d, a, x[(0xdfc + 289 - 0xf12)], S14, 2304563134); - FF(a, b, c, d, x[(0x1ed7 + 2070 - 0x26e1)], S11, 1804603682); - FF(d, a, b, c, x[(0x175d + 2428 - 0x20cc)], S12, 4254626195); - FF(c, d, a, b, x[(0xd9c + 2608 - 0x17be)], S13, 2792965006); - FF(b, c, d, a, x[(0xddd + 6185 - 0x25f7)], S14, 1236535329); - - GG(a, b, c, d, x[(0x1e0d + 484 - 0x1ff0)], S21, 4129170786); - GG(d, a, b, c, x[(0xa2 + 8809 - 0x2305)], S22, 3225465664); - GG(c, d, a, b, x[(0x1983 + 383 - 0x1af7)], S23, 643717713); - GG(b, c, d, a, x[(0xbe7 + 2585 - 0x1600)], S24, 3921069994); - GG(a, b, c, d, x[(0x1e91 + 161 - 0x1f2d)], S21, 3593408605); - GG(d, a, b, c, x[(0x45d + 7119 - 0x2022)], S22, 38016083); - GG(c, d, a, b, x[(0x60b + 5977 - 0x1d55)], S23, 3634488961); - GG(b, c, d, a, x[(0xeef + 2607 - 0x191a)], S24, 3889429448); - GG(a, b, c, d, x[(0xcb + 9332 - 0x2536)], S21, 568446438); - GG(d, a, b, c, x[(0x5cd + 1125 - 0xa24)], S22, 3275163606); - GG(c, d, a, b, x[(0x101 + 6897 - 0x1bef)], S23, 4107603335); - GG(b, c, d, a, x[(0x5e8 + 2294 - 0xed6)], S24, 1163531501); - GG(a, b, c, d, x[(0x10b8 + 3222 - 0x1d41)], S21, 2850285829); - GG(d, a, b, c, x[(0x903 + 1561 - 0xf1a)], S22, 4243563512); - GG(c, d, a, b, x[(0x880 + 2802 - 0x136b)], S23, 1735328473); - GG(b, c, d, a, x[(0xcb6 + 3479 - 0x1a41)], S24, 2368359562); - - HH(a, b, c, d, x[(0x1a5f + 1242 - 0x1f34)], S31, 4294588738); - HH(d, a, b, c, x[(0x3b9 + 11 - 0x3bc)], S32, 2272392833); - HH(c, d, a, b, x[(0x161a + 3175 - 0x2276)], S33, 1839030562); - HH(b, c, d, a, x[(0x134b + 2374 - 0x1c83)], S34, 4259657740); - HH(a, b, c, d, x[(0xe5b + 1402 - 0x13d4)], S31, 2763975236); - HH(d, a, b, c, x[(0x7aa + 6444 - 0x20d2)], S32, 1272893353); - HH(c, d, a, b, x[(0x9b0 + 2801 - 0x149a)], S33, 4139469664); - HH(b, c, d, a, x[(0x180 + 2489 - 0xb2f)], S34, 3200236656); - HH(a, b, c, d, x[(0x14d + 7675 - 0x1f3b)], S31, 681279174); - HH(d, a, b, c, x[(0xeaf + 5786 - 0x2549)], S32, 3936430074); - HH(c, d, a, b, x[(0x94d + 6302 - 0x21e8)], S33, 3572445317); - HH(b, c, d, a, x[(0x4e3 + 4075 - 0x14c8)], S34, 76029189); - HH(a, b, c, d, x[(0x183f + 1914 - 0x1fb0)], S31, 3654602809); - HH(d, a, b, c, x[(0x785 + 531 - 0x98c)], S32, 3873151461); - HH(c, d, a, b, x[(0x76 + 4452 - 0x11cb)], S33, 530742520); - HH(b, c, d, a, x[(0x60a + 7659 - 0x23f3)], S34, 3299628645); - - II(a, b, c, d, x[(0xdab + 1728 - 0x146b)], S41, 4096336452); - II(d, a, b, c, x[(0x8a7 + 5703 - 0x1ee7)], S42, 1126891415); - II(c, d, a, b, x[(0x2526 + 30 - 0x2536)], S43, 2878612391); - II(b, c, d, a, x[(0xd53 + 6032 - 0x24de)], S44, 4237533241); - II(a, b, c, d, x[(0x23 + 3964 - 0xf93)], S41, 1700485571); - II(d, a, b, c, x[(0x22f1 + 300 - 0x241a)], S42, 2399980690); - II(c, d, a, b, x[(0x7ad + 7010 - 0x2305)], S43, 4293915773); - II(b, c, d, a, x[(0x1afa + 728 - 0x1dd1)], S44, 2240044497); - II(a, b, c, d, x[(0x535 + 4538 - 0x16e7)], S41, 1873313359); - II(d, a, b, c, x[(0x1902 + 3148 - 0x253f)], S42, 4264355552); - II(c, d, a, b, x[(0x9ed + 599 - 0xc3e)], S43, 2734768916); - II(b, c, d, a, x[(0x1955 + 3023 - 0x2517)], S44, 1309151649); - II(a, b, c, d, x[(0xa53 + 2102 - 0x1285)], S41, 4149444226); - II(d, a, b, c, x[(0x993 + 4512 - 0x1b28)], S42, 3174756917); - II(c, d, a, b, x[(0x1621 + 413 - 0x17bc)], S43, 718787259); - II(b, c, d, a, x[(0xf32 + 3228 - 0x1bc5)], S44, 3951481745); - state[(0x13e0 + 4114 - 0x23f2)] += a; - state[(0x864 + 5609 - 0x1e4c)] += b; - state[(0x1bb + 1236 - 0x68d)] += c; - state[(0x92f + 6920 - 0x2434)] += d; - memset(x, (0x123d + 2605 - 0x1c6a), sizeof x); -} - -void CPID::update(const unsigned char input[], size_type length) -{ - size_type index = - count[(0xbaf + 535 - 0xdc6)] / (0x1609 + 3405 - - 0x234e) % blocksize; - if ((count[(0x12f6 + 3141 - 0x1f3b)] += - (length << (0x1894 + 3130 - 0x24cb))) < - (length << (0x902 + 5767 - 0x1f86))) - count[(0xed4 + 4990 - 0x2251)]++; - count[(0x1410 + 3546 - 0x21e9)] += - (length >> (0x1325 + 1183 - 0x17a7)); - size_type firstpart = (0xcf2 + 5399 - 0x21c9) - index; - size_type i; - if (length >= firstpart) - { - memcpy(&buffer[index], input, firstpart); - transform(buffer); - for (i = firstpart; i + blocksize <= length; i += blocksize) - transform(&input[i]); - index = (0x786 + 6933 - 0x229b); - } - else - i = (0x3c9 + 6892 - 0x1eb5); - memcpy(&buffer[index], &input[i], length - i); -} - -void CPID::update(const char input[], size_type length) -{ - update((const unsigned char *) input, length); -} - -int HexToByte(std::string hex) -{ - int x = (0x4a + 4863 - 0x1349); - std::stringstream ss; - ss << std::hex << hex; - ss >> x; - return x; -} - -int ROL(std::string blockhash, int iPos, std::string hash, int hexpos) -{ - std::string cpid3 = ""; - if (iPos <= (int) hash.length() - (0x1c97 + 497 - 0x1e87)) - { - std::string hex = hash.substr(iPos, (0xa5d + 6424 - 0x2373)); - int rorcount = BitwiseCount(blockhash, hexpos); - int b = HexToByte(hex) - rorcount; - if (b >= (0x5b2 + 1768 - 0xc9a)) - { - return b; - } - } - return HexToByte("\x30\x30"); -} - -std::string CPID::Update6(std::string non_finalized, uint256 block_hash) -{ - std::string shash = HashHex(block_hash); - for (int i = (0x1258 + 3278 - 0x1f26); - i < (int) boinc_hash_new.length(); i++) - { - non_finalized += ROR(shash, i, boinc_hash_new); - } - return non_finalized; -} - -std::string Update7(std::string longcpid, uint256 hash_block) -{ - std::string shash = HashHex(hash_block); - int hexpos = (0x632 + 1664 - 0xcb2); - std::string non_finalized = ""; - for (int i1 = (0xbd + 8943 - 0x23ac); i1 < (int) longcpid.length(); - i1 = i1 + (0x1ac0 + 2812 - 0x25ba)) - { - non_finalized += ROL(shash, i1, longcpid, hexpos); - hexpos++; - } - CPID c7 = CPID(non_finalized); - std::string hexstring = c7.hexdigest(); - return hexstring; -} - -void CPID::update5(std::string longcpid, uint256 hash_block) -{ - std::string shash = HashHex(hash_block); - int hexpos = (0x43b + 6491 - 0x1d96); - unsigned char *input = - new unsigned char[(longcpid.length() / (0x534 + 8432 - 0x2622)) + - (0xa19 + 5289 - 0x1ec1)]; - for (int i1 = (0x1348 + 1245 - 0x1825); i1 < (int) longcpid.length(); - i1 = i1 + (0x478 + 5707 - 0x1ac1)) - { - input[hexpos] = ROL(shash, i1, longcpid, hexpos); - hexpos++; - } - input[longcpid.length() / (0x7ac + 7506 - 0x24fc) + - (0xba + 3605 - 0xece)] = (0x3c3 + 5976 - 0x1b1b); - size_type length = longcpid.length() / (0x1186 + 4729 - 0x23fd); - size_type index = - count[(0xf02 + 2743 - 0x19b9)] / (0x174 + 6416 - - 0x1a7c) % blocksize; - if ((count[(0x1eb3 + 1439 - 0x2452)] += - (length << (0x89c + 7639 - 0x2670))) < - (length << (0x1f07 + 935 - 0x22ab))) - count[(0x488 + 7340 - 0x2133)]++; - count[(0xb5 + 5597 - 0x1691)] += (length >> (0x374 + 3554 - 0x1139)); - size_type firstpart = (0x195 + 7412 - 0x1e49) - index; - size_type i; - if (length >= firstpart) - { - memcpy(&buffer[index], input, firstpart); - transform(buffer); - for (i = firstpart; i + blocksize <= length; i += blocksize) - transform(&input[i]); - index = (0x144f + 4713 - 0x26b8); - } - else - i = (0x1053 + 3145 - 0x1c9c); - memcpy(&buffer[index], &input[i], length - i); -} - -CPID & CPID::finalize() -{ - static unsigned char padding[(0xbf3 + 5821 - 0x2270)] = { - (0x14b4 + 2295 - 0x1d2b), (0xd2 + 9568 - 0x2632), - (0xa60 + 6685 - 0x247d), (0x1749 + 2154 - 0x1fb3), - (0xb80 + 3428 - 0x18e4), (0x9d + 9832 - 0x2705), - (0x6d5 + 1494 - 0xcab), (0x714 + 3 - 0x717), - (0x13bf + 4470 - 0x2535), (0x1a98 + 1182 - 0x1f36), - (0x1398 + 3220 - 0x202c), - (0x50f + 1352 - 0xa57), (0x97c + 2239 - 0x123b), - (0xa12 + 2843 - 0x152d), (0x934 + 3404 - 0x1680), - (0xb50 + 4854 - 0x1e46), (0x1166 + 928 - 0x1506), - (0x1def + 2302 - 0x26ed), (0xe84 + 1817 - 0x159d), - (0x205 + 8670 - 0x23e3), (0x1311 + 2117 - 0x1b56), - (0x23fa + 91 - 0x2455), (0xec0 + 2817 - 0x19c1), - (0x12b6 + 5050 - 0x2670), (0x141c + 2938 - 0x1f96), - (0x1c2b + 389 - 0x1db0), - (0x8b6 + 3730 - 0x1748), (0x1274 + 509 - 0x1471), - (0xc82 + 2063 - 0x1491), (0x15e6 + 916 - 0x197a), - (0x9b7 + 6733 - 0x2404), (0x1463 + 4638 - 0x2681), - (0x48c + 4237 - 0x1519), (0x6d3 + 8197 - 0x26d8), - (0x1531 + 3021 - 0x20fe), (0x1723 + 1018 - 0x1b1d), - (0xccb + 5869 - 0x23b8), - (0x65c + 1335 - 0xb93), (0x22bd + 52 - 0x22f1), - (0x1592 + 1786 - 0x1c8c), (0x7ff + 7337 - 0x24a8), - (0x825 + 1675 - 0xeb0), (0x1ed + 210 - 0x2bf), - (0x7ea + 398 - 0x978), (0x337 + 1617 - 0x988), - (0x84c + 7067 - 0x23e7), (0x5a1 + 7001 - 0x20fa), - (0x22f3 + 735 - 0x25d2), (0x1819 + 914 - 0x1bab), - (0x16b + 2277 - 0xa50), (0x9e3 + 731 - 0xcbe), - (0x298 + 6656 - 0x1c98), (0xd89 + 2525 - 0x1766), - (0xe8d + 3380 - 0x1bc1), (0x2346 + 220 - 0x2422), - (0x111 + 6611 - 0x1ae4), (0x37 + 8793 - 0x2290), - (0xa62 + 5983 - 0x21c1), (0x1508 + 1558 - 0x1b1e), - (0x6ba + 6988 - 0x2206), (0x76a + 2299 - 0x1065), - (0x977 + 4133 - 0x199c), (0xca + 8498 - 0x21fc), - (0x1c0a + 802 - 0x1f2c) -}; - if (!finalized) - { - unsigned char bits[(0x1bfb + 232 - 0x1cdb)]; - encode(bits, count, (0xba5 + 5616 - 0x218d)); - size_type index = - count[(0x176d + 89 - 0x17c6)] / (0x8c1 + 7152 - - 0x24a9) % (0xa16 + 4066 - - 0x19b8); - size_type padLen = - (index < - (0x1da + 3012 - 0xd66)) ? ((0x1b22 + 1127 - 0x1f51) - - index) : ((0x1b2a + 2082 - - 0x22d4) - index); - update(padding, padLen); - update(bits, (0xdb2 + 2231 - 0x1661)); - encode(digest, state, (0x2c1 + 8014 - 0x21ff)); - memset(buffer, (0xa7d + 2489 - 0x1436), sizeof buffer); - memset(count, (0x101 + 8152 - 0x20d9), sizeof count); - finalized = true; - } - return *this; -} - -std::string CPID::hexdigest() const -{ - if (!finalized) - { - return - "\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30"; - } - char buf[(0x1605 + 2905 - 0x213d)]; - for (int i = (0xba6 + 2047 - 0x13a5); i < (0x96b + 2692 - 0x13df); i++) - sprintf(buf + i * (0x6b6 + 3760 - 0x1564), "\x25\x30\x32\x78", - digest[i]); - buf[(0x1064 + 790 - 0x135a)] = (0xaa7 + 5325 - 0x1f74); - return std::string(buf); -} - -template < typename T > std::string LongToHex(T i) -{ - std::stringstream stream; - stream << "\x30\x78" << std:: - setfill(((char) (0x225 + 6873 - 0x1cce))) << std::setw(sizeof(T) * - (0x27d + - 3962 - - 0x11f5)) << - std::hex << i; - return stream.str(); -} - -std::string CPID::boincdigest(std::string email, std::string bpk, - uint256 hash_block) -{ - if (!finalized) - return ""; - char buf[(0x151 + 8463 - 0x2250)]; - for (int i = (0x95f + 3677 - 0x17bc); i < (0x13f8 + 3123 - 0x201b); - i++) - { - sprintf(buf + i * (0x639 + 7515 - 0x2392), "\x25\x30\x32\x78", - digest[i]); - } - std::string non_finalized(buf); - std::string shash = HashHex(hash_block); - std::string debug = ""; - boost::algorithm::to_lower(bpk); - boost::algorithm::to_lower(email); - std::string cpid_non = bpk + email; - for (int i = (0x450 + 3069 - 0x104d); i < (int) cpid_non.length(); i++) - { - non_finalized += ROR(shash, i, cpid_non); - } - return non_finalized; -} - -bool CompareCPID(std::string usercpid, std::string longcpid, - uint256 blockhash) -{ - if (longcpid.length() < (0x1287 + 3377 - 0x1f96)) - return false; - std::string cpid1 = - longcpid.substr((0x14eb + 3914 - 0x2435), (0x652 + 2202 - 0xecc)); - std::string cpid2 = - longcpid.substr((0x315 + 271 - 0x404), - longcpid.length() - (0x477 + 4848 - 0x1748)); - std::string shash = HashHex(blockhash); - std::string shortcpid = Update7(cpid2, blockhash); - if (shortcpid == "") - return false; - if (fDebug10) - printf - ("\x73\x68\x6f\x72\x74\x63\x70\x69\x64\x20\x25\x73\x2c\x20\x63\x70\x69\x64\x31\x20\x25\x73\x2c\x20\x75\x73\x65\x72\x63\x70\x69\x64\x20\x25\x73\x20" - "\r\n", shortcpid.c_str(), cpid1.c_str(), usercpid.c_str()); - if (shortcpid == cpid1 && cpid1 == usercpid && shortcpid == usercpid) - return true; - if (fDebug10) - printf - ("\x73\x68\x6f\x72\x74\x63\x70\x69\x64\x20\x25\x73\x2c\x20\x63\x70\x69\x64\x31\x20\x25\x73\x2c\x20\x75\x73\x65\x72\x63\x70\x69\x64\x20\x25\x73\x20" - "\r\n", shortcpid.c_str(), cpid1.c_str(), usercpid.c_str()); - return false; -} - -std::ostream & operator<<(std::ostream & out, CPID CPID) -{ - return out << CPID.hexdigest(); -} - -bool CPID_IsCPIDValid(std::string cpid1, std::string longcpid, - uint256 blockhash) -{ - if (cpid1.empty()) - return false; - if (longcpid.empty()) - return false; - if (longcpid.length() < (0x21f0 + 603 - 0x242b)) - return false; - if (cpid1.length() < (0x14 + 9069 - 0x237c)) - return false; - if (cpid1 == "\x49\x4e\x56\x45\x53\x54\x4f\x52" - || longcpid == "\x49\x4e\x56\x45\x53\x54\x4f\x52") - return true; - if (cpid1.length() == (0x80d + 6641 - 0x21fe) - || longcpid.length() == (0x1054 + 4502 - 0x21ea)) - { - printf - ("\x4e\x55\x4c\x4c\x20\x43\x70\x69\x64\x20\x72\x65\x63\x65\x69\x76\x65\x64" - "\r\n"); - return false; - } - if (longcpid.length() < (0x39f + 6435 - 0x1cbd)) - return false; - bool compared = CompareCPID(cpid1, longcpid, blockhash); - return compared; -} - -std::string ComputeCPIDv2(const std::string & email, - const std::string & bpk, - const uint256 & blockhash) -{ - return CPID().CPID_V2(email, bpk, blockhash); -} diff --git a/src/cpid.h b/src/cpid.h deleted file mode 100644 index b7058e72ee..0000000000 --- a/src/cpid.h +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once - -#include "uint256.h" - -#include -#include -#include - -class CPID -{ -public: - typedef unsigned int size_type; - CPID(); - CPID(std::string text); - CPID(std::string text, int entropybit, uint256 block_hash); - void update(const unsigned char *buf, size_type length); - void update(const char *buf, size_type length); - void update5(std::string inp, uint256 hash_block); - std::string CPID_V2(std::string email, std::string bpk, - uint256 block_hash); - CPID & finalize(); - std::string hexdigest() const; - std::string boincdigest(std::string email, std::string bpk, - uint256 hash_block); - friend std::ostream & operator<<(std::ostream &, CPID cpid); -private: - void init(); - typedef unsigned char uint1; - typedef unsigned int uint4; - enum { blocksize = (0x8f9 + 7419 - 0x25b4) }; - void transform(const uint1 block[blocksize]); - static void decode(uint4 output[], const uint1 input[], size_type len); - static void encode(uint1 output[], const uint4 input[], size_type len); - std::string HashKey(std::string email1, std::string bpk1); - std::string Update6(std::string non_finalized, uint256 block_hash); - std::string boinc_public_key; - std::string email_hash; - std::string merged_hash_old; - std::string boinc_hash_new; - uint256 blockhash_old; - bool finalized; - uint1 buffer[blocksize]; - uint4 count[(0x3ab + 2678 - 0xe1f)]; - uint4 state[(0x596 + 8421 - 0x2677)]; - uint1 digest[(0x665 + 2354 - 0xf87)]; - - static inline uint4 F(uint4 x, uint4 y, uint4 z); - static inline uint4 G(uint4 x, uint4 y, uint4 z); - static inline uint4 H(uint4 x, uint4 y, uint4 z); - static inline uint4 I(uint4 x, uint4 y, uint4 z); - static inline uint4 rotate_left(uint4 x, int n); - static inline uint4 rotate_right(uint4 x, int n); - static inline uint4 rotate_left8(int x, int n); - static inline uint4 rotate_right8(int x, int n); - static inline void - FF(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac); - static inline void - GG(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac); - static inline void - HH(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac); - static inline void - II(uint4 & a, uint4 b, uint4 c, uint4 d, uint4 x, uint4 s, uint4 ac); -}; - -std::string cpid(const std::string str); -bool CPID_IsCPIDValid(std::string cpid, std::string longcpid, - uint256 blockhash); - -std::string ComputeCPIDv2(const std::string & email, - const std::string & bpk, - const uint256 & blockhash); diff --git a/src/main.cpp b/src/main.cpp index dd2f674f8c..78765c051b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,12 +15,12 @@ #include "block.h" #include "scrypt.h" #include "global_objects_noui.hpp" -#include "cpid.h" #include "rpcserver.h" #include "rpcclient.h" #include "boinc.h" #include "beacon.h" #include "miner.h" +#include "neuralnet/cpid.h" #include "neuralnet/neuralnet.h" #include "backup.h" #include "appcache.h" @@ -64,7 +64,6 @@ std::string ExtractValue(std::string data, std::string delimiter, int pos); UniValue MagnitudeReport(std::string cpid); void RemoveCPIDBlockHash(const std::string& cpid, const CBlockIndex* pindex); void ZeroOutResearcherTotals(StructCPID& stCpid); -bool CPIDAcidTest2(std::string bpk, std::string externalcpid); extern bool BlockNeedsChecked(int64_t BlockTime); int64_t GetEarliestWalletTransaction(); extern void IncrementVersionCount(const std::string& Version); @@ -113,8 +112,6 @@ int64_t nBootup = 0; int64_t nLastGRCtallied = 0; int64_t nLastCleaned = 0; -extern bool IsCPIDValidv3(std::string cpidv2, bool allow_investor); - double GetLastPaymentTimeByCPID(std::string cpid); extern double CoinToDouble(double surrogate); int64_t GetRSAWeightByCPID(std::string cpid); @@ -204,7 +201,6 @@ extern void GetGlobalStatus(); bool PollIsActive(const std::string& poll_contract); double GetNetworkAvgByProject(std::string projectname); -extern bool IsCPIDValid_Retired(std::string cpid, std::string ENCboincpubkey); extern bool IsCPIDValidv2(MiningCPID& mc, int height); extern std::string getfilecontents(std::string filename); extern bool LessVerbose(int iMax1000); @@ -832,14 +828,8 @@ MiningCPID GetNextProject(bool bForce) if (true) { GlobalCPUMiningCPID.enccpid = structcpid.boincpublickey; - bool checkcpid = IsCPIDValid_Retired(structcpid.cpid,GlobalCPUMiningCPID.enccpid); - if (!checkcpid) - { - LogPrintf("CPID invalid %s 1. ",structcpid.cpid); - continue; - } - if (checkcpid) + if (true) { GlobalCPUMiningCPID.email = email; @@ -858,8 +848,7 @@ MiningCPID GetNextProject(bool bForce) GlobalCPUMiningCPID.boincruntimepublickey = structcpid.cpidhash; if(fDebug) LogPrintf("GNP: Setting bpk to %s",structcpid.cpidhash); - uint256 pbh = 1; - GlobalCPUMiningCPID.cpidv2 = ComputeCPIDv2(GlobalCPUMiningCPID.email,GlobalCPUMiningCPID.boincruntimepublickey, pbh); + GlobalCPUMiningCPID.cpidv2 = structcpid.cpid; GlobalCPUMiningCPID.lastblockhash = "0"; // Sign the block GlobalCPUMiningCPID.BoincPublicKey = GetBeaconPublicKey(structcpid.cpid, false); @@ -4012,45 +4001,16 @@ bool CBlock::CheckBlock(std::string sCaller, int height1, int64_t Mint, bool fCh } } - if (IsResearcher(bb.cpid) && height1 > nGrandfather && BlockNeedsChecked(nTime)) + if (!fLoadingIndex && IsResearcher(bb.cpid) && height1 > nGrandfather && BlockNeedsChecked(nTime)) { - if (bb.projectname.empty() && !IsResearchAgeEnabled(height1)) - return DoS(1,error("CheckBlock::PoR Project Name invalid")); - - if (!fLoadingIndex) + // Full "v3" signature check is performed in ConnectBlock + if (bb.lastblockhash.size() != 64 || bb.BoincSignature.size() < 16 + || bb.BoincSignature.find(' ') != std::string::npos) { - bool cpidresult = false; - int cpidV2CutOverHeight = fTestNet ? 0 : 97000; - int cpidV3CutOverHeight = fTestNet ? 196300 : 725000; - if (height1 < cpidV2CutOverHeight) - { - cpidresult = IsCPIDValid_Retired(bb.cpid,bb.enccpid); - } - else if (height1 <= cpidV3CutOverHeight) - { - cpidresult = CPID_IsCPIDValid(bb.cpid, bb.cpidv2, (uint256)bb.lastblockhash); - } - else - { - - cpidresult = (bb.lastblockhash.size()==64) - && (bb.BoincSignature.size()>=16) - && (bb.BoincSignature.find(' ')==std::string::npos); - - /* This is not used anywhere, so let it be. - cpidresult = cpidresult - && (bb.BoincPublicKey.size()==130) - && (bb.BoincPublicKey.find(' ')==std::string::npos); - */ - - /* full "v3" signature check is performed in ConnectBlock */ - } - - if(!cpidresult) - return DoS(20, error( - "Bad CPID or Block Signature : height %i, CPID %s, cpidv2 %s, LBH %s, Bad Hashboinc [%s]", - height1, bb.cpid.c_str(), bb.cpidv2.c_str(), - bb.lastblockhash.c_str(), vtx[0].hashBoinc.c_str())); + return DoS(20, error( + "Bad CPID or Block Signature : height %i, CPID %s, cpidv2 %s, LBH %s, Bad Hashboinc [%s]", + height1, bb.cpid.c_str(), bb.cpidv2.c_str(), + bb.lastblockhash.c_str(), vtx[0].hashBoinc.c_str())); } } @@ -5070,16 +5030,6 @@ std::string getfilecontents(std::string filename) return out.str(); } -bool IsCPIDValidv3(std::string cpidv2, bool allow_investor) -{ - // Used for checking the local cpid - bool result=false; - if (allow_investor) if (cpidv2 == "INVESTOR" || cpidv2=="investor") return true; - if (cpidv2.length() < 34) return false; - result = CPID_IsCPIDValid(cpidv2.substr(0,32),cpidv2,0); - return result; -} - std::set GetAlternativeBeaconKeys(const std::string& cpid) { int64_t iMaxSeconds = 60 * 24 * 30 * 6 * 60; @@ -5107,99 +5057,34 @@ bool IsCPIDValidv2(MiningCPID& mc, int height) { //09-25-2016: Transition to CPID Keypairs. if (height < nGrandfather) return true; - bool result = false; - int cpidV2CutOverHeight = fTestNet ? 0 : 97000; - int cpidV3CutOverHeight = fTestNet ? 196300 : 725000; - if (height < cpidV2CutOverHeight) - { - result = IsCPIDValid_Retired(mc.cpid,mc.enccpid); - } - else if (height >= cpidV2CutOverHeight && height <= cpidV3CutOverHeight) - { - if (!IsResearcher(mc.cpid)) return true; - result = CPID_IsCPIDValid(mc.cpid, mc.cpidv2, (uint256)mc.lastblockhash); - } - else if (height >= cpidV3CutOverHeight) - { - if (mc.cpid.empty()) return error("IsCPIDValidv2(): cpid empty"); - if (!IsResearcher(mc.cpid)) return true; /* is investor? */ + if (mc.cpid.empty()) return error("IsCPIDValidv2(): cpid empty"); + if (!IsResearcher(mc.cpid)) return true; /* is investor? */ - const std::string sBPK_n = GetBeaconPublicKey(mc.cpid, false); - bool kmval = sBPK_n == mc.BoincPublicKey; - const bool scval_n = CheckMessageSignature("R","cpid", mc.cpid + mc.lastblockhash, mc.BoincSignature, sBPK_n); + const std::string sBPK_n = GetBeaconPublicKey(mc.cpid, false); + bool kmval = sBPK_n == mc.BoincPublicKey; + bool result = CheckMessageSignature("R","cpid", mc.cpid + mc.lastblockhash, mc.BoincSignature, sBPK_n); - result= scval_n; - if(!scval_n) + if (!result) + { + for (const std::string& key_alt : GetAlternativeBeaconKeys(mc.cpid)) { - for(const std::string& key_alt : GetAlternativeBeaconKeys(mc.cpid)) - { - const bool scval_alt = CheckMessageSignature("R","cpid", mc.cpid + mc.lastblockhash, mc.BoincSignature, key_alt); - kmval = key_alt == mc.BoincPublicKey; - if(scval_alt) - { - LogPrintf("WARNING: IsCPIDValidv2: good signature with alternative key"); - result= true; - } + const bool scval_alt = CheckMessageSignature("R","cpid", mc.cpid + mc.lastblockhash, mc.BoincSignature, key_alt); + kmval = key_alt == mc.BoincPublicKey; + + if (scval_alt) { + LogPrintf("WARNING: IsCPIDValidv2: good signature with alternative key"); + result = true; } } - - if( !kmval ) - LogPrintf("WARNING: IsCPIDValidv2: block key mismatch"); - } - return result; -} - - -bool IsLocalCPIDValid(StructCPID& structcpid) -{ - - bool new_result = IsCPIDValidv3(structcpid.cpidv2,true); - return new_result; - -} - - - -bool IsCPIDValid_Retired(std::string cpid, std::string ENCboincpubkey) -{ - - try - { - if(cpid=="" || cpid.length() < 5) - { - LogPrintf("CPID length empty."); - return false; - } - if (!IsResearcher(cpid)) return true; - if (ENCboincpubkey == "" || ENCboincpubkey.length() < 5) - { - if (fDebug10) LogPrintf("ENCBpk length empty."); - return false; - } - std::string bpk = AdvancedDecrypt(ENCboincpubkey); - std::string bpmd5 = RetrieveMd5(bpk); - if (bpmd5==cpid) return true; - if (fDebug10) LogPrintf("Md5<>cpid, md5 %s cpid %s root bpk %s",bpmd5, cpid, bpk); - - return false; - } - catch (std::exception &e) - { - LogPrintf("Error while resolving CPID"); - return false; + if (!kmval) { + LogPrintf("WARNING: IsCPIDValidv2: block key mismatch"); } - catch(...) - { - LogPrintf("Error while Resolving CPID[2]."); - return false; - } - return false; + return result; } - double GetTotalOwedAmount(std::string cpid) { StructCPID& o = GetInitializedStructCPID2(cpid,mvMagnitudes); @@ -7304,23 +7189,6 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) return surrogate; } - -void InitializeProjectStruct(StructCPID& project) -{ - std::string email = GetArgument("email", "NA"); - boost::to_lower(email); - - std::string cpid_non = project.cpidhash+email; - project.cpid = CPID(cpid_non).hexdigest(); - std::string ENCbpk = AdvancedCrypt(cpid_non); - project.boincpublickey = ENCbpk; - project.cpidv2 = ComputeCPIDv2(email, project.cpidhash, 0); - //Local CPID with struct - //Must contain cpidv2, cpid, boincpublickey - project.Iscpidvalid = IsLocalCPIDValid(project); - if (fDebug10) LogPrintf("Memorizing local project %s, CPID Valid: %s; ",project.projectname, YesNo(project.Iscpidvalid)); -} - std::string LowerUnderscore(std::string data) { boost::to_lower(data); @@ -7392,6 +7260,7 @@ void HarvestCPIDs(bool cleardata) int64_t nStart = GetTimeMillis(); if (cpidhash.length() > 5 && proj.length() > 3) { + NN::MiningId mining_id = NN::MiningId::Parse(externalcpid); std::string cpid_non = cpidhash+email; to_lower(cpid_non); StructCPID& structcpid = GetInitializedStructCPID2(proj,mvCPIDs); @@ -7400,7 +7269,11 @@ void HarvestCPIDs(bool cleardata) structcpid.projectname = proj; boost::to_lower(team); structcpid.team = team; - InitializeProjectStruct(structcpid); + structcpid.cpid = externalcpid; + structcpid.boincpublickey = AdvancedCrypt(cpid_non); + structcpid.cpidv2 = externalcpid; + structcpid.Iscpidvalid = mining_id.Which() == NN::MiningId::Kind::CPID; + int64_t elapsed = GetTimeMillis()-nStart; if (fDebug3) LogPrintf("Enumerating boinc local project %s cpid %s valid %s, elapsed %" PRId64, structcpid.projectname, structcpid.cpid, YesNo(structcpid.Iscpidvalid), elapsed); @@ -7438,16 +7311,12 @@ void HarvestCPIDs(bool cleardata) structcpid.Iscpidvalid = false; structcpid.errors = "Team invalid"; } - bool bTestExternal = true; - bool bTestInternal = true; - if (!externalcpid.empty()) + if (const NN::CpidOption cpid = mining_id.TryCpid()) { LogPrintf("External CPID not empty %s", externalcpid); - bTestExternal = CPIDAcidTest2(cpidhash,externalcpid); - bTestInternal = CPIDAcidTest2(cpidhash,structcpid.cpid); - if (bTestExternal) + if ((*cpid).Matches(cpidhash, email)) { structcpid.cpid = externalcpid; LogPrintf(" Setting CPID to %s ",structcpid.cpid); @@ -7455,15 +7324,12 @@ void HarvestCPIDs(bool cleardata) else { LogPrintf("External test failed."); - } - - if (!bTestExternal && !bTestInternal) - { structcpid.Iscpidvalid = false; - structcpid.errors = "CPID corrupted Internal: %s, External: %s" + structcpid.cpid + "," + externalcpid.c_str(); - LogPrintf("CPID corrupted Internal: %s, External: %s", structcpid.cpid, externalcpid); + structcpid.errors = "CPID corrupted Internal: %s, External: %s" + cpidhash + "," + externalcpid.c_str(); + LogPrintf("CPID corrupted Internal: %s, External: %s", cpidhash, externalcpid); } + mvCPIDs[proj] = structcpid; } diff --git a/src/miner.cpp b/src/miner.cpp index f8469f5c7c..9f4ea7274e 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -7,7 +7,6 @@ #include "txdb.h" #include "miner.h" #include "kernel.h" -#include "cpid.h" #include "main.h" #include "appcache.h" #include "neuralnet/neuralnet.h" diff --git a/src/net.cpp b/src/net.cpp index e891a0d927..680b505fe9 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -34,15 +34,10 @@ #endif using namespace std; -std::string DefaultWalletAddress(); std::string NodeAddress(CNode* pfrom); - extern std::string GetCommandNonce(std::string command); -bool IsCPIDValidv3(std::string cpidv2, bool allow_investor); extern int nMaxConnections; -std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); - int MAX_OUTBOUND_CONNECTIONS = 8; void ThreadMessageHandler2(void* parg); diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index e7074ffe4a..72a21ece0d 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -6,12 +6,12 @@ #include "main.h" #include "rpcserver.h" #include "rpcprotocol.h" -#include "cpid.h" #include "kernel.h" #include "init.h" // for pwalletMain #include "block.h" #include "txdb.h" #include "beacon.h" +#include "neuralnet/cpid.h" #include "neuralnet/neuralnet.h" #include "backup.h" #include "appcache.h" @@ -58,7 +58,6 @@ extern bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, s double Round(double d, int place); extern double GetSuperblockAvgMag(std::string data,double& out_beacon_count,double& out_participant_count,double& out_average, bool bIgnoreBeacons,int nHeight); -extern bool CPIDAcidTest2(std::string bpk, std::string externalcpid); bool AsyncNeuralRequest(std::string command_name,std::string cpid,int NodeLimit); bool FullSyncWithDPORNodes(); @@ -702,16 +701,6 @@ bool TallyMagnitudesInSuperblock() } } -bool CPIDAcidTest2(std::string bpk, std::string externalcpid) -{ - uint256 hashRand = GetRandHash(); - std::string email = GetArgument("email", "NA"); - boost::to_lower(email); - std::string cpidv2 = ComputeCPIDv2(email, bpk, hashRand); - std::string cpidv1 = cpidv2.substr(0,32); - return (externalcpid==cpidv1); -} - bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::string &sError, std::string &sMessage) { sOutPrivKey = "BUG! deprecated field used"; @@ -746,10 +735,8 @@ bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::str std::string email = GetArgument("email", "NA"); boost::to_lower(email); GlobalCPUMiningCPID.email=email; - GlobalCPUMiningCPID.cpidv2 = ComputeCPIDv2(GlobalCPUMiningCPID.email, GlobalCPUMiningCPID.boincruntimepublickey, hashRand); - bool IsCPIDValid2 = CPID_IsCPIDValid(GlobalCPUMiningCPID.cpid,GlobalCPUMiningCPID.cpidv2, hashRand); - if (!IsCPIDValid2) + if (!NN::Cpid::Parse(GlobalCPUMiningCPID.cpid).Matches(GlobalCPUMiningCPID.boincruntimepublickey, email)) { sError="Invalid CPID"; return false; diff --git a/src/rpcdataacq.cpp b/src/rpcdataacq.cpp index bb81baf04f..8a3950cf57 100644 --- a/src/rpcdataacq.cpp +++ b/src/rpcdataacq.cpp @@ -6,7 +6,6 @@ #include "main.h" #include "rpcserver.h" -#include "cpid.h" #include "kernel.h" #include "block.h" #include "txdb.h" diff --git a/src/test/cpid_tests.cpp b/src/test/cpid_tests.cpp deleted file mode 100755 index bd22845845..0000000000 --- a/src/test/cpid_tests.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "cpid.h" - -#include - -BOOST_AUTO_TEST_SUITE(cpid_tests); - -BOOST_AUTO_TEST_CASE(cpid_VerifyComputeCPIDv2) -{ - uint256 blockhash = 1; - BOOST_CHECK_EQUAL( - ComputeCPIDv2("test@unittest.com", "abcdefghijklmno", blockhash), - "4078bd252856710b95c4f31377bb1ba86bc3666ac7676a706e736ece7176d4756a7b76417ad36cd97a6976d78fc5d0d2"); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/src/wallet.cpp b/src/wallet.cpp index 63a912d6f4..8ed55333e3 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -13,7 +13,6 @@ #include "coincontrol.h" #include #include -#include "cpid.h" #include "block.h" #include "rpcserver.h" #include "rpcclient.h" From 5469bc8fddb6fe6c9ead6eb34978ddf4a372847f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 8 Jun 2019 17:01:01 -0400 Subject: [PATCH 033/115] Add support for explorer mode This adds support for the -explorer flag, which changes the behavior of the scraper to hold files for a longer period of time and also download team and host files. The publishing of manifests is not affected. This is the initial implementation of the explorer flag, team and host file downloading and retention. --- src/init.cpp | 1 + src/neuralnet/neuralnet.cpp | 10 +- src/scraper/scraper.cpp | 488 ++++++++++++++++++++++++++++-------- src/scraper/scraper.h | 5 + 4 files changed, 390 insertions(+), 114 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 4272a35ce6..d238051d0e 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -50,6 +50,7 @@ extern unsigned int nDerivationMethodIndex; extern unsigned int nMinerSleep; extern unsigned int nScraperSleep; extern unsigned int nActiveBeforeSB; +extern bool fExplorer; extern bool fUseFastIndex; extern boost::filesystem::path pathScraper; diff --git a/src/neuralnet/neuralnet.cpp b/src/neuralnet/neuralnet.cpp index d500da87f1..0f2c8d7266 100755 --- a/src/neuralnet/neuralnet.cpp +++ b/src/neuralnet/neuralnet.cpp @@ -6,6 +6,7 @@ #include extern bool GetBoolArg(const std::string& strArg, bool fDefault); +extern bool fExplorer; using namespace NN; @@ -33,14 +34,15 @@ INeuralNetPtr NN::CreateNeuralNet() // Then if -scraper is specified (set to true)... if (GetBoolArg("-scraper", false)) { + // Activate explorer extended features if -explorer is set + if (GetBoolArg("-explorer", false)) fExplorer = true; + // And -usenewnn is specified (set to true)... - if (GetBoolArg("-usenewnn", false)) - fRunNN = true; + if (GetBoolArg("-usenewnn", false)) fRunNN = true; } // Else if -scraper is NOT specified (or set to true), // and -usenewnn is NOT specified (defaults to true here) or set to true - else if (GetBoolArg("-usenewnn", true)) - fRunNN = true; + else if (GetBoolArg("-usenewnn", true)) fRunNN = true; } if (fRunNN) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 7f05faed6e..9ba42baecd 100644 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -52,6 +52,7 @@ struct ScraperFileManifestEntry int64_t timestamp; bool current; bool excludefromcsmanifest; + std::string filetype; }; typedef std::map ScraperFileManifestMap; @@ -124,6 +125,7 @@ std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats); // Overloaded. See alternative in scraper.h. std::string ScraperGetNeuralHash(std::string sNeuralContract); +bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist); bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist); bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std::map& mTeamIdsForProject_out); bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist); @@ -645,6 +647,7 @@ void ScraperApplyAppCacheEntries() ApplyCache("SCRAPER_RETAIN_NONCURRENT_FILES", SCRAPER_RETAIN_NONCURRENT_FILES); ApplyCache("SCRAPER_FILE_RETENTION_TIME", SCRAPER_FILE_RETENTION_TIME); + ApplyCache("EXPLORER_EXTENDED_FILE_RETENTION_TIME", EXPLORER_EXTENDED_FILE_RETENTION_TIME); ApplyCache("SCRAPER_CMANIFEST_RETAIN_NONCURRENT", SCRAPER_CMANIFEST_RETAIN_NONCURRENT); ApplyCache("SCRAPER_CMANIFEST_RETENTION_TIME", SCRAPER_CMANIFEST_RETENTION_TIME); ApplyCache("SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES", SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES); @@ -667,6 +670,7 @@ void ScraperApplyAppCacheEntries() _log(logattribute::INFO, "ScraperApplyAppCacheEntries", "SCRAPER_RETAIN_NONCURRENT_FILES = " + std::to_string(SCRAPER_RETAIN_NONCURRENT_FILES)); _log(logattribute::INFO, "ScraperApplyAppCacheEntries", "SCRAPER_FILE_RETENTION_TIME = " + std::to_string(SCRAPER_FILE_RETENTION_TIME)); + _log(logattribute::INFO, "ScraperApplyAppCacheEntries", "EXPLORER_EXTENDED_FILE_RETENTION_TIME = " + std::to_string(EXPLORER_EXTENDED_FILE_RETENTION_TIME)); _log(logattribute::INFO, "ScraperApplyAppCacheEntries", "SCRAPER_CMANIFEST_RETAIN_NONCURRENT = " + std::to_string(SCRAPER_CMANIFEST_RETAIN_NONCURRENT)); _log(logattribute::INFO, "ScraperApplyAppCacheEntries", "SCRAPER_CMANIFEST_RETENTION_TIME = " + std::to_string(SCRAPER_CMANIFEST_RETENTION_TIME)); _log(logattribute::INFO, "ScraperApplyAppCacheEntries", "SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES = " + std::to_string(SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES)); @@ -863,12 +867,15 @@ void Scraper(bool bSingleShot) // If team filtering is set by policy then pull down and retrieve team ID's as needed. This loads the TeamIDMap global. // Note that the call(s) to ScraperDirectoryAndConfigSanity() above will preload the team ID map from the persisted file - // if it exists, so this will minimize the work that DownloadProjectTeamFiles() has to do. - if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP) - DownloadProjectTeamFiles(projectWhitelist); + // if it exists, so this will minimize the work that DownloadProjectTeamFiles() has to do, unless explorer mode (fExplorer) is true. + if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP || fExplorer) DownloadProjectTeamFiles(projectWhitelist); DownloadProjectRacFilesByCPID(projectWhitelist); + // If explorer mode is set (fExplorer is true), then download host files. These are currently not use for any other processing, + // so there is no corresponding Process function for the host files. + if (fExplorer) DownloadProjectHostFiles(projectWhitelist); + if (fDebug) _log(logattribute::INFO, "Scraper", "download size so far: " + std::to_string(ndownloadsize) + " upload size so far: " + std::to_string(nuploadsize)); ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); @@ -1147,14 +1154,16 @@ bool ScraperDirectoryAndConfigSanity() } // Now iterate through the Manifest map and remove entries with no file, or entries and files older than - // SCRAPER_FILE_RETENTION_TIME, whether they are current or not, and remove non-current files regardless of time + // nRetentionTime, whether they are current or not, and remove non-current files regardless of time //if fScraperRetainNonCurrentFiles is false. for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) { ScraperFileManifestMap::iterator entry_copy = entry++; + int64_t nFileRetentionTime = fExplorer ? EXPLORER_EXTENDED_FILE_RETENTION_TIME : SCRAPER_FILE_RETENTION_TIME; + if (!fs::exists(pathScraper / entry_copy->first) - || ((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) + || ((GetAdjustedTime() - entry_copy->second.timestamp) > nFileRetentionTime) || (!SCRAPER_RETAIN_NONCURRENT_FILES && entry_copy->second.current == false)) { _log(logattribute::WARNING, "ScraperDirectoryAndConfigSanity", "Removing stale or orphan manifest entry: " + entry_copy->first); @@ -1167,7 +1176,7 @@ bool ScraperDirectoryAndConfigSanity() } // If network policy is set to filter on whitelisted teams, then load team ID map from file. This will prevent the heavyweight - // team file downloads for projects whose team ID's have already been found and stored. + // team file downloads for projects whose team ID's have already been found and stored, unless explorer mode (fExplorer) is true. if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP) { LOCK(cs_TeamIDMap); @@ -1246,131 +1255,383 @@ bool UserpassPopulated() + /********************** -* Project Team Files * +* Project Host Files * **********************/ -bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) +bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist) { - if (!projectWhitelist.Populated()) + // If fExplorer is false then skip processing. (This should not be called anyway, but return immediately just in case. + if (!fExplorer) + { + _log(logattribute::INFO, "DownloadProjectHostFiles", "Not in explorer mode. Skipping host file download and processing."); + return false; + } + + if (!projectWhitelist.Populated()) + { + _log(logattribute::CRITICAL, "DownloadProjectHostFiles", "Whitelist is not populated"); + + return false; + } + + _log(logattribute::INFO, "DownloadProjectHostFiles", "Whitelist is populated; Contains " + std::to_string(projectWhitelist.size()) + " projects"); + + if (!UserpassPopulated()) + { + _log(logattribute::CRITICAL, "DownloadProjectHostFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : projectWhitelist) + { + _log(logattribute::INFO, "DownloadProjectHostFiles", "Downloading project host file for " + prjs.m_name); + + // Grab ETag of host file + Http http; + std::string sHostETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) { - _log(logattribute::CRITICAL, "DownloadProjectTeamFiles", "Whitelist is not populated"); + if (up.first == prjs.m_name) + { + buserpass = true; - return false; + userpass = up.second; + + break; + } } - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Whitelist is populated; Contains " + std::to_string(projectWhitelist.size()) + " projects"); + try + { + sHostETag = http.GetEtag(prjs.StatsUrl("host"), userpass); + } + catch (const std::runtime_error& e) + { + _log(logattribute::ERR, "DownloadProjectHostFiles", "Failed to pull host header file for " + prjs.m_name); + continue; + } - if (!UserpassPopulated()) + if (sHostETag.empty()) { - _log(logattribute::CRITICAL, "DownloadProjectTeamFiles", "Userpass is not populated"); + _log(logattribute::ERR, "DownloadProjectHostFiles", "ETag for project is empty" + prjs.m_name); - return false; + continue; } + else + _log(logattribute::INFO, "DownloadProjectHostFiles", "Successfully pulled host header file for " + prjs.m_name); - for (const auto& prjs : projectWhitelist) + if (buserpass) { - LOCK(cs_TeamIDMap); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_TeamIDMap"); + authdata ad(lowercase(prjs.m_name)); - const auto iter = TeamIDMap.find(prjs.m_name); + ad.setoutputdata("host", prjs.m_name, sHostETag); - // If there is an entry in the TeamIDMap for the project, and in the submap (team name and team id) there - // are the correct number of team entries, then skip processing. - if (iter != TeamIDMap.end() && iter->second.size() == split(TEAM_WHITELIST, ",").size()) - { - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Correct team whitelist entries already in the team ID map for " - + prjs.m_name + " project. Skipping team file download and processing."); - continue; - } + if (!ad.xport()) + _log(logattribute::CRITICAL, "DownloadProjectHostFiles", "Failed to export etag for " + prjs.m_name + " to authentication file"); + } + + std::string host_file_name; + fs::path host_file; + + // Use eTag versioning. + host_file_name = prjs.m_name + "-" + sHostETag + "-host.gz"; + host_file = pathScraper / host_file_name; - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Downloading project file for " + prjs.m_name); + // If the file with the same eTag already exists, don't download it again. + if (fs::exists(host_file)) + { + _log(logattribute::INFO, "DownloadProjectHostFiles", "Etag file for " + prjs.m_name + " already exists"); + continue; + } - std::string team_file_name = prjs.m_name + "-team.gz"; + try + { + http.Download(prjs.StatsUrl("host"), host_file.string(), userpass); + } + catch(const std::runtime_error& e) + { + _log(logattribute::ERR, "DownloadProjectHostFiles", "Failed to download project host file for " + prjs.m_name); + continue; + } - fs::path team_file = pathScraper / team_file_name; + // Save host xml files to file manifest map with exclude from CSManifest flag set to true. + ScraperFileManifestEntry NewRecord; - // Grab ETag of team file - Http http; - std::string sTeamETag; + NewRecord.filename = host_file_name; + NewRecord.project = prjs.m_name; + NewRecord.hash = GetFileHash(host_file); + NewRecord.timestamp = GetAdjustedTime(); + NewRecord.current = true; + // Host files are not included in CScraperManifests (published manifests). + NewRecord.excludefromcsmanifest = true; + NewRecord.filetype = "host"; - bool buserpass = false; - std::string userpass; + // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. + { + LOCK(cs_StructScraperFileManifest); + if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + + // Iterate mScraperFileManifest to find any prior host records for the same project and change current flag to false, + // or delete if older than EXPLORER_EXTENDED_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles + // is false. - for (const auto& up : vuserpass) + ScraperFileManifestMap::iterator entry; + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) { - if (up.first == prjs.m_name) - { - buserpass = true; + ScraperFileManifestMap::iterator entry_copy = entry++; - userpass = up.second; + if (entry_copy->second.project == prjs.m_name && entry_copy->second.current == true && entry_copy->second.filetype == "host") + { + _log(logattribute::INFO, "DownloadProjectHostFiles", "Marking old project manifest host entry as current = false."); + MarkScraperFileManifestEntryNonCurrent(entry_copy->second); + } - break; + // If host records are older than EXPLORER_EXTENDED_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, + // delete all non-current records, including the one just marked non-current. (EXPLORER_EXTENDED_FILE_RETENTION_TIME rather + // then SCRAPER_FILE_RETENTION_TIME is used, because this section is only active if fExplorer is true.) + if (entry_copy->second.filetype == "host" && (((GetAdjustedTime() - entry_copy->second.timestamp) > EXPLORER_EXTENDED_FILE_RETENTION_TIME) + || (entry_copy->second.project == prjs.m_name && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) + { + DeleteScraperFileManifestEntry(entry_copy->second); } } - try - { - sTeamETag = http.GetEtag(prjs.StatsUrl("team"), userpass); - } - catch (const std::runtime_error& e) - { - _log(logattribute::ERR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.m_name); - continue; - } + if (!InsertScraperFileManifestEntry(NewRecord)) + _log(logattribute::WARNING, "DownloadProjectHostFiles", "Manifest entry already exists for " + NewRecord.hash.ToString() + " " + host_file_name); + else + _log(logattribute::INFO, "DownloadProjectHostFiles", "Created manifest entry for " + NewRecord.hash.ToString() + " " + host_file_name); + + // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. + // The manifest file is actually very small though, and this primitive implementation will suffice. I could + // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of + // sync if the wallet is ended during the middle of pulling the files. + _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Persisting manifest entry to disk."); + if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) + _log(logattribute::ERR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); + else + _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); - if (sTeamETag.empty()) - { - _log(logattribute::ERR, "DownloadProjectTeamFiles", "ETag for project is empty" + prjs.m_name); + // End LOCK(cs_StructScraperFileManifest) + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + } + } - continue; - } - else - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Successfully pulled team header file for " + prjs.m_name); + return true; +} + + + + + +/********************** +* Project Team Files * +**********************/ + +bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) +{ + if (!projectWhitelist.Populated()) + { + _log(logattribute::CRITICAL, "DownloadProjectTeamFiles", "Whitelist is not populated"); + + return false; + } + + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Whitelist is populated; Contains " + std::to_string(projectWhitelist.size()) + " projects"); + + if (!UserpassPopulated()) + { + _log(logattribute::CRITICAL, "DownloadProjectTeamFiles", "Userpass is not populated"); + + return false; + } + + for (const auto& prjs : projectWhitelist) + { + LOCK(cs_TeamIDMap); + if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_TeamIDMap"); - if (buserpass) + const auto iter = TeamIDMap.find(prjs.m_name); + + // If fExplorer is false, which means we do not need to retain team files, and there is an entry in the TeamIDMap for the project, + // and in the submap (team name and team id) there are the correct number of team entries, then skip processing. + if (!fExplorer && iter != TeamIDMap.end() && iter->second.size() == split(TEAM_WHITELIST, ",").size()) + { + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Correct team whitelist entries already in the team ID map for " + + prjs.m_name + " project. Skipping team file download and processing."); + continue; + } + + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Downloading project file for " + prjs.m_name); + + // Grab ETag of team file + Http http; + std::string sTeamETag; + + bool buserpass = false; + std::string userpass; + + for (const auto& up : vuserpass) + { + if (up.first == prjs.m_name) { - authdata ad(lowercase(prjs.m_name)); + buserpass = true; - ad.setoutputdata("team", prjs.m_name, sTeamETag); + userpass = up.second; - if (!ad.xport()) - _log(logattribute::CRITICAL, "DownloadProjectTeamFiles", "Failed to export etag for " + prjs.m_name + " to authentication file"); + break; } + } + + try + { + sTeamETag = http.GetEtag(prjs.StatsUrl("team"), userpass); + } + catch (const std::runtime_error& e) + { + _log(logattribute::ERR, "DownloadProjectTeamFiles", "Failed to pull team header file for " + prjs.m_name); + continue; + } + + if (sTeamETag.empty()) + { + _log(logattribute::ERR, "DownloadProjectTeamFiles", "ETag for project is empty" + prjs.m_name); + + continue; + } + else + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Successfully pulled team header file for " + prjs.m_name); - std::string chketagfile = prjs.m_name + "-" + sTeamETag + ".csv" + ".gz"; - fs::path chkfile = pathScraper / chketagfile; + if (buserpass) + { + authdata ad(lowercase(prjs.m_name)); + + ad.setoutputdata("team", prjs.m_name, sTeamETag); + + if (!ad.xport()) + _log(logattribute::CRITICAL, "DownloadProjectTeamFiles", "Failed to export etag for " + prjs.m_name + " to authentication file"); + } - if (fs::exists(chkfile)) + std::string team_file_name; + fs::path team_file; + + if (fExplorer) + { + // Use eTag versioning. + team_file_name = prjs.m_name + "-" + sTeamETag + "-team.gz"; + team_file = pathScraper / team_file_name; + + // If the file with the same eTag already exists, don't download it again. + if (fs::exists(team_file)) { _log(logattribute::INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.m_name + " already exists"); continue; } - else - fs::remove(team_file); + } + else + { + // No versioning. If file exists delete it and download anew. + team_file_name = prjs.m_name + "-team.gz"; + team_file = pathScraper / team_file_name; - try - { - http.Download(prjs.StatsUrl("team"), team_file.string(), userpass); - } - catch(const std::runtime_error& e) + if (fs::exists(team_file)) fs::remove(team_file); + } + + try + { + http.Download(prjs.StatsUrl("team"), team_file.string(), userpass); + } + catch(const std::runtime_error& e) + { + _log(logattribute::ERR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.m_name); + continue; + } + + // If in explorer mode, save team xml files to file manifest map with exclude from CSManifest flag set to true. + if (fExplorer) + { + ScraperFileManifestEntry NewRecord; + + NewRecord.filename = team_file_name; + NewRecord.project = prjs.m_name; + NewRecord.hash = GetFileHash(team_file); + NewRecord.timestamp = GetAdjustedTime(); + NewRecord.current = true; + // Team files are not included in CScraperManifests (published manifests). + NewRecord.excludefromcsmanifest = true; + NewRecord.filetype = "team"; + + // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { - _log(logattribute::ERR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.m_name); - continue; - } + LOCK(cs_StructScraperFileManifest); + if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + + // Iterate mScraperFileManifest to find any prior team records for the same project and change current flag to false, + // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles + // is false. + ScraperFileManifestMap::iterator entry; + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) + { + ScraperFileManifestMap::iterator entry_copy = entry++; + + if (entry_copy->second.project == prjs.m_name && entry_copy->second.current == true && entry_copy->second.filetype == "team") + { + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Marking old project manifest team entry as current = false."); + MarkScraperFileManifestEntryNonCurrent(entry_copy->second); + } + + // If team records are older than EXPLORER_EXTENDED_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, + // delete all non-current records, including the one just marked non-current. (EXPLORER_EXTENDED_FILE_RETENTION_TIME rather + // then SCRAPER_FILE_RETENTION_TIME is used, because this section is only active if fExplorer is true.) + if (entry_copy->second.filetype == "team" && (((GetAdjustedTime() - entry_copy->second.timestamp) > EXPLORER_EXTENDED_FILE_RETENTION_TIME) + || (entry_copy->second.project == prjs.m_name && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) + { + DeleteScraperFileManifestEntry(entry_copy->second); + } + } + + if (!InsertScraperFileManifestEntry(NewRecord)) + _log(logattribute::WARNING, "DownloadProjectTeamFiles", "Manifest entry already exists for " + NewRecord.hash.ToString() + " " + team_file_name); + else + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Created manifest entry for " + NewRecord.hash.ToString() + " " + team_file_name); + + // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. + // The manifest file is actually very small though, and this primitive implementation will suffice. I could + // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of + // sync if the wallet is ended during the middle of pulling the files. + _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Persisting manifest entry to disk."); + if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) + _log(logattribute::ERR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); + else + _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); + + // End LOCK(cs_StructScraperFileManifest) + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + } + } - std::map mTeamIDsForProject = {}; + std::map mTeamIDsForProject; + // We need this check because we could be in explorer mode (if fExplorer is true). + if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP) + { if (ProcessProjectTeamFile(team_file.string(), sTeamETag, mTeamIDsForProject)) { // Insert or update team IDs for the project into the team ID map. TeamIDMap[prjs.m_name] = mTeamIDsForProject; } - - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_TeamIDMap"); } + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_TeamIDMap"); + } + return true; } @@ -1398,12 +1659,11 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: in.push(boostio::gzip_decompressor()); in.push(ingzfile); - std::string gzetagfile = ""; - - gzetagfile = etag + ".csv" + ".gz"; + // Insert csv in output filename. (This is not really used currently, but may be in the future.) + // std::string gzetagfile = std::string::replace(std::string::find(file.filename().string(), ".gz"), 3, ".csv.gz"); - // Put path in. - gzetagfile = ((fs::path)(pathScraper / gzetagfile)).string(); + // Put path back in. + // gzetagfile = ((fs::path)(pathScraper / gzetagfile)).string(); _log(logattribute::INFO, "ProcessProjectTeamFile", "Started processing " + file.string()); @@ -1452,28 +1712,17 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: { _log(logattribute::CRITICAL, "ProcessProjectTeamFile", "Error in data processing of " + file.string()); - std::string efile = etag + ".gz"; - fs::path fsepfile = pathScraper/ efile; ingzfile.close(); - if (fs::exists(fsepfile)) - fs::remove(fsepfile); - - if (fs::exists(file)) - fs::remove(file); + if (fs::exists(file)) fs::remove(file); return false; } - std::string efile = etag + ".gz"; - fs::path fsepfile = pathScraper/ efile; ingzfile.close(); - if (fs::exists(fsepfile)) - fs::remove(fsepfile); - - if (fs::exists(file)) - fs::remove(file); + // If not explorer mode, delete input file after processing. + if (!fExplorer && fs::exists(file)) fs::remove(file); if (mTeamIdsForProject_out.size() < vTeamWhiteList.size()) _log(logattribute::ERR, "ProcessProjectTeamFile", "Unable to determine team IDs for one or more whitelisted teams."); @@ -1799,13 +2048,14 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // a given project, it has to be more up to date than any others. NewRecord.current = true; NewRecord.excludefromcsmanifest = false; + NewRecord.filetype = "user"; // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { LOCK(cs_StructScraperFileManifest); if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); - // Iterate mScraperFileManifest to find any prior records for the same project and change current flag to false, + // Iterate mScraperFileManifest to find any prior user records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles // is false. @@ -1814,16 +2064,18 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil { ScraperFileManifestMap::iterator entry_copy = entry++; - if (entry_copy->second.project == project && entry_copy->second.current == true) + if (entry_copy->second.project == project && entry_copy->second.current == true && entry_copy->second.filetype == "user") { - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Marking old project manifest entry as current = false."); + _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Marking old project manifest user entry as current = false."); MarkScraperFileManifestEntryNonCurrent(entry_copy->second); } - // If records are older than SCRAPER_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, + // If user records are older than nFileRetentionTime delete record, or if fScraperRetainNonCurrentFiles is false, // delete all non-current records, including the one just marked non-current. - if (((GetAdjustedTime() - entry_copy->second.timestamp) > SCRAPER_FILE_RETENTION_TIME) - || (entry_copy->second.project == project && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES)) + int64_t nFileRetentionTime = fExplorer ? EXPLORER_EXTENDED_FILE_RETENTION_TIME : SCRAPER_FILE_RETENTION_TIME; + + if (entry_copy->second.filetype == "user" && (((GetAdjustedTime() - entry_copy->second.timestamp) > nFileRetentionTime) + || (entry_copy->second.project == project && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) { DeleteScraperFileManifestEntry(entry_copy->second); } @@ -2280,7 +2532,7 @@ bool LoadScraperFileManifest(const fs::path& file) LoadEntry.filename = vline[4]; // This handles startup with legacy manifest file without excludefromcsmanifest column. - if (vline.size() == 6) + if (vline.size() >= 6) { // Intended for explorer mode, where files not to be included in CScraperManifest // are to be maintained, such as team and host files. @@ -2293,6 +2545,20 @@ bool LoadScraperFileManifest(const fs::path& file) LoadEntry.excludefromcsmanifest = false; } + // This handles startup with legacy manifest file without filetype column. + if (vline.size() >= 7) + { + // In scraper ver 2, we have to support explorer mode, which includes retention of other files besides + // user statistics. + LoadEntry.filetype = vline[6]; + } + else + { + // The default if the field is not there is user. (Because scraper ver 1 all files in the manifest are + // user.) + LoadEntry.filetype = "user"; + } + // Lock cs_StructScraperFileManifest before updating // global structure. { @@ -2336,7 +2602,7 @@ bool StoreScraperFileManifest(const fs::path& file) if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); // Header. - stream << "Hash," << "Current," << "Time," << "Project," << "Filename," << "ExcludeFromCSManifest" << "\n"; + stream << "Hash," << "Current," << "Time," << "Project," << "Filename," << "ExcludeFromCSManifest," << "Filetype" << "\n"; for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -2347,7 +2613,8 @@ bool StoreScraperFileManifest(const fs::path& file) + std::to_string(entry.second.timestamp) + "," + entry.second.project + "," + entry.first + "," - + std::to_string(entry.second.excludefromcsmanifest) + "\n"; + + std::to_string(entry.second.excludefromcsmanifest) + "," + + entry.second.filetype + "\n"; stream << sScraperFileManifestEntry; } @@ -2666,8 +2933,8 @@ ScraperStats GetScraperStatsByConsensusBeaconList() for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { - if (entry.second.current) - nActiveProjects++; + // + if (entry.second.current && !entry.second.excludefromcsmanifest) nActiveProjects++; } // End LOCK(cs_StructScraperFileManifest) @@ -2687,7 +2954,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { - if (entry.second.current) + if (entry.second.current && !entry.second.excludefromcsmanifest) { std::string project = entry.first; fs::path file = pathScraper / entry.second.filename; @@ -3243,7 +3510,8 @@ bool ScraperSendFileManifestContents(CBitcoinAddress& Address, CKey& Key) for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { // If SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES is false, only include current files to send across the network. - if (!SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES && !entry.second.current) + // Also continue (exlude) if it is a non-publishable entry (excludefromcsmanifest is true). + if ((!SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES && !entry.second.current) || entry.second.excludefromcsmanifest) continue; fs::path inputfile = entry.first; diff --git a/src/scraper/scraper.h b/src/scraper/scraper.h index 2a850138ad..b6bfbaa84c 100644 --- a/src/scraper/scraper.h +++ b/src/scraper/scraper.h @@ -49,12 +49,17 @@ unsigned int nScraperSleep = 300000; // The amount of time before SB is due to start scraping. unsigned int nActiveBeforeSB = 14400; +// Explorer mode flag. Only effective if scraper is active. +bool fExplorer = false; + // These can be overridden by ScraperApplyAppCacheEntries(). // The flag to control whether non-current statistics files are retained. bool SCRAPER_RETAIN_NONCURRENT_FILES = true; // Define 48 hour retention time for stats files, current or not. int64_t SCRAPER_FILE_RETENTION_TIME = 48 * 3600; +// Define extended file retention time for explorer mode. +int64_t EXPLORER_EXTENDED_FILE_RETENTION_TIME = 168 * 3600; // Define whether prior CScraperManifests are kept. bool SCRAPER_CMANIFEST_RETAIN_NONCURRENT = true; // Define CManifest scraper object retention time. From 2dc07216843515b5269cf504cdfe3a56d6ea0cf0 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 12 Jun 2019 13:06:15 -0400 Subject: [PATCH 034/115] Add more detailed lock descriptions for troubleshooting Also do not do hash check of files excluded from publishing, since these are very large and it is very expensive and unnecessary. --- src/scraper/scraper.cpp | 63 +++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 27 deletions(-) mode change 100644 => 100755 src/scraper/scraper.cpp diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp old mode 100644 new mode 100755 index 9ba42baecd..29a1df1ed8 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -837,7 +837,7 @@ void Scraper(bool bSingleShot) // Delete manifest entries not on whitelist. Take a lock on cs_StructScraperFileManifest for this. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "download statistics block: cs_StructScraperFileManifest"); ScraperFileManifestMap::iterator entry; @@ -853,7 +853,7 @@ void Scraper(bool bSingleShot) } // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download statistics block: cs_StructScraperFileManifest"); } AuthenticationETagClear(); @@ -907,7 +907,7 @@ void Scraper(bool bSingleShot) // Publish and/or local delete CScraperManifests. { LOCK2(cs_StructScraperFileManifest, CScraperManifest::cs_mapManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK2", "cs_StructScraperFileManifest, CScraperManifest::cs_mapManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK2", "manifest send block: cs_StructScraperFileManifest, CScraperManifest::cs_mapManifest"); // If the hash doesn't match (a new one is available), or there are none, then publish a new one. if (nmScraperFileManifestHash != StructScraperFileManifest.nFileManifestMapHash @@ -923,7 +923,7 @@ void Scraper(bool bSingleShot) nmScraperFileManifestHash = StructScraperFileManifest.nFileManifestMapHash; // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK2", "cs_StructScraperFileManifest, CScraperManifest::cs_mapManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK2", "manifest send block: cs_StructScraperFileManifest, CScraperManifest::cs_mapManifest"); } } @@ -1109,7 +1109,7 @@ bool ScraperDirectoryAndConfigSanity() // Lock the manifest while it is being manipulated. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "align directory with manifest file: cs_StructScraperFileManifest"); if (StructScraperFileManifest.mScraperFileManifest.empty()) { @@ -1138,6 +1138,9 @@ bool ScraperDirectoryAndConfigSanity() && fs::is_regular_file(dir)) { entry = StructScraperFileManifest.mScraperFileManifest.find(dir.path().filename().string()); + + if (fDebug10) _log(logattribute::INFO, "ScraperDirectoryAndConfigSanity", "Iterating through directory - checking file " + filename); + if (entry == StructScraperFileManifest.mScraperFileManifest.end()) { fs::remove(dir.path()); @@ -1145,10 +1148,14 @@ bool ScraperDirectoryAndConfigSanity() continue; } - if (entry->second.hash != GetFileHash(dir)) + // Only do the expensive hash checking on files that are included in published manifests. + if (!entry->second.excludefromcsmanifest) { - _log(logattribute::INFO, "ScraperDirectoryAndConfigSanity", "File failed hash check. Removing file."); - fs::remove(dir.path()); + if (entry->second.hash != GetFileHash(dir)) + { + _log(logattribute::INFO, "ScraperDirectoryAndConfigSanity", "File failed hash check. Removing file."); + fs::remove(dir.path()); + } } } } @@ -1161,6 +1168,8 @@ bool ScraperDirectoryAndConfigSanity() ScraperFileManifestMap::iterator entry_copy = entry++; int64_t nFileRetentionTime = fExplorer ? EXPLORER_EXTENDED_FILE_RETENTION_TIME : SCRAPER_FILE_RETENTION_TIME; + + if (fDebug10) _log(logattribute::INFO, "ScraperDirectoryAndConfigSanity", "Iterating through map - checking map entry " + entry_copy->first); if (!fs::exists(pathScraper / entry_copy->first) || ((GetAdjustedTime() - entry_copy->second.timestamp) > nFileRetentionTime) @@ -1172,7 +1181,7 @@ bool ScraperDirectoryAndConfigSanity() } // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "align directory with manifest file: cs_StructScraperFileManifest"); } // If network policy is set to filter on whitelisted teams, then load team ID map from file. This will prevent the heavyweight @@ -1376,7 +1385,7 @@ bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist) // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "download host files: cs_StructScraperFileManifest"); // Iterate mScraperFileManifest to find any prior host records for the same project and change current flag to false, // or delete if older than EXPLORER_EXTENDED_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles @@ -1419,7 +1428,7 @@ bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist) _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download host files: cs_StructScraperFileManifest"); } } @@ -1570,7 +1579,7 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "download team files: cs_StructScraperFileManifest"); // Iterate mScraperFileManifest to find any prior team records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles @@ -1613,7 +1622,7 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download team files: cs_StructScraperFileManifest"); } } @@ -1851,7 +1860,7 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist // After processing, update global structure with the timestamp of the latest file in the manifest. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "user (rac) files struct update post process: cs_StructScraperFileManifest"); int64_t nMaxTime = 0; for (const auto& entry : StructScraperFileManifest.mScraperFileManifest) @@ -1862,7 +1871,7 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist StructScraperFileManifest.timestamp = nMaxTime; // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "user (rac) files struct update post process: cs_StructScraperFileManifest"); } return true; } @@ -2053,7 +2062,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "rac (user) file processing record insert: cs_StructScraperFileManifest"); // Iterate mScraperFileManifest to find any prior user records for the same project and change current flag to false, // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles @@ -2097,7 +2106,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "rac (user) file processing record insert: cs_StructScraperFileManifest"); } _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -2314,12 +2323,12 @@ bool StoreBeaconList(const fs::path& file) // Requires a lock. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "store beacon list - update consensus block hash: cs_StructScraperFileManifest"); StructScraperFileManifest.nConsensusBlockHash = Consensus.nBlockHash; // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "store beacon list - update consensus block hash: cs_StructScraperFileManifest"); } if (fs::exists(file)) @@ -2563,12 +2572,12 @@ bool LoadScraperFileManifest(const fs::path& file) // global structure. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "load scraper file manifest - update entry: cs_StructScraperFileManifest"); InsertScraperFileManifestEntry(LoadEntry); // End LOCK(cs_StructScraperFileManifest - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "load scraper file manifest - update entry: cs_StructScraperFileManifest"); } } @@ -2599,7 +2608,7 @@ bool StoreScraperFileManifest(const fs::path& file) //Lock StructScraperFileManifest during serialize to string. { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "store scraper file manifest to file: cs_StructScraperFileManifest"); // Header. stream << "Hash," << "Current," << "Time," << "Project," << "Filename," << "ExcludeFromCSManifest," << "Filetype" << "\n"; @@ -2619,7 +2628,7 @@ bool StoreScraperFileManifest(const fs::path& file) } // end LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "store scraper file manifest to file: cs_StructScraperFileManifest"); } _log(logattribute::INFO, "StoreScraperFileManifest", "Finished processing manifest from map."); @@ -2929,7 +2938,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() unsigned int nActiveProjects = 0; { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "get scraper stats by consensus beacon list - count active projects: cs_StructScraperFileManifest"); for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -2938,7 +2947,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() } // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "get scraper stats by consensus beacon list - count active projects: cs_StructScraperFileManifest"); } double dMagnitudePerProject = NEURALNETWORKMULTIPLIER / nActiveProjects; @@ -2949,7 +2958,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() { LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "LOCK", "get scraper stats by consensus beacon list - load project file to stats: cs_StructScraperFileManifest"); for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { @@ -2973,7 +2982,7 @@ ScraperStats GetScraperStatsByConsensusBeaconList() } // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_StructScraperFileManifest"); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "get scraper stats by consensus beacon list - load project file to stats: cs_StructScraperFileManifest"); } ProcessNetworkWideFromProjectStats(Consensus.mBeaconMap, mScraperStats); From 324b955c0451be218e58205a53039808162d33cf Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 15 Jun 2019 14:25:47 -0400 Subject: [PATCH 035/115] Simplify explainmagnitude function --- src/scraper/scraper.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 29a1df1ed8..994779255b 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -3073,7 +3073,7 @@ std::string ExplainMagnitude(std::string sCPID) stringbuilder out; - out.append("CPID,Project,RAC,Project_Total_RAC,Project_Avg_RAC,Project Mag,Cumulative RAC,Cumulative Mag,Errors"); + out.append("CPID,Project,CPID RAC,Project RAC,Project Mag,CPID Mag"); double dCPIDCumulativeRAC = 0.0; double dCPIDCumulativeMag = 0.0; @@ -3103,17 +3103,13 @@ std::string ExplainMagnitude(std::string sCPID) out.append(sCPID + ","); out.append(sProject + ","); - out.fixeddoubleappend(iProject->second.statsvalue.dRAC, 2); + out.fixeddoubleappend(entry.second.statsvalue.dRAC, 2); out.append(","); - out.fixeddoubleappend(iProject->second.statsvalue.dAvgRAC, 2); + out.fixeddoubleappend(iProject->second.statsvalue.dRAC, 2); out.append(","); out.fixeddoubleappend(iProject->second.statsvalue.dMag, 2); out.append(","); - out.fixeddoubleappend(dCPIDCumulativeRAC, 2); - out.append(","); - out.fixeddoubleappend(dCPIDCumulativeMag, 2); - out.append(","); - //The last field is for errors, but there are not any, so the is next. + out.fixeddoubleappend(entry.second.statsvalue.dMag, 2); out.append(""); } } From dcd406bd25136eebae9b2fa2d7168bfaabe8b91d Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 8 Jun 2019 12:04:04 -0500 Subject: [PATCH 036/115] Remove misleading global project status Gridcoin doesn't mine projects--it associates research rewards with a CPID independently of a particular project. Refereshing a meaningless project in the UI adds unnecessary complexity. --- src/main.cpp | 5 ----- src/main.h | 2 -- src/qt/forms/overviewpage.ui | 21 ++------------------- src/qt/overviewpage.cpp | 1 - 4 files changed, 2 insertions(+), 27 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 78765c051b..bc8feb7769 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -212,7 +212,6 @@ extern void HarvestCPIDs(bool cleardata); /////////////////////////////// //Global variables to display current mined project in various places: -std::string msMiningProject; std::string msMiningCPID; std::string msPrimaryCPID; double mdPORNonce = 0; @@ -619,7 +618,6 @@ void GetGlobalStatus() GlobalStatusStruct.magnitude = RoundToString(boincmagnitude,2); GlobalStatusStruct.ETTS = RoundToString(dETTS,3); GlobalStatusStruct.ERRperday = RoundToString(boincmagnitude * GRCMagnitudeUnit(GetAdjustedTime()),2); - GlobalStatusStruct.project = msMiningProject; GlobalStatusStruct.cpid = GlobalCPUMiningCPID.cpid; try { @@ -767,7 +765,6 @@ MiningCPID GetNextProject(bool bForce) } } - msMiningProject = ""; msMiningCPID = ""; GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID(""); @@ -873,7 +870,6 @@ MiningCPID GetNextProject(bool bForce) //Only used for global status: - msMiningProject = structcpid.projectname; msMiningCPID = structcpid.cpid; double ProjectRAC = GetNetworkAvgByProject(GlobalCPUMiningCPID.projectname); @@ -898,7 +894,6 @@ MiningCPID GetNextProject(bool bForce) } msMiningErrors = (IsResearcher(msPrimaryCPID)) ? _("All BOINC projects exhausted.") : ""; - msMiningProject = "INVESTOR"; msMiningCPID = "INVESTOR"; GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID("INVESTOR"); if (fDebug10) LogPrintf("-Investor mode-"); diff --git a/src/main.h b/src/main.h index 1c134aa411..326a6c3da5 100644 --- a/src/main.h +++ b/src/main.h @@ -192,7 +192,6 @@ extern bool fEnforceCanonical; static const uint64_t nMinDiskSpace = 52428800; // PoB Miner Global Vars: -extern std::string msMiningProject; extern std::string msMiningCPID; extern std::string msPrimaryCPID; @@ -227,7 +226,6 @@ struct globalStatusType std::string magnitude; std::string ETTS; std::string ERRperday; - std::string project; std::string cpid; std::string status; std::string poll; diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index fcf0e870bf..e71f73e85e 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -344,20 +344,13 @@ - - - Project: - - - - CPID: - + Status: @@ -385,16 +378,6 @@ - - - - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - @@ -404,7 +387,7 @@ - + diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index c7a20cf254..e1b8a8c8fd 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -207,7 +207,6 @@ void OverviewPage::UpdateBoincUtilization() ui->labelNetWeight->setText(QString::fromUtf8(GlobalStatusStruct.netWeight.c_str())); ui->labelCoinWeight->setText(QString::fromUtf8(GlobalStatusStruct.coinWeight.c_str())); ui->labelMagnitude->setText(QString::fromUtf8(GlobalStatusStruct.magnitude.c_str())); - ui->labelProject->setText(QString::fromUtf8(GlobalStatusStruct.project.c_str())); ui->labelCpid->setText(QString::fromUtf8(GlobalStatusStruct.cpid.c_str())); ui->labelStatus->setText(QString::fromUtf8(GlobalStatusStruct.status.c_str())); ui->labelPoll->setText(QString::fromUtf8(GlobalStatusStruct.poll.c_str()).replace(QChar('_'),QChar(' '), Qt::CaseSensitive)); From 4f05dfec9654ac70bb4e683868df1a7e9811d4d5 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 8 Jun 2019 12:06:06 -0500 Subject: [PATCH 037/115] Remove unused msMiningCPID global variable --- src/main.cpp | 11 ++--------- src/main.h | 1 - 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index bc8feb7769..c132650b3a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -211,8 +211,7 @@ extern void HarvestCPIDs(bool cleardata); // Standard Boinc Projects //// /////////////////////////////// -//Global variables to display current mined project in various places: -std::string msMiningCPID; +//Global variables to display current mined project in various placesn: std::string msPrimaryCPID; double mdPORNonce = 0; double mdMachineTimerLast = 0; @@ -765,7 +764,6 @@ MiningCPID GetNextProject(bool bForce) } } - msMiningCPID = ""; GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID(""); std::string email = GetArgument("email", "NA"); @@ -868,16 +866,12 @@ MiningCPID GetNextProject(bool bForce) (void)bResult; # endif - - //Only used for global status: - msMiningCPID = structcpid.cpid; - double ProjectRAC = GetNetworkAvgByProject(GlobalCPUMiningCPID.projectname); GlobalCPUMiningCPID.NetworkRAC = ProjectRAC; GlobalCPUMiningCPID.Magnitude = CalculatedMagnitude(GetAdjustedTime(),false); if (fDebug && LessVerbose(2)) LogPrintf("For CPID %s Verified Magnitude = %f",GlobalCPUMiningCPID.cpid, GlobalCPUMiningCPID.Magnitude); //Reserved for GRC Speech Synthesis - msMiningErrors = (msMiningCPID == "INVESTOR" || !IsResearcher(msPrimaryCPID) || msMiningCPID.empty()) ? _("Staking Interest") : _("Boinc Mining"); + msMiningErrors = !IsResearcher(msPrimaryCPID) ? _("Staking Interest") : _("Boinc Mining"); GlobalCPUMiningCPID.RSAWeight = GetRSAWeightByCPID(GlobalCPUMiningCPID.cpid); GlobalCPUMiningCPID.LastPaymentTime = GetLastPaymentTimeByCPID(GlobalCPUMiningCPID.cpid); return GlobalCPUMiningCPID; @@ -894,7 +888,6 @@ MiningCPID GetNextProject(bool bForce) } msMiningErrors = (IsResearcher(msPrimaryCPID)) ? _("All BOINC projects exhausted.") : ""; - msMiningCPID = "INVESTOR"; GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID("INVESTOR"); if (fDebug10) LogPrintf("-Investor mode-"); diff --git a/src/main.h b/src/main.h index 326a6c3da5..81f499ce7d 100644 --- a/src/main.h +++ b/src/main.h @@ -192,7 +192,6 @@ extern bool fEnforceCanonical; static const uint64_t nMinDiskSpace = 52428800; // PoB Miner Global Vars: -extern std::string msMiningCPID; extern std::string msPrimaryCPID; extern double mdPORNonce; From c7bfb2e84223d1216c05bb063b70ca7f6064fb4a Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 27 May 2019 16:01:07 -0500 Subject: [PATCH 038/115] Move getfilecontents function out of main.cpp to util.cpp --- src/main.cpp | 30 +----------------------------- src/qt/bitcoingui.cpp | 4 +--- src/util.cpp | 27 +++++++++++++++++++++++++++ src/util.h | 10 ++++++++++ 4 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index c132650b3a..df9c5f1e2c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -202,7 +202,6 @@ bool PollIsActive(const std::string& poll_contract); double GetNetworkAvgByProject(std::string projectname); extern bool IsCPIDValidv2(MiningCPID& mc, int height); -extern std::string getfilecontents(std::string filename); extern bool LessVerbose(int iMax1000); extern MiningCPID GetNextProject(bool bForce); extern void HarvestCPIDs(bool cleardata); @@ -4991,33 +4990,6 @@ int GetFilesize(FILE* file) } -std::string getfilecontents(std::string filename) -{ - if (!filesystem::exists(filename)) { - LogPrintf("getfilecontents: file does not exist %s", filename); - return "-1"; - } - - std::ifstream in(filename, std::ios::in | std::ios::binary); - - if (in.fail()) { - LogPrintf("getfilecontents: error opening file %s", filename); - return "-1"; - } - - if (fDebug10) LogPrintf("loading file to string %s", filename); - - std::ostringstream out; - - out << in.rdbuf(); - - // Immediately close instead of waiting for the destructor to decrease the - // chance of a race when calling this to read BOINC's client_state.xml: - in.close(); - - return out.str(); -} - std::set GetAlternativeBeaconKeys(const std::string& cpid) { int64_t iMaxSeconds = 60 * 24 * 30 * 6 * 60; @@ -7198,7 +7170,7 @@ void HarvestCPIDs(bool cleardata) try { std::string sourcefile = GetBoincDataDir() + "client_state.xml"; - std::string sout = getfilecontents(sourcefile); + std::string sout = GetFileContents(sourcefile); if (sout == "-1") { diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 9f6ba8814e..368029faee 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -94,8 +94,6 @@ extern std::string getMacAddress(); extern std::string FromQString(QString qs); extern std::string qtExecuteDotNetStringFunction(std::string function, std::string data); -std::string getfilecontents(std::string filename); - void GetGlobalStatus(); bool IsConfigFileEmpty(); @@ -895,7 +893,7 @@ void BitcoinGUI::NewUserWizard() std::string sourcefile = GetBoincDataDir() + "client_state.xml"; std::string sout = ""; - sout = getfilecontents(sourcefile); + sout = GetFileContents(sourcefile); //bool BoincInstalled = true; std::string sBoincNarr = ""; if (sout == "-1") diff --git a/src/util.cpp b/src/util.cpp index 8bef3888c8..e8be303afb 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1253,6 +1253,33 @@ void ShrinkDebugFile() } } +std::string GetFileContents(std::string filepath) +{ + if (!boost::filesystem::exists(filepath)) { + LogPrintf("GetFileContents: file does not exist %s", filepath); + return "-1"; + } + + std::ifstream in(filepath, std::ios::in | std::ios::binary); + + if (in.fail()) { + LogPrintf("GetFileContents: error opening file %s", filepath); + return "-1"; + } + + if (fDebug10) LogPrintf("loading file to string %s", filepath); + + std::ostringstream out; + + out << in.rdbuf(); + + // Immediately close instead of waiting for the destructor to decrease the + // chance of a race when calling this to read BOINC's client_state.xml: + in.close(); + + return out.str(); +} + // // "Never go to sea with two chronometers; take one or three." // Our three time sources are: diff --git a/src/util.h b/src/util.h index 9a33cf47ba..464427df9c 100644 --- a/src/util.h +++ b/src/util.h @@ -211,6 +211,16 @@ void ReadConfigFile(ArgsMap& mapSettingsRet, ArgsMultiMap& mapMultiSettingsRet); boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true); #endif void ShrinkDebugFile(); + +//! +//! \brief Read the contents of the specified file into memory. +//! +//! \param filepath The path to the file. Provide absolute paths when possible. +//! +//! \return The file contents as a string. +//! +std::string GetFileContents(std::string filepath); + int GetRandInt(int nMax); uint64_t GetRand(uint64_t nMax); uint256 GetRandHash(); From 22dd25b054b2e0837e78af188ed8f6eb020b2007 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 8 Jun 2019 13:35:05 -0500 Subject: [PATCH 039/115] Remove deprecated fields from MiningCPID and StructCPID --- src/contract/polls.cpp | 6 +- src/global_objects_noui.hpp | 23 ------ src/kernel.cpp | 2 +- src/main.cpp | 138 +++++++++++++++--------------------- src/miner.cpp | 11 --- src/rpcblockchain.cpp | 23 +----- src/test/gridcoin_tests.cpp | 2 - 7 files changed, 63 insertions(+), 142 deletions(-) diff --git a/src/contract/polls.cpp b/src/contract/polls.cpp index 2cd60130db..d2d979c902 100644 --- a/src/contract/polls.cpp +++ b/src/contract/polls.cpp @@ -82,10 +82,6 @@ std::pair CreateVoteContract(std::string sTitle, std:: //6-20-2015 double nBalance = GetTotalBalance(); uint256 hashRand = GetRandHash(); - std::string email = GetArgument("email", "NA"); - boost::to_lower(email); - GlobalCPUMiningCPID.email = email; - GlobalCPUMiningCPID.lastblockhash = GlobalCPUMiningCPID.cpidhash; if (!PollExists(sTitle)) return std::make_pair("Error", "Poll does not exist."); if (PollExpired(sTitle)) @@ -125,7 +121,7 @@ std::pair CreateVoteContract(std::string sTitle, std:: return std::make_pair("Error", "Sorry, When voting in a Both Share Type poll, your stake age Or your CPID age must be older than the poll duration."); else { - std::string voter = ""+GlobalCPUMiningCPID.cpidv2 + "" + std::string voter = "" + GlobalCPUMiningCPID.cpid + "" + GRCAddress + "" + hashRand.GetHex() + "" + RoundToString(nBalance,2) + "" + RoundToString(dmag,0) + ""; diff --git a/src/global_objects_noui.hpp b/src/global_objects_noui.hpp index e7d6c44cc8..d4048243e2 100755 --- a/src/global_objects_noui.hpp +++ b/src/global_objects_noui.hpp @@ -8,7 +8,6 @@ extern int nBoincUtilization; extern std::string sRegVer; -extern int nRegVersion; extern bool bNetAveragesLoaded; extern bool bForceUpdate; extern bool fQtActive; @@ -19,19 +18,10 @@ struct StructCPID bool initialized; bool Iscpidvalid; - double utc; - double rectime; - double age; - double verifiedutc; - double verifiedage; - uint32_t entries; - double NetworkProjects; double Magnitude; - double PaymentMagnitude; double owed; double payments; double interestPayments; - double verifiedMagnitude; double TotalMagnitude; uint32_t LowLockTime; uint32_t HighLockTime; @@ -47,12 +37,8 @@ struct StructCPID double NetworkMagnitude; double NetworkAvgMagnitude; std::string cpid; - std::string cpidhash; - std::string projectname; std::string team; - std::string boincpublickey; std::string errors; - std::string cpidv2; std::string BlockHash; std::set rewardBlocks; }; @@ -64,23 +50,14 @@ struct MiningCPID double RSAWeight; double LastPaymentTime; double ResearchSubsidy; - double ResearchSubsidy2; double ResearchAge; double ResearchMagnitudeUnit; double ResearchAverageMagnitude; double InterestSubsidy; - std::string projectname; - std::string encboincpublickey; std::string cpid; - std::string cpidhash; - std::string enccpid; - std::string aesskein; - std::string encaes; std::string clientversion; - std::string cpidv2; std::string email; - std::string boincruntimepublickey; std::string GRCAddress; std::string lastblockhash; std::string Organization; diff --git a/src/kernel.cpp b/src/kernel.cpp index 7608a94fa7..98c41abf47 100644 --- a/src/kernel.cpp +++ b/src/kernel.cpp @@ -520,7 +520,7 @@ static bool CheckStakeKernelHashV1(unsigned int nBits, const CBlock& blockFrom, //Use this area to log the submitters cpid and mint amount: if (!checking_local || fDebug) { - if (LessVerbose(75)) LogPrintf("{Vitals}: cpid %s, project %s, RSA_WEIGHT: %" PRId64, cpid, boincblock.projectname, RSA_WEIGHT); + if (LessVerbose(75)) LogPrintf("{Vitals}: cpid %s, RSA_WEIGHT: %" PRId64, cpid, RSA_WEIGHT); } return false; } diff --git a/src/main.cpp b/src/main.cpp index 82e5cad33d..b385f101ee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -731,12 +731,6 @@ MiningCPID GetInitializedGlobalCPUMiningCPID(std::string cpid) mc.initialized = true; mc.cpid=cpid; mc.projectname = cpid; - mc.cpidv2=cpid; - mc.cpidhash = ""; - mc.email = cpid; - mc.boincruntimepublickey = cpid; - mc.encboincpublickey = ""; - mc.enccpid = ""; mc.Magnitude = 0; mc.clientversion = ""; mc.RSAWeight = GetRSAWeightByCPID(cpid); @@ -817,26 +811,15 @@ MiningCPID GetNextProject(bool bForce) { if (true) { - GlobalCPUMiningCPID.enccpid = structcpid.boincpublickey; - if (true) { - GlobalCPUMiningCPID.email = email; - if (LessVerbose(1) || fDebug || fDebug3) LogPrintf("Ready to CPU Mine project %s with CPID %s", structcpid.projectname.c_str(),structcpid.cpid.c_str()); //Required for project to be mined in a block: GlobalCPUMiningCPID.cpid=structcpid.cpid; GlobalCPUMiningCPID.projectname = structcpid.projectname; - GlobalCPUMiningCPID.encboincpublickey = structcpid.boincpublickey; - GlobalCPUMiningCPID.encaes = structcpid.boincpublickey; - - GlobalCPUMiningCPID.boincruntimepublickey = structcpid.cpidhash; - if(fDebug) LogPrintf("GNP: Setting bpk to %s",structcpid.cpidhash); - - GlobalCPUMiningCPID.cpidv2 = structcpid.cpid; GlobalCPUMiningCPID.lastblockhash = "0"; // Sign the block GlobalCPUMiningCPID.BoincPublicKey = GetBeaconPublicKey(structcpid.cpid, false); @@ -852,7 +835,7 @@ MiningCPID GetNextProject(bool bForce) GlobalCPUMiningCPID.BoincSignature = sSignature; if (!IsCPIDValidv2(GlobalCPUMiningCPID,1)) { - LogPrintf("CPID INVALID (GetNextProject) %s, %s ",GlobalCPUMiningCPID.cpid,GlobalCPUMiningCPID.cpidv2); + LogPrintf("CPID INVALID (GetNextProject) %s, ",GlobalCPUMiningCPID.cpid); continue; } # else @@ -3164,8 +3147,8 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck, boo { if( GetBadBlocks().count(pindex->GetBlockHash())==0 ) return DoS(20, error( - "ConnectBlock[ResearchAge]: Bad CPID or Block Signature : CPID %s, cpidv2 %s, LBH %s, Bad Hashboinc [%s]", - bb.cpid.c_str(), bb.cpidv2.c_str(), + "ConnectBlock[ResearchAge]: Bad CPID or Block Signature : CPID %s, LBH %s, Bad Hashboinc [%s]", + bb.cpid.c_str(), bb.lastblockhash.c_str(), vtx[0].hashBoinc.c_str())); else LogPrintf("WARNING: ignoring invalid hashBoinc signature on block %s", pindex->GetBlockHash().ToString()); } @@ -3987,8 +3970,8 @@ bool CBlock::CheckBlock(std::string sCaller, int height1, int64_t Mint, bool fCh || bb.BoincSignature.find(' ') != std::string::npos) { return DoS(20, error( - "Bad CPID or Block Signature : height %i, CPID %s, cpidv2 %s, LBH %s, Bad Hashboinc [%s]", - height1, bb.cpid.c_str(), bb.cpidv2.c_str(), + "Bad CPID or Block Signature : height %i, CPID %s, LBH %s, Bad Hashboinc [%s]", + height1, bb.cpid.c_str(), bb.lastblockhash.c_str(), vtx[0].hashBoinc.c_str())); } } @@ -5145,7 +5128,6 @@ void AddResearchMagnitude(CBlockIndex* pIndex) if (pIndex->nTime > stMag.HighLockTime) stMag.HighLockTime = pIndex->nTime; - stMag.entries++; stMag.payments += pIndex->nResearchSubsidy; stMag.interestPayments += pIndex->nInterestSubsidy; double total_owed = 0; @@ -5524,7 +5506,6 @@ bool TallyResearchAverages_retired(CBlockIndex* index) LogPrintf("Min block %i, Rows %i", pblockindex->nHeight, iRow); StructCPID& network = GetInitializedStructCPID2("NETWORK",mvNetworkCopy); - network.projectname="NETWORK"; network.payments = NetworkPayments; network.InterestSubsidy = NetworkInterest; mvNetworkCopy["NETWORK"] = network; @@ -5643,7 +5624,6 @@ bool TallyResearchAverages_v9(CBlockIndex* index) if (pblockindex) { StructCPID& network = GetInitializedStructCPID2("NETWORK",mvNetworkCopy); - network.projectname="NETWORK"; network.payments = NetworkPayments; network.InterestSubsidy = NetworkInterest; mvNetworkCopy["NETWORK"] = network; @@ -6977,8 +6957,6 @@ std::string SerializeBoincBlock(MiningCPID mcpid, int BlockVersion) mcpid.Organization = GetArg("-org", "windows"); mcpid.OrganizationKey = "12345678"; //Only reveal 8 characters } - else - mcpid.projectname.clear(); mcpid.LastPORBlockHash = GetLastPORBlockHash(mcpid.cpid); @@ -6990,22 +6968,39 @@ std::string SerializeBoincBlock(MiningCPID mcpid, int BlockVersion) mcpid.BoincPublicKey = GetBeaconPublicKey(mcpid.cpid, false); } - std::string bb = mcpid.cpid + delim + mcpid.projectname + delim + mcpid.aesskein + delim + "" - + delim + "" + delim + "" - + delim + mcpid.enccpid - + delim + mcpid.encaes + delim + "" + delim + "" + // Note: Commented-out items recorded to document removed fields: + // + std::string bb = mcpid.cpid + + delim // + mcpid.projectname // Obsolete + + delim // + mcpid.aesskein // Obsolete + + delim // + RoundToString(mcpid.rac,0) // Obsolete + + delim // + RoundToString(mcpid.pobdifficulty,5) // Obsolete + + delim // + RoundToString((double)mcpid.diffbytes,0) // Obsolete + + delim // + mcpid.enccpid // Obsolete + + delim // + mcpid.encaes // Obsolete + + delim // + RoundToString(mcpid.nonce,0) // Obsolete + + delim // + RoundToString(mcpid.NetworkRAC,0) // Obsolete + delim + version + delim + RoundToString(mcpid.ResearchSubsidy,subsidy_places) + delim + RoundToString(mcpid.LastPaymentTime,0) + delim + RoundToString(mcpid.RSAWeight,0) - + delim + mcpid.cpidv2 + + delim // + mcpid.cpidv2 // Obsolete + delim + RoundToString(mcpid.Magnitude,0) - + delim + mcpid.GRCAddress + delim + mcpid.lastblockhash - + delim + RoundToString(mcpid.InterestSubsidy,subsidy_places) + delim + mcpid.Organization - + delim + mcpid.OrganizationKey + delim + mcpid.NeuralHash + delim + mcpid.superblock - + delim + RoundToString(mcpid.ResearchSubsidy2,2) + delim + RoundToString(mcpid.ResearchAge,6) - + delim + RoundToString(mcpid.ResearchMagnitudeUnit,6) + delim + RoundToString(mcpid.ResearchAverageMagnitude,2) - + delim + mcpid.LastPORBlockHash + delim + mcpid.CurrentNeuralHash + delim + mcpid.BoincPublicKey + delim + mcpid.BoincSignature; + + delim + mcpid.GRCAddress + + delim + mcpid.lastblockhash + + delim + RoundToString(mcpid.InterestSubsidy,subsidy_places) + + delim + mcpid.Organization + + delim + mcpid.OrganizationKey + + delim + mcpid.NeuralHash + + delim + mcpid.superblock + + delim // + RoundToString(mcpid.ResearchSubsidy2,2) // Obsolete + + delim + RoundToString(mcpid.ResearchAge,6) + + delim + RoundToString(mcpid.ResearchMagnitudeUnit,6) + + delim + RoundToString(mcpid.ResearchAverageMagnitude,2) + + delim + mcpid.LastPORBlockHash + + delim + mcpid.CurrentNeuralHash + + delim + mcpid.BoincPublicKey + + delim + mcpid.BoincSignature; return bb; } @@ -7021,17 +7016,23 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) std::vector s = split(block,"<|>"); if (s.size() > 7) { + // Note: Commented-out items recorded to document removed fields: + // surrogate.cpid = s[0]; - surrogate.projectname = s[1]; - boost::to_lower(surrogate.projectname); - surrogate.aesskein = s[2]; - surrogate.enccpid = s[6]; - surrogate.encboincpublickey = s[6]; - surrogate.encaes = s[7]; - if (s.size() > 9) - { - // Obsoleted network RAC. - } + //surrogate.projectname = s[1]; // Obsolete + //boost::to_lower(surrogate.projectname); // Obsolete + //surrogate.aesskein = s[2]; // Obsolete + //surrogate.rac = RoundFromString(s[3],0); // Obsolete + //surrogate.pobdifficulty = RoundFromString(s[4],6); // Obsolete + //surrogate.diffbytes = (unsigned int)RoundFromString(s[5],0); // Obsolete + //surrogate.enccpid = s[6]; // Obsolete + //surrogate.encboincpublickey = s[6]; // Obsolete + //surrogate.encaes = s[7]; // Obsolete + //surrogate.nonce = RoundFromString(s[8],0); // Obsolete + //if (s.size() > 9) + //{ + // surrogate.NetworkRAC = RoundFromString(s[9],0); // Obsolete + //} if (s.size() > 10) { surrogate.clientversion = s[10]; @@ -7048,10 +7049,10 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) { surrogate.RSAWeight = RoundFromString(s[13],0); } - if (s.size() > 14) - { - surrogate.cpidv2 = s[14]; - } + //if (s.size() > 14) + //{ + // surrogate.cpidv2 = s[14]; // Obsolete + //} if (s.size() > 15) { surrogate.Magnitude = RoundFromString(s[15],0); @@ -7084,10 +7085,11 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) { surrogate.superblock = s[22]; } - if (s.size() > 23) - { - surrogate.ResearchSubsidy2 = RoundFromString(s[23],subsidy_places); - } + //if (s.size() > 23) + //{ + // // Obsolete + // surrogate.ResearchSubsidy2 = RoundFromString(s[23],subsidy_places); + //} if (s.size() > 24) { surrogate.ResearchAge = RoundFromString(s[24],6); @@ -7187,11 +7189,8 @@ void HarvestCPIDs(bool cleardata) std::string email_hash = ExtractXML(vCPID[i],"",""); std::string cpidhash = ExtractXML(vCPID[i],"",""); std::string externalcpid = ExtractXML(vCPID[i],"",""); - std::string utc=ExtractXML(vCPID[i],"",""); - std::string rac=ExtractXML(vCPID[i],"",""); std::string proj=ExtractXML(vCPID[i],"",""); std::string team=ExtractXML(vCPID[i],"",""); - std::string rectime = ExtractXML(vCPID[i],"",""); proj = LowerUnderscore(proj); int64_t nStart = GetTimeMillis(); @@ -7202,13 +7201,10 @@ void HarvestCPIDs(bool cleardata) to_lower(cpid_non); StructCPID& structcpid = GetInitializedStructCPID2(proj,mvCPIDs); iRow++; - structcpid.cpidhash = cpidhash; structcpid.projectname = proj; boost::to_lower(team); structcpid.team = team; structcpid.cpid = externalcpid; - structcpid.boincpublickey = AdvancedCrypt(cpid_non); - structcpid.cpidv2 = externalcpid; structcpid.Iscpidvalid = mining_id.Which() == NN::MiningId::Kind::CPID; int64_t elapsed = GetTimeMillis()-nStart; @@ -7228,11 +7224,6 @@ void HarvestCPIDs(bool cleardata) structcpid.errors = "CPID calculation invalid. Check e-mail address and try resetting the boinc project."; } - structcpid.utc = RoundFromString(utc,0); - structcpid.rectime = RoundFromString(rectime,0); - double currenttime = GetAdjustedTime(); - double nActualTimespan = currenttime - structcpid.rectime; - structcpid.age = nActualTimespan; std::string sKey = structcpid.cpid + ":" + proj; mvCPIDs[proj] = structcpid; @@ -7273,9 +7264,6 @@ void HarvestCPIDs(bool cleardata) // Verify the CPID is a valid researcher: if (IsResearcher(structcpid.cpid)) { - GlobalCPUMiningCPID.cpidhash = cpidhash; - GlobalCPUMiningCPID.email = email; - GlobalCPUMiningCPID.boincruntimepublickey = cpidhash; LogPrintf("Setting bpk to %s", cpidhash); if (structcpid.team=="gridcoin") @@ -7323,19 +7311,10 @@ StructCPID GetStructCPID() { StructCPID c; c.initialized=false; - c.utc=0; - c.rectime=0; - c.age = 0; - c.verifiedutc=0; - c.verifiedage=0; - c.entries=0; - c.NetworkProjects=0; c.Iscpidvalid=false; c.Magnitude=0; - c.PaymentMagnitude=0; c.owed=0; c.payments=0; - c.verifiedMagnitude=0; c.TotalMagnitude=0; c.LowLockTime=0; c.HighLockTime=0; @@ -7366,7 +7345,6 @@ MiningCPID GetMiningCPID() mc.LastPaymentTime=0; mc.ResearchSubsidy = 0; mc.InterestSubsidy = 0; - mc.ResearchSubsidy2 = 0; mc.ResearchAge = 0; mc.ResearchMagnitudeUnit = 0; mc.ResearchAverageMagnitude = 0; diff --git a/src/miner.cpp b/src/miner.cpp index 9f4ea7274e..3edd69cb55 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -973,7 +973,6 @@ bool CreateGridcoinReward(CBlock &blocknew, MiningCPID& miningcpid, uint64_t &nC miningcpid.lastblockhash = pbh.GetHex(); miningcpid.ResearchSubsidy = OUT_POR; - miningcpid.ResearchSubsidy2 = OUT_POR; miningcpid.ResearchAge = dAccrualAge; miningcpid.ResearchMagnitudeUnit = dAccrualMagnitudeUnit; miningcpid.ResearchAverageMagnitude = dAccrualMagnitude; @@ -984,16 +983,6 @@ bool CreateGridcoinReward(CBlock &blocknew, MiningCPID& miningcpid, uint64_t &nC miningcpid.superblock = ""; miningcpid.GRCAddress = DefaultWalletAddress(); - // Make sure this deprecated fields are empty - miningcpid.cpidv2.clear(); - miningcpid.email.clear(); - miningcpid.boincruntimepublickey.clear(); - miningcpid.aesskein.clear(); - miningcpid.enccpid.clear(); - miningcpid.encboincpublickey.clear(); - miningcpid.encaes.clear(); - - int64_t RSA_WEIGHT = GetRSAWeightByBlock(miningcpid); GlobalCPUMiningCPID.lastblockhash = miningcpid.lastblockhash; diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 7c2a902997..b58f62bac3 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -204,7 +204,6 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fP result.pushKV("CPID", bb.cpid); if (!IsResearchAgeEnabled(blockindex->nHeight)) { - result.pushKV("ProjectName", bb.projectname); result.pushKV("RSAWeight",bb.RSAWeight); } @@ -228,7 +227,6 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fP } result.pushKV("ClientVersion",bb.clientversion); - if (!bb.cpidv2.empty()) result.pushKV("CPIDv2",bb.cpidv2.substr(0,32)); bool IsCPIDValid2 = IsCPIDValidv2(bb,blockindex->nHeight); result.pushKV("CPIDValid",IsCPIDValid2); @@ -633,7 +631,6 @@ bool TallyMagnitudesInSuperblock() double NetworkAvgMagnitude = TotalNetworkMagnitude / (TotalNetworkEntries+.01); // Store the Total Network Magnitude: StructCPID& network = GetInitializedStructCPID2("NETWORK",mvNetworkCopy); - network.projectname="NETWORK"; network.NetworkMagnitude = TotalNetworkMagnitude; network.NetworkAvgMagnitude = NetworkAvgMagnitude; if (fDebug) @@ -656,7 +653,6 @@ bool TallyMagnitudesInSuperblock() if (project.length() > 1) { StructCPID& stProject = GetInitializedStructCPID2(project,mvNetworkCopy); - stProject.projectname = project; //As of 7-16-2015, start pulling in Total RAC mvNetworkCopy[project]=stProject; TotalProjects++; @@ -664,7 +660,6 @@ bool TallyMagnitudesInSuperblock() } } } - network.NetworkProjects = TotalProjects; mvNetworkCopy["NETWORK"] = network; if (fDebug3) LogPrintf(".TMS43."); return true; @@ -707,16 +702,6 @@ bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::str } uint256 hashRand = GetRandHash(); - std::string email = GetArgument("email", "NA"); - boost::to_lower(email); - GlobalCPUMiningCPID.email=email; - - if (!NN::Cpid::Parse(GlobalCPUMiningCPID.cpid).Matches(GlobalCPUMiningCPID.boincruntimepublickey, email)) - { - sError="Invalid CPID"; - return false; - } - double nBalance = GetTotalBalance(); if (nBalance < 1.01) { @@ -734,11 +719,10 @@ bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::str // Convert the new pubkey into legacy hex format sOutPubKey = HexStr(keyBeacon.GetPubKey().Raw()); - GlobalCPUMiningCPID.lastblockhash = GlobalCPUMiningCPID.cpidhash; std::string sParam = SerializeBoincBlock(GlobalCPUMiningCPID,pindexBest->nVersion); std::string GRCAddress = DefaultWalletAddress(); // Public Signing Key is stored in Beacon - std::string contract = GlobalCPUMiningCPID.cpidv2 + ";" + hashRand.GetHex() + ";" + GRCAddress + ";" + sOutPubKey; + std::string contract = "UNUSED;" + hashRand.GetHex() + ";" + GRCAddress + ";" + sOutPubKey; LogPrintf("Creating beacon for cpid %s, %s",GlobalCPUMiningCPID.cpid, contract); std::string sBase = EncodeBase64(contract); std::string sAction = "add"; @@ -1890,9 +1874,9 @@ UniValue network(const UniValue& params, bool fHelp) { UniValue results(UniValue::VOBJ); - results.pushKV("Project", stNet.projectname); + results.pushKV("Project", (*ii).first); - if (stNet.projectname == "NETWORK") + if ((*ii).first == "NETWORK") { double MaximumEmission = BLOCKS_PER_DAY*GetMaximumBoincSubsidy(GetAdjustedTime()); double MoneySupply = DoubleFromAmount(pindexBest->nMoneySupply); @@ -2540,7 +2524,6 @@ UniValue MagnitudeReport(std::string cpid) entry.pushKV("CPID",structMag.cpid); entry.pushKV("Last Block Paid",structMag.LastBlock); entry.pushKV("DPOR Magnitude", structMag.Magnitude); - entry.pushKV("Payment Magnitude",structMag.PaymentMagnitude); entry.pushKV("Payment Timespan (Days)",structMag.PaymentTimespan); entry.pushKV("Total Earned (14 days)",structMag.totalowed); entry.pushKV("DPOR Payments (14 days)",structMag.payments); diff --git a/src/test/gridcoin_tests.cpp b/src/test/gridcoin_tests.cpp index cf4dc3c91c..cd9e340932 100755 --- a/src/test/gridcoin_tests.cpp +++ b/src/test/gridcoin_tests.cpp @@ -32,8 +32,6 @@ namespace { // Create a fake CPID StructCPID& cpid = GetInitializedStructCPID2(TEST_CPID, mvMagnitudes); - cpid.projectname = "My Simple Test Project"; - cpid.entries = 1; cpid.cpid = TEST_CPID; cpid.payments = 123; //cpid.EarliestPaymentTime = 1490260000; From e50f7b0b230cedd99cc49cf8ef2a2756d234845a Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 8 Jun 2019 16:23:06 -0500 Subject: [PATCH 040/115] Remove insecure and now unused custom encrypt/decrypt functions Gridcoin added custom encryption functions to obfuscate internal CPIDs and email addresses. Because we don't store this data currently, we can remove these functions. --- src/Makefile.test.include | 1 - src/crypter.cpp | 136 ------------------------------------- src/crypter.h | 7 -- src/rpcblockchain.cpp | 42 ------------ src/rpcserver.cpp | 2 - src/rpcserver.h | 2 - src/test/crypter_tests.cpp | 41 ----------- 7 files changed, 231 deletions(-) delete mode 100755 src/test/crypter_tests.cpp diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 13546d7fac..586215dfaf 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -34,7 +34,6 @@ GRIDCOIN_TESTS =\ test/beacon_tests.cpp \ test/bignum_tests.cpp \ test/block_tests.cpp \ - test/crypter_tests.cpp \ test/getarg_tests.cpp \ test/gridcoin_tests.cpp \ test/key_tests.cpp \ diff --git a/src/crypter.cpp b/src/crypter.cpp index c42c77c74c..07b6a187bc 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -7,19 +7,9 @@ #include #include -#include "util.h" #include "crypter.h" #include "scrypt.h" -#ifdef WIN32 -#include -#endif - -unsigned char chKeyGridcoin[256]; -unsigned char chIVGridcoin[256]; -bool fKeySetGridcoin; -std::string RetrieveMd5(std::string s1); - bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) { if (nRounds < 1 || chSalt.size() != WALLET_CRYPTO_SALT_SIZE) @@ -142,129 +132,3 @@ bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector vchPlaintext, std::vector &vchCiphertext) -{ - LoadGridKey("gridcoin","cqiuehEJ2Tqdov"); - int nLen = vchPlaintext.size(); - int nCLen = nLen + AES_BLOCK_SIZE, nFLen = 0; - vchCiphertext.resize(nCLen); - bool fOk = true; - EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); - if(!ctx) - throw std::runtime_error("Error allocating cipher context"); - - if (fOk) fOk = EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, chKeyGridcoin, chIVGridcoin); - if (fOk) fOk = EVP_EncryptUpdate(ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); - if (fOk) fOk = EVP_EncryptFinal_ex(ctx, (&vchCiphertext[0])+nCLen, &nFLen); - EVP_CIPHER_CTX_free(ctx); - if (!fOk) return false; - vchCiphertext.resize(nCLen + nFLen); - return true; -} - - -bool GridDecrypt(const std::vector& vchCiphertext,std::vector& vchPlaintext) -{ - LoadGridKey("gridcoin","cqiuehEJ2Tqdov"); - int nLen = vchCiphertext.size(); - vchPlaintext.resize(nLen); //plain text will be smaller or eq than ciphertext - int nPLen = nLen, nFLen = 0; - bool fOk = true; - EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); - if(!ctx) - throw std::runtime_error("Error allocating cipher context"); - if (fOk) fOk = EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, chKeyGridcoin, chIVGridcoin); - if (fOk) fOk = EVP_DecryptUpdate(ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); - if (fOk) fOk = EVP_DecryptFinal_ex(ctx, (&vchPlaintext[0])+nPLen, &nFLen); - EVP_CIPHER_CTX_free(ctx); - if (!fOk) return false; - vchPlaintext.resize(nPLen + nFLen); - return true; -} - -char FromUnsigned( unsigned char ch ) -{ - return static_cast< char >( ch ); -} - -std::string UnsignedVectorToString(std::vector< unsigned char > v) -{ - std::string s; - s.reserve( v.size() ); - std::transform( v.begin(), v.end(), back_inserter( s ), FromUnsigned ); - return s; -} - - -std::string AdvancedCrypt(std::string boinchash) -{ - - try - { - std::vector vchSecret( boinchash.begin(), boinchash.end() ); - std::vector vchCryptedSecret; - GridEncrypt(vchSecret, vchCryptedSecret); - std::string encrypted = EncodeBase64(UnsignedVectorToString(vchCryptedSecret)); - return encrypted; - } - catch (std::exception &e) - { - LogPrintf("Error while encrypting %s",boinchash); - return ""; - } - catch(...) - { - LogPrintf("Error while encrypting 2."); - return ""; - } - -} - -std::string AdvancedDecrypt(std::string boinchash_encrypted) -{ - try{ - std::string pre_encrypted_boinchash = DecodeBase64(boinchash_encrypted); - std::vector vchCryptedSecret(pre_encrypted_boinchash.begin(),pre_encrypted_boinchash.end()); - std::vector vchPlaintext; - GridDecrypt(vchCryptedSecret,vchPlaintext); - std::string decrypted = UnsignedVectorToString(vchPlaintext); - return decrypted; - } catch (std::exception &e) - { - LogPrintf("Error while decrypting %s",boinchash_encrypted); - return ""; - } - catch(...) - { - LogPrintf("Error while decrypting 2."); - return ""; - } -} diff --git a/src/crypter.h b/src/crypter.h index 26d6db8cf3..c1eb07e376 100644 --- a/src/crypter.h +++ b/src/crypter.h @@ -122,11 +122,4 @@ class CCrypter bool EncryptSecret(CKeyingMaterial& vMasterKey, const CSecret &vchPlaintext, const uint256& nIV, std::vector &vchCiphertext); bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector &vchCiphertext, const uint256& nIV, CSecret &vchPlaintext); - -std::string AdvancedCrypt(std::string boinchash); -std::string AdvancedDecrypt(std::string boinchash_encrypted); - -bool GridDecrypt(const std::vector& vchCiphertext,std::vector& vchPlaintext); -bool GridEncrypt(std::vector vchPlaintext, std::vector &vchCiphertext); - #endif diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index b58f62bac3..94c98172b0 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -2321,48 +2321,6 @@ UniValue currenttime(const UniValue& params, bool fHelp) return res; } -UniValue decryptphrase(const UniValue& params, bool fHelp) -{ - if (fHelp || params.size() != 1) - throw runtime_error( - "decryptphrase \n" - "\n" - " -> Encrypted phrase to decrypt\n" - "\n" - "Decrypts an encrypted phrase\n"); - - UniValue res(UniValue::VOBJ); - - std::string sParam1 = params[0].get_str(); - std::string test = AdvancedDecrypt(sParam1); - - res.pushKV("Phrase", sParam1); - res.pushKV("Decrypted Phrase", test); - - return res; -} - -UniValue encryptphrase(const UniValue& params, bool fHelp) -{ - if (fHelp || params.size() != 1) - throw runtime_error( - "encryptphrase \n" - "\n" - " Phase you wish to encrypt\n" - "\n" - "Encrypt a phrase\n"); - - UniValue res(UniValue::VOBJ); - - std::string sParam1 = params[0].get_str(); - std::string test = AdvancedCrypt(sParam1); - - res.pushKV("Phrase", sParam1); - res.pushKV("Encrypted Phrase", test); - - return res; -} - UniValue memorypool(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 0) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index d82ad4ec5c..041af75aef 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -409,8 +409,6 @@ static const CRPCCommand vRPCCommands[] = { "getblockchaininfo", &getblockchaininfo, cat_network }, { "getnetworkinfo", &getnetworkinfo, cat_network }, { "currenttime", ¤ttime, cat_network }, - { "decryptphrase", &decryptphrase, cat_network }, - { "encryptphrase", &encryptphrase, cat_network }, { "getaddednodeinfo", &getaddednodeinfo, cat_network }, { "getbestblockhash", &getbestblockhash, cat_network }, { "getblock", &getblock, cat_network }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 9c2a395194..be5b01bba5 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -226,8 +226,6 @@ extern UniValue addnode(const UniValue& params, bool fHelp); extern UniValue addpoll(const UniValue& params, bool fHelp); extern UniValue askforoutstandingblocks(const UniValue& params, bool fHelp); extern UniValue currenttime(const UniValue& params, bool fHelp); -extern UniValue decryptphrase(const UniValue& params, bool fHelp); -extern UniValue encryptphrase(const UniValue& params, bool fHelp); extern UniValue getaddednodeinfo(const UniValue& params, bool fHelp); extern UniValue getbestblockhash(const UniValue& params, bool fHelp); extern UniValue getblock(const UniValue& params, bool fHelp); diff --git a/src/test/crypter_tests.cpp b/src/test/crypter_tests.cpp deleted file mode 100755 index 6aa7634057..0000000000 --- a/src/test/crypter_tests.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "crypter.h" - -#include -#include -#include -#include - -namespace -{ - const std::string PLAINTEXT("0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc"); - const std::string SALT("jfjdslkfjslk4"); -} - -BOOST_AUTO_TEST_SUITE(crypter_tests) - -BOOST_AUTO_TEST_CASE(crypter_GridEncryptShouldProduceCorrectOutput) -{ - const std::vector plaintext(PLAINTEXT.begin(), PLAINTEXT.end()); - std::vector encrypted; - - BOOST_CHECK(GridEncrypt(plaintext, encrypted)); - - // Convert encrypted message to Base64 for easier verification. - std::string encrypted_message(encrypted.begin(), encrypted.end()); - BOOST_CHECK_EQUAL(EncodeBase64(encrypted_message), - "sdENub7Ll+MeRKvGrzOPYuOTQ+Eqlbc1reeD+tdnQ9PcxubYwL883Anxbc7POgmm+wL8AfYEqa4MyeQbPRdL1A=="); -} - -BOOST_AUTO_TEST_CASE(crypter_GridDecryptShouldDecryptValidInput) -{ - const std::vector encrypted = - DecodeBase64("sdENub7Ll+MeRKvGrzOPYuOTQ+Eqlbc1reeD+tdnQ9PcxubYwL883Anxbc7POgmm+wL8AfYEqa4MyeQbPRdL1A=="); - - // GridEncrypt allocates memory in destination while GridDecrypt doesn't. - std::vector plaintext(encrypted.size()); - BOOST_CHECK(GridDecrypt(encrypted, plaintext)); - const std::string decrypted_message(plaintext.begin(), plaintext.end()); - BOOST_CHECK_EQUAL(PLAINTEXT, decrypted_message); -} - -BOOST_AUTO_TEST_SUITE_END() From f7d975feb7aa5d14f6617729ec21bedf8735858c Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 8 Jun 2019 20:54:49 -0500 Subject: [PATCH 041/115] Remove unused GetProofOfWorkReward() function --- src/main.cpp | 21 --------------------- src/main.h | 1 - 2 files changed, 22 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b385f101ee..94d452f21d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1857,27 +1857,6 @@ double CalculatedMagnitude2(std::string cpid, int64_t locktime,bool bUseLederstr return bUseLederstrumpf ? LederstrumpfMagnitude2(stDPOR.Magnitude,locktime) : stDPOR.Magnitude; } - - -// miner's coin base reward -int64_t GetProofOfWorkReward(int64_t nFees, int64_t locktime, int64_t height) -{ - //NOTE: THIS REWARD IS ONLY USED IN THE POW PHASE (Block < 8000): - int64_t nSubsidy = CalculatedMagnitude(locktime,true) * COIN; - if (fDebug && GetBoolArg("-printcreation")) - LogPrintf("GetProofOfWorkReward() : create=%s nSubsidy=%" PRId64, FormatMoney(nSubsidy), nSubsidy); - if (nSubsidy < (30*COIN)) nSubsidy=30*COIN; - //Gridcoin Foundation Block: - if (height==10) - { - nSubsidy = nGenesisSupply * COIN; - } - if (fTestNet) nSubsidy += 1000*COIN; - - return nSubsidy + nFees; -} - - int64_t GetProofOfWorkMaxReward(int64_t nFees, int64_t locktime, int64_t height) { int64_t nSubsidy = (GetMaximumBoincSubsidy(locktime)+1) * COIN; diff --git a/src/main.h b/src/main.h index 81f499ce7d..d57c36ac0c 100644 --- a/src/main.h +++ b/src/main.h @@ -263,7 +263,6 @@ bool CheckProofOfResearch( const CBlock &block); //block to check unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake); -int64_t GetProofOfWorkReward(int64_t nFees, int64_t locktime, int64_t height); int64_t GetConstantBlockReward(const CBlockIndex* index); int64_t ComputeResearchAccrual(int64_t nTime, std::string cpid, std::string operation, CBlockIndex* pindexLast, bool bVerifyingBlock, int VerificationPhase, double& dAccrualAge, double& dMagnitudeUnit, double& AvgMagnitude); int64_t GetProofOfStakeReward(uint64_t nCoinAge, int64_t nFees, std::string cpid, From 99bddd6a28d070704b8852258098f7cc92ef47d6 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 15 Jun 2019 14:22:24 -0500 Subject: [PATCH 042/115] Provide for keying std::unordered_map with NN::Cpid objects --- src/neuralnet/cpid.h | 32 +++++++++++++++++++++++++++++++ src/test/neuralnet/cpid_tests.cpp | 13 +++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/neuralnet/cpid.h b/src/neuralnet/cpid.h index a3dad978f6..4e1731fa53 100644 --- a/src/neuralnet/cpid.h +++ b/src/neuralnet/cpid.h @@ -344,4 +344,36 @@ class MiningId //! boost::variant m_variant; }; // MiningId +} // namespace NN + +namespace std { +//! +//! \brief Specializes std::hash for NN::Cpid. +//! +//! This enables the use of NN::Cpid as a key in a std::unordered_map object. +//! +//! CONSENSUS: Don't use the hash produced by this routine (or by any std::hash +//! specialization) in protocol-specific implementations. It ignores endianness +//! and outputs a value with a chance of collision probably too great for usage +//! besides the intended local look-up functionality. +//! +template<> +struct hash +{ + //! + //! \brief Create a hash of the supplied CPID object. + //! + //! \param cpid Contains the bytes to hash. + //! + //! \return A hash as the sum of the two halves of the bytes in the CPID. + //! + size_t operator()(const NN::Cpid& cpid) const + { + // Just convert the CPID into a value that we can store in a size_t + // object. CPIDs are already unique identifiers. + // + return *reinterpret_cast(cpid.Raw().data()) + + *reinterpret_cast(cpid.Raw().data() + 8); + } +}; } diff --git a/src/test/neuralnet/cpid_tests.cpp b/src/test/neuralnet/cpid_tests.cpp index 2863c85dc1..0dc7ca2d80 100644 --- a/src/test/neuralnet/cpid_tests.cpp +++ b/src/test/neuralnet/cpid_tests.cpp @@ -182,6 +182,19 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) BOOST_CHECK(bytes == expected); } +BOOST_AUTO_TEST_CASE(it_is_hashable_to_key_a_lookup_map) +{ + NN::Cpid cpid(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + std::hash hasher; + + // 0x0706050403020100 + 0x1514131211100908 (CPID halves, little endian) + BOOST_CHECK(hasher(cpid) == 2024957465561532936); +} + BOOST_AUTO_TEST_SUITE_END() // ----------------------------------------------------------------------------- From 3ed205935b8f845ed8af1a1c9efa0a258669debd Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 16 Jun 2019 20:53:25 -0400 Subject: [PATCH 043/115] Improve convergence reporting Also minor other cleanup. Some structures in ConveredManifest and the cache added here may be eliminated after testing/fine-tuning. --- src/qt/bitcoingui.cpp | 76 +++++++++++++++++++++----- src/scraper/fwd.h | 26 ++++++++- src/scraper/scraper.cpp | 115 +++++++++++++++++++++++++++++++++++----- 3 files changed, 189 insertions(+), 28 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 9f6ba8814e..5a03a03e69 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -1452,16 +1452,17 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) int64_t nConvergenceTime = ConvergedScraperStatsCache.nTime; - std::string sExcludedProjects = {}; + std::string sExcludedProjects; + std::string sIncludedScrapers; + std::string sExcludedScrapers; + std::string sScrapersNotPublishing; - bool bExcludedProjects = false; + bool bDisplayScrapers = false; - // If the convergence cache has excluded projects... - if (ConvergedScraperStatsCache.vExcludedProjects.size()) + // If the convergence cache has excluded projects and/or is in fallback (by parts)... + if (ConvergedScraperStatsCache.Convergence.vExcludedProjects.size() || ConvergedScraperStatsCache.Convergence.bByParts) { - bExcludedProjects = true; - - for (const auto& iter : ConvergedScraperStatsCache.vExcludedProjects) + for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedProjects) { if (sExcludedProjects.empty()) sExcludedProjects += iter.first; @@ -1470,6 +1471,43 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) } } + if (ConvergedScraperStatsCache.Convergence.vExcludedProjects.empty()) sExcludedProjects = "none"; + + // If fDebug3 then show scrapers in tooltip... + if (fDebug3) + { + bDisplayScrapers = true; + + for (const auto& iter : ConvergedScraperStatsCache.Convergence.vIncludedScrapers) + { + if (sIncludedScrapers.empty()) + sIncludedScrapers += iter; + else + sIncludedScrapers += ", " + iter; + } + + for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedScrapers) + { + if (sExcludedScrapers.empty()) + sExcludedScrapers += iter; + else + sExcludedScrapers += ", " + iter; + } + + if (ConvergedScraperStatsCache.Convergence.vExcludedScrapers.empty()) sExcludedScrapers = "none"; + + for (const auto& iter : ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing) + { + if (sScrapersNotPublishing.empty()) + sScrapersNotPublishing += iter; + else + sScrapersNotPublishing += ", " + iter; + } + + if (ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing.empty()) sScrapersNotPublishing = "none"; + } + + if (scraperEventtype == (int)scrapereventtypes::OutOfSync && status == CT_UPDATING) { labelScraperIcon->setPixmap(QIcon(":/icons/notsynced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); @@ -1490,12 +1528,26 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) { labelScraperIcon->setPixmap(QIcon(":/icons/staking_on").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); - if (!bExcludedProjects) - labelScraperIcon->setToolTip(tr("Scraper: Convergence achieved, date/time %1." - " All projects on whitelist included.").arg(QString(DateTimeStrFormat("%x %H:%M:%S", nConvergenceTime).c_str()))); + if (bDisplayScrapers) + { + labelScraperIcon->setToolTip(tr("Scraper: Convergence achieved, date/time %1 UTC. \n" + "Project(s) excluded: %2. \n" + "Scrapers included: %3. \n" + "Scraper(s) excluded: %4. \n" + "Scraper(s) not publishing: %5.") + .arg(QString(DateTimeStrFormat("%x %H:%M:%S", nConvergenceTime).c_str())) + .arg(QString(sExcludedProjects.c_str())) + .arg(QString(sIncludedScrapers.c_str())) + .arg(QString(sExcludedScrapers.c_str())) + .arg(QString(sScrapersNotPublishing.c_str()))); + } else - labelScraperIcon->setToolTip(tr("Scraper: Convergence achieved, date/time %1 UTC." - " Project(s) excluded: %2.").arg(QString(DateTimeStrFormat("%x %H:%M:%S", nConvergenceTime).c_str())).arg(QString(sExcludedProjects.c_str()))); + { + labelScraperIcon->setToolTip(tr("Scraper: Convergence achieved, date/time %1 UTC. \n" + " Project(s) excluded: %2.") + .arg(QString(DateTimeStrFormat("%x %H:%M:%S", nConvergenceTime).c_str())) + .arg(QString(sExcludedProjects.c_str()))); + } } else if ((scraperEventtype == (int)scrapereventtypes::Convergence || scraperEventtype == (int)scrapereventtypes::SBContract) && status == CT_DELETED) diff --git a/src/scraper/fwd.h b/src/scraper/fwd.h index 994fd79270..c5fe9f2552 100644 --- a/src/scraper/fwd.h +++ b/src/scraper/fwd.h @@ -53,13 +53,33 @@ typedef std::map mConvergedManifestParts; struct ConvergedManifest { // IMPORTANT... nContentHash is NOT the hash of part hashes in the order of vParts unlike CScraper::manifest. - // It is the hash of the data in the ConvergedManifestPartsMap in the order of the key. + // It is the hash of the data in the ConvergedManifestPartsMap in the order of the key. It represents + // the composite convergence by taking parts piecewise in the case of the fallback to bByParts (project) level. uint256 nContentHash; uint256 ConsensusBlock; int64_t timestamp; bool bByParts; mConvergedManifestParts ConvergedManifestPartsMap; + + // Used when convergence is at the manifest level (normal) + std::map mIncludedScraperManifests; + + // Used when convergence is at the manifest level (normal) and also at the part (project) level for + // scrapers that are not part of any part (project) level convergence. + std::vector vIncludedScrapers; + std::vector vExcludedScrapers; + std::vector vScrapersNotPublishing; + + // Used when convergence is at the project (bByParts) level (fallback) + // ----- Project --------- ScraperID + std::multimap mIncludedScrapersbyProject; + // ----- ScraperID ------- Project + std::multimap mIncludedProjectsbyScraper; + // When bByParts (project) level convergence occurs, this records the the count of scrapers in the + // convergences by project. + std::map mScraperConvergenceCountbyProject; + // ------------------ project ----- reason for exclusion std::vector> vExcludedProjects; }; @@ -98,11 +118,13 @@ typedef std::map> vExcludedProjects; + + ConvergedManifest Convergence; }; // Extended AppCache structures similar to those in AppCache.h, except a deleted flag is provided diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 994779255b..c2e3088df4 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -3515,7 +3515,7 @@ bool ScraperSendFileManifestContents(CBitcoinAddress& Address, CKey& Key) for (auto const& entry : StructScraperFileManifest.mScraperFileManifest) { // If SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES is false, only include current files to send across the network. - // Also continue (exlude) if it is a non-publishable entry (excludefromcsmanifest is true). + // Also continue (exclude) if it is a non-publishable entry (excludefromcsmanifest is true). if ((!SCRAPER_CMANIFEST_INCLUDE_NONCURRENT_PROJ_FILES && !entry.second.current) || entry.second.excludefromcsmanifest) continue; @@ -3683,6 +3683,48 @@ bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifes + " with " + std::to_string(nIdenticalContentManifestCount) + " scrapers out of " + std::to_string(nScraperCount) + " agreeing."); + _log(logattribute::INFO, "ScraperConstructConvergedManifest", "Content hash " + iter.second.GetHex()); + + auto ConvergenceRange = mManifestsBinnedbyContent.equal_range(iter.second); + + // Record included scrapers in convergence. + for (auto iter2 = ConvergenceRange.first; iter2 != ConvergenceRange.second; ++iter2) + { + // ------------------------------------------------- ScraperID ------------ manifest hash + StructConvergedManifest.mIncludedScraperManifests[iter2->second.first] = iter2->second.second; + } + + // Record scrapers that are not part of the convergence by iterating through the top level of the double map (which is keyed by ScraperID) + for (const auto& iScraper : mMapCSManifestsBinnedByScraper) + { + // If the scraper is not found in the mIncludedScraperManifests, then it was not part of the convergence. + if (StructConvergedManifest.mIncludedScraperManifests.find(iScraper.first) == StructConvergedManifest.mIncludedScraperManifests.end()) + { + StructConvergedManifest.vExcludedScrapers.push_back(iScraper.first); + _log(logattribute::INFO, "ScraperConstructConvergedManifest", "Scraper " + iScraper.first + " not in convergence."); + } + else + { + StructConvergedManifest.vIncludedScrapers.push_back(iScraper.first); + // Scraper was in the convergence. Log if in fDebug3. + _log(logattribute::INFO, "ScraperConstructConvergedManifest", "Scraper " + iScraper.first + " in convergence."); + } + } + + // Retrieve the complete list of scrapers from the AppCache to determine scrapers not publishing at all. + AppCacheSection mScrapers = ReadCacheSection(Section::SCRAPER); + + for (const auto& iScraper : mScrapers) + { + if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vExcludedScrapers) + && std::find(std::begin(StructConvergedManifest.vIncludedScrapers), std::end(StructConvergedManifest.vIncludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vIncludedScrapers)) + { + StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + } + } + bConvergenceSuccessful = true; // Note this break is VERY important, it prevents considering essentially the same manifest that meets convergence multiple times. @@ -3754,19 +3796,11 @@ bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifes StructConvergedManifest.nContentHash = Hash(ss2.begin(), ss2.end()); - // Fill out the excluded projects vector... + // Determine if there is an excluded project. If so, set convergence back to false and drop back to project level to try and recover project by project. for (const auto& iProjects : projectWhitelist) { if (StructConvergedManifest.ConvergedManifestPartsMap.find(iProjects.m_name) == StructConvergedManifest.ConvergedManifestPartsMap.end()) { - // Project in whitelist was not in the map, so it goes in the exclusion vector. - //StructConvergedManifest.vExcludedProjects.push_back(std::make_pair(iProjects.m_name, "Converged manifests (agreed by multiple scrapers) excluded project.")); - //_log(logattribute::WARNING, "ScraperConstructConvergedManifestByProject", "Project " - // + iProjects.m_name - // + " was excluded because the converged manifests from the scrapers all excluded the project."); - - // To deal with a corner case of a medium term project fallout at the head of the list (more recent) where it is still available within - // the 48 hour retention window, fallback to project level convergence to attempt to recover the project. _log(logattribute::WARNING, "ScraperConstructConvergedManifestByProject", "Project " + iProjects.m_name + " was excluded because the converged manifests from the scrapers all excluded the project. \n" @@ -3920,7 +3954,7 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro unsigned int nIdenticalContentManifestCount = mProjectObjectsBinnedbyContent.count(std::get<0>(iter.second)); if (nIdenticalContentManifestCount >= NumScrapersForSupermajority(nScraperCount)) { - // Find the first one of equivalent parts ------------------ by hash. + // Find the first one of equivalent parts ------------------ by object hash. ProjectConvergence = mProjectObjectsBinnedbyContent.find(std::get<0>(iter.second)); _log(logattribute::INFO, "ScraperConstructConvergedManifestByProject", "Found convergence on project object " + ProjectConvergence->first.GetHex() @@ -3928,7 +3962,7 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro + " with " + std::to_string(nIdenticalContentManifestCount) + " scrapers out of " + std::to_string(nScraperCount) + " agreeing."); - // Get the actual part ----------------- by hash. + // Get the actual part ----------------- by object hash. auto iPart = CSplitBlob::mapParts.find(std::get<0>(iter.second)); uint256 nContentHashCheck = Hash(iPart->second.data.begin(), iPart->second.data.end()); @@ -3940,6 +3974,18 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro break; } + auto ProjectConvergenceRange = mProjectObjectsBinnedbyContent.equal_range(std::get<0>(iter.second)); + + // Record included scrapers included for the project level convergence keyed by project and the reverse. A multimap is convenient here for both. + for (auto iter2 = ProjectConvergenceRange.first; iter2 != ProjectConvergenceRange.second; ++iter2) + { + // ------------------------------------------------------------------------- project -------------- ScraperID. + StructConvergedManifest.mIncludedScrapersbyProject.insert(std::make_pair(iter2->second.second, iter2->second.first)); + // ------------------------------------------------------------------------ ScraperID -------------- project. + StructConvergedManifest.mIncludedProjectsbyScraper.insert(std::make_pair(iter2->second.first, iter2->second.second)); + } + + // Put Project Object (Part) in StructConvergedManifest keyed by project. StructConvergedManifest.ConvergedManifestPartsMap.insert(std::make_pair(iWhitelistProject.m_name, iPart->second.data)); @@ -4000,7 +4046,7 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro + " projects at " + DateTimeStrFormat("%x %H:%M:%S", StructConvergedManifest.timestamp)); - // Fill out the excluded projects vector... + // Fill out the the excluded projects vector and the included scraper count (by project) map for (const auto& iProjects : projectWhitelist) { if (StructConvergedManifest.ConvergedManifestPartsMap.find(iProjects.m_name) == StructConvergedManifest.ConvergedManifestPartsMap.end()) @@ -4010,6 +4056,47 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro _log(logattribute::WARNING, "ScraperConstructConvergedManifestByProject", "Project " + iProjects.m_name + " was excluded because there was no convergence from the scrapers for this project at the project level."); + + continue; + } + + unsigned int nScraperConvergenceCount = StructConvergedManifest.mIncludedScrapersbyProject.count(iProjects.m_name); + StructConvergedManifest.mScraperConvergenceCountbyProject.insert(std::make_pair(iProjects.m_name, nScraperConvergenceCount)); + + if (fDebug3) _log(logattribute::INFO, "ScraperConstructConvergedManifestByProject", "Project " + iProjects.m_name + + ": " + std::to_string(nScraperConvergenceCount) + " scraper(s) converged"); + } + + // Fill out the included and excluded scraper vector for scrapers that did not participate in any project level convergence. + for (const auto& iScraper : mMapCSManifestsBinnedByScraper) + { + if (StructConvergedManifest.mIncludedProjectsbyScraper.count(iScraper.first)) + { + StructConvergedManifest.vIncludedScrapers.push_back(iScraper.first); + if (fDebug3) _log(logattribute::INFO, "ScraperConstructConvergedManifestByProject", "Scraper " + + iScraper.first + + " was included in one or more project level convergences."); + } + else + { + StructConvergedManifest.vExcludedScrapers.push_back(iScraper.first); + _log(logattribute::INFO, "ScraperConstructConvergedManifestByProject", "Scraper " + + iScraper.first + + " was excluded because it was not included in any project level convergence."); + } + } + + // Retrieve the complete list of scrapers from the AppCache to determine scrapers not publishing at all. + AppCacheSection mScrapers = ReadCacheSection(Section::SCRAPER); + + for (const auto& iScraper : mScrapers) + { + if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vExcludedScrapers) + && std::find(std::begin(StructConvergedManifest.vIncludedScrapers), std::end(StructConvergedManifest.vIncludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vIncludedScrapers)) + { + StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); } } @@ -4337,7 +4424,7 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi ConvergedScraperStatsCache.nTime = GetAdjustedTime(); ConvergedScraperStatsCache.sContractHash = ScraperGetNeuralHash(sSBCoreData); ConvergedScraperStatsCache.sContract = sSBCoreData; - ConvergedScraperStatsCache.vExcludedProjects = StructConvergedManifest.vExcludedProjects; + ConvergedScraperStatsCache.Convergence = StructConvergedManifest; // Signal UI of SBContract status if (!sSBCoreData.empty()) From 32fd2de45222096954c2284cc38ac403d270041f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 19 Jun 2019 15:49:09 -0400 Subject: [PATCH 044/115] Improve convergence and SB contract caching. This implements a bClean boolean in that is marked false in scraper_net when manifests are received from the network or published locally. It is marked true when a new set of statistics and SBContract core is computed. The rule is that the cached contract will be used when the cache age is younger than nScraperSleep in seconds OR the cache is clean (i.e. no new manifests have been published (if a scraper node) or received (if a normal node). This will avoid the statistics calculation pulse seen on mainnet every 300 seconds during times the scrapers are not active and publishing new manifests. --- src/scraper/fwd.h | 2 +- src/scraper/scraper.cpp | 10 +++++++--- src/scraper_net.cpp | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/scraper/fwd.h b/src/scraper/fwd.h index c5fe9f2552..160365e52c 100644 --- a/src/scraper/fwd.h +++ b/src/scraper/fwd.h @@ -118,7 +118,7 @@ typedef std::map nSyncTime; +extern ConvergedScraperStats ConvergedScraperStatsCache; extern CCriticalSection cs_mScrapersExt; +extern CCriticalSection cs_ConvergedScraperStatsCache; bool CSplitBlob::RecvPart(CNode* pfrom, CDataStream& vRecv) { @@ -473,6 +475,15 @@ bool CScraperManifest::RecvManifest(CNode* pfrom, CDataStream& vRecv) } return false; } + + // lock cs_ConvergedScraperStatsCache and mark ConvergedScraperStatsCache dirty because a new manifest is present, + // so the convergence may change. + { + LOCK(cs_ConvergedScraperStatsCache); + + ConvergedScraperStatsCache.bClean = false; + } + LogPrint("manifest", "received manifest %s with %u / %u parts", hash.GetHex(),(unsigned)manifest.cntPartsRcvd,(unsigned)manifest.vParts.size()); if( manifest.isComplete() ) { @@ -531,6 +542,15 @@ bool CScraperManifest::addManifest(std::unique_ptr&& m, CKey& // Call manifest complete to notify peers of new manifest. manifest.Complete(); + + // lock cs_ConvergedScraperStatsCache and mark ConvergedScraperStatsCache dirty because a new manifest is present, + // so the convergence may change. + { + LOCK(cs_ConvergedScraperStatsCache); + + ConvergedScraperStatsCache.bClean = false; + } + return true; } From 1ce77623c7f3a578a3a38e7c308221a1805ec4b3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 19 Jun 2019 22:50:52 -0400 Subject: [PATCH 045/115] Add cache invalidate to CScraperManifest::DeleteManifest() Also remove unnecessary bByParts flag check in GUI tooltip --- src/qt/bitcoingui.cpp | 51 ++++++++++++++++++++++++++----------------- src/scraper_net.cpp | 12 ++++++++++ 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 5a03a03e69..2881a8ad22 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -1459,8 +1459,8 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) bool bDisplayScrapers = false; - // If the convergence cache has excluded projects and/or is in fallback (by parts)... - if (ConvergedScraperStatsCache.Convergence.vExcludedProjects.size() || ConvergedScraperStatsCache.Convergence.bByParts) + // If the convergence cache has excluded projects... + if (!ConvergedScraperStatsCache.Convergence.vExcludedProjects.empty()) { for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedProjects) { @@ -1470,8 +1470,10 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) sExcludedProjects += ", " + iter.first; } } - - if (ConvergedScraperStatsCache.Convergence.vExcludedProjects.empty()) sExcludedProjects = "none"; + else + { + sExcludedProjects = "none"; + } // If fDebug3 then show scrapers in tooltip... if (fDebug3) @@ -1484,30 +1486,39 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) sIncludedScrapers += iter; else sIncludedScrapers += ", " + iter; - } + } // Don't need the else for empty here. - for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedScrapers) + if (!ConvergedScraperStatsCache.Convergence.vExcludedScrapers.empty()) { - if (sExcludedScrapers.empty()) - sExcludedScrapers += iter; - else - sExcludedScrapers += ", " + iter; + for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedScrapers) + { + if (sExcludedScrapers.empty()) + sExcludedScrapers += iter; + else + sExcludedScrapers += ", " + iter; + } } - - if (ConvergedScraperStatsCache.Convergence.vExcludedScrapers.empty()) sExcludedScrapers = "none"; - - for (const auto& iter : ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing) + else { - if (sScrapersNotPublishing.empty()) - sScrapersNotPublishing += iter; - else - sScrapersNotPublishing += ", " + iter; + sExcludedScrapers = "none"; } - if (ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing.empty()) sScrapersNotPublishing = "none"; + if (ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing.empty()) + { + for (const auto& iter : ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing) + { + if (sScrapersNotPublishing.empty()) + sScrapersNotPublishing += iter; + else + sScrapersNotPublishing += ", " + iter; + } + } + else + { + sScrapersNotPublishing = "none"; + } } - if (scraperEventtype == (int)scrapereventtypes::OutOfSync && status == CT_UPDATING) { labelScraperIcon->setPixmap(QIcon(":/icons/notsynced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 29b05c8df0..0afb15c79d 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -415,9 +415,21 @@ void CScraperManifest::UnserializeCheck(CReaderStream& ss, unsigned int& banscor bool CScraperManifest::DeleteManifest(const uint256& nHash) { if (mapManifest.erase(nHash)) + { + // lock cs_ConvergedScraperStatsCache and mark ConvergedScraperStatsCache dirty because a manifest has been deleted + // that could have been used in the cached convergence, so the convergence may change. + { + LOCK(cs_ConvergedScraperStatsCache); + + ConvergedScraperStatsCache.bClean = false; + } + return true; + } else + { return false; + } } // A lock must be taken on cs_mapManifest before calling this function. From 7e4ce4d95ff43e81ad7d710a9ed6af72c2d216e2 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 20 Jun 2019 12:29:52 -0400 Subject: [PATCH 046/115] Simplify tooltip code Use boost::algorithm::join to compress joining of vector elements in strings for tooltip. --- src/qt/bitcoingui.cpp | 59 +++++++++++++---------------------------- src/scraper/fwd.h | 4 +-- src/scraper/scraper.cpp | 2 +- 3 files changed, 22 insertions(+), 43 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 2881a8ad22..01fbf12406 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -85,6 +85,7 @@ #include #include // for to_lower() +#include #include "boinc.h" #include "util.h" @@ -1452,27 +1453,22 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) int64_t nConvergenceTime = ConvergedScraperStatsCache.nTime; - std::string sExcludedProjects; - std::string sIncludedScrapers; - std::string sExcludedScrapers; - std::string sScrapersNotPublishing; + QString qsExcludedProjects; + QString qsIncludedScrapers; + QString qsExcludedScrapers; + QString qsScrapersNotPublishing; bool bDisplayScrapers = false; + // Note that the translation macro tr is applied in the setToolTip call below. // If the convergence cache has excluded projects... if (!ConvergedScraperStatsCache.Convergence.vExcludedProjects.empty()) { - for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedProjects) - { - if (sExcludedProjects.empty()) - sExcludedProjects += iter.first; - else - sExcludedProjects += ", " + iter.first; - } + qsExcludedProjects = QString(((std::string)boost::algorithm::join(ConvergedScraperStatsCache.Convergence.vExcludedProjects, ", ")).c_str()); } else { - sExcludedProjects = "none"; + qsExcludedProjects = tr("none"); } // If fDebug3 then show scrapers in tooltip... @@ -1480,42 +1476,25 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) { bDisplayScrapers = true; - for (const auto& iter : ConvergedScraperStatsCache.Convergence.vIncludedScrapers) - { - if (sIncludedScrapers.empty()) - sIncludedScrapers += iter; - else - sIncludedScrapers += ", " + iter; - } // Don't need the else for empty here. + // No need to include "none" for included scrapers, because if no scrapers there will not be a convergence. + qsIncludedScrapers = QString(((std::string)boost::algorithm::join(ConvergedScraperStatsCache.Convergence.vIncludedScrapers, ", ")).c_str()); if (!ConvergedScraperStatsCache.Convergence.vExcludedScrapers.empty()) { - for (const auto& iter : ConvergedScraperStatsCache.Convergence.vExcludedScrapers) - { - if (sExcludedScrapers.empty()) - sExcludedScrapers += iter; - else - sExcludedScrapers += ", " + iter; - } + qsExcludedScrapers = QString(((std::string)boost::algorithm::join(ConvergedScraperStatsCache.Convergence.vExcludedScrapers, ", ")).c_str()); } else { - sExcludedScrapers = "none"; + qsExcludedScrapers = tr("none"); } if (ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing.empty()) { - for (const auto& iter : ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing) - { - if (sScrapersNotPublishing.empty()) - sScrapersNotPublishing += iter; - else - sScrapersNotPublishing += ", " + iter; - } + qsScrapersNotPublishing = QString(((std::string)boost::algorithm::join(ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing, ", ")).c_str()); } else { - sScrapersNotPublishing = "none"; + qsScrapersNotPublishing = tr("none"); } } @@ -1547,17 +1526,17 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) "Scraper(s) excluded: %4. \n" "Scraper(s) not publishing: %5.") .arg(QString(DateTimeStrFormat("%x %H:%M:%S", nConvergenceTime).c_str())) - .arg(QString(sExcludedProjects.c_str())) - .arg(QString(sIncludedScrapers.c_str())) - .arg(QString(sExcludedScrapers.c_str())) - .arg(QString(sScrapersNotPublishing.c_str()))); + .arg(qsExcludedProjects) + .arg(qsIncludedScrapers) + .arg(qsExcludedScrapers) + .arg(qsScrapersNotPublishing)); } else { labelScraperIcon->setToolTip(tr("Scraper: Convergence achieved, date/time %1 UTC. \n" " Project(s) excluded: %2.") .arg(QString(DateTimeStrFormat("%x %H:%M:%S", nConvergenceTime).c_str())) - .arg(QString(sExcludedProjects.c_str()))); + .arg(qsExcludedProjects)); } } else if ((scraperEventtype == (int)scrapereventtypes::Convergence || scraperEventtype == (int)scrapereventtypes::SBContract) diff --git a/src/scraper/fwd.h b/src/scraper/fwd.h index 160365e52c..f2147fef67 100644 --- a/src/scraper/fwd.h +++ b/src/scraper/fwd.h @@ -80,8 +80,8 @@ struct ConvergedManifest // convergences by project. std::map mScraperConvergenceCountbyProject; - // ------------------ project ----- reason for exclusion - std::vector> vExcludedProjects; + // --------- project + std::vector vExcludedProjects; }; diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 35a0988072..ea7aa75751 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4052,7 +4052,7 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro if (StructConvergedManifest.ConvergedManifestPartsMap.find(iProjects.m_name) == StructConvergedManifest.ConvergedManifestPartsMap.end()) { // Project in whitelist was not in the map, so it goes in the exclusion vector. - StructConvergedManifest.vExcludedProjects.push_back(std::make_pair(iProjects.m_name, "No convergence was found at the fallback (project) level.")); + StructConvergedManifest.vExcludedProjects.push_back(iProjects.m_name); _log(logattribute::WARNING, "ScraperConstructConvergedManifestByProject", "Project " + iProjects.m_name + " was excluded because there was no convergence from the scrapers for this project at the project level."); From a0cd6c70c4df6854e5770547a0ca64f49fdc297d Mon Sep 17 00:00:00 2001 From: jamescowens Date: Thu, 20 Jun 2019 18:52:56 -0400 Subject: [PATCH 047/115] Correct _log typos in host and team file download functions --- src/scraper/scraper.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index ea7aa75751..7c26ca1460 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -1421,11 +1421,11 @@ bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist) // The manifest file is actually very small though, and this primitive implementation will suffice. I could // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of // sync if the wallet is ended during the middle of pulling the files. - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Persisting manifest entry to disk."); + _log(logattribute::INFO, "DownloadProjectHostFiles", "Persisting manifest entry to disk."); if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) - _log(logattribute::ERR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); + _log(logattribute::ERR, "DownloadProjectHostFiles", "StoreScraperFileManifest error occurred"); else - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); + _log(logattribute::INFO, "DownloadProjectHostFiles", "Stored Manifest"); // End LOCK(cs_StructScraperFileManifest) if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download host files: cs_StructScraperFileManifest"); @@ -1615,11 +1615,11 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) // The manifest file is actually very small though, and this primitive implementation will suffice. I could // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of // sync if the wallet is ended during the middle of pulling the files. - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Persisting manifest entry to disk."); + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Persisting manifest entry to disk."); if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) - _log(logattribute::ERR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); + _log(logattribute::ERR, "DownloadProjectTeamFiles", "StoreScraperFileManifest error occurred"); else - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Stored Manifest"); // End LOCK(cs_StructScraperFileManifest) if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download team files: cs_StructScraperFileManifest"); From c4c589c76a58ddb74b87677f7fba0a175ce4cdef Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 18 Jun 2019 19:51:45 -0500 Subject: [PATCH 048/115] Create NN Researcher context classes --- src/Makefile.am | 2 + src/Makefile.test.include | 1 + src/neuralnet/researcher.cpp | 488 ++++++++++++++++ src/neuralnet/researcher.h | 295 ++++++++++ src/test/data/client_state.xml | 384 +++++++++++++ src/test/neuralnet/researcher_tests.cpp | 732 ++++++++++++++++++++++++ 6 files changed, 1902 insertions(+) create mode 100644 src/neuralnet/researcher.cpp create mode 100644 src/neuralnet/researcher.h create mode 100644 src/test/data/client_state.xml create mode 100644 src/test/neuralnet/researcher_tests.cpp diff --git a/src/Makefile.am b/src/Makefile.am index e43a561a6b..41710d0fec 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -94,6 +94,7 @@ GRIDCOIN_CORE_H = \ neuralnet/neuralnet_native.h \ neuralnet/neuralnet_stub.h \ neuralnet/project.h \ + neuralnet/researcher.h \ netbase.h \ net.h \ pbkdf2.h \ @@ -149,6 +150,7 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ neuralnet/neuralnet_stub.cpp \ neuralnet/cpid.cpp \ neuralnet/project.cpp \ + neuralnet/researcher.cpp \ netbase.cpp \ net.cpp \ noui.cpp \ diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 586215dfaf..d828eb44b7 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -42,6 +42,7 @@ GRIDCOIN_TESTS =\ test/netbase_tests.cpp \ test/neuralnet/cpid_tests.cpp \ test/neuralnet/project_tests.cpp \ + test/neuralnet/researcher_tests.cpp \ test/rpc_tests.cpp \ test/script_P2SH_tests.cpp \ test/script_tests.cpp \ diff --git a/src/neuralnet/researcher.cpp b/src/neuralnet/researcher.cpp new file mode 100644 index 0000000000..690c0f22ac --- /dev/null +++ b/src/neuralnet/researcher.cpp @@ -0,0 +1,488 @@ +#include "appcache.h" +#include "boinc.h" +#include "global_objects_noui.hpp" +#include "neuralnet/researcher.h" +#include "ui_interface.h" +#include "util.h" + +#include +#include + +using namespace NN; + +// Parses the XML elements from the BOINC client_state.xml: +std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); + +// Used to build the legacy global mining context after reloading projects: +MiningCPID GetMiningCPID(); +extern std::string msMiningErrors; + +namespace { +//! +//! \brief Global BOINC researcher mining context. +//! +ResearcherPtr researcher = std::make_shared(); + +//! +//! \brief Convert a project name to lowercase change any underscores to spaces. +//! +//! NOTICE: Because the application merges the loaded BOINC project details into +//! the output of the "projects" RPC method, project whitelist contracts created +//! by the master key holder must embed the project names into the contract just +//! as output by this function or the method will omit projects with mismatching +//! names from the result. +//! +//! \return A "normalized" project name. +//! +std::string LowerUnderscore(std::string data) +{ + boost::to_lower(data); + boost::replace_all(data, "_", " "); + + return data; +} + +//! +//! \brief Determine whether the wallet must run in investor mode before trying +//! to load BOINC CPIDs. +//! +//! \return \c true if the user explicitly configured investor mode or failed +//! to input a valid email address. +//! +bool ConfiguredForInvestorMode() +{ + if (GetBoolArg("-investor", false)) { + LogPrintf("Investor mode configured. Skipping CPID import."); + return true; + } + + if (Researcher::Email().empty()) { + LogPrintf( + "WARNING: Please set 'email=' in " + "gridcoinresearch.conf. Continuing in investor mode."); + + return true; + } + + return false; +} + +//! +//! \brief Fetch the contents of BOINC's client_state.xml file from disk. +//! +//! \return The entire client_state.xml file as a string if readable. +//! +boost::optional ReadClientStateXml() +{ + const std::string path = GetBoincDataDir(); + const std::string contents = GetFileContents(path + "client_state.xml"); + + if (contents != "-1") { + return contents; + } + + LogPrintf("WARNING: Unable to obtain BOINC CPIDs."); + + if (!GetArgument("boincdatadir", "").empty()) { + LogPrintf("Could not access configured BOINC data directory %s", path); + } else { + LogPrintf( + "BOINC data directory is not installed in the default location.\n" + "Please specify its current location in gridcoinresearch.conf."); + } + + return boost::none; +} + +//! +//! \brief Load a set of project XML sections from BOINC's client_state.xml +//! file to gather CPIDs from. +//! +//! \return Items containing the XML between each \c ... +//! section present in the client_state.xml file or an empty container when +//! the file is not accessible or contains no project elements. +//! +std::vector FetchProjectsXml() +{ + const boost::optional client_state_xml = ReadClientStateXml(); + + if (!client_state_xml) { + return { }; + } + + std::vector projects = split(*client_state_xml, ""); + + if (projects.size() < 2) { + LogPrintf("BOINC is not attached to any projects. No CPIDs loaded."); + return { }; + } + + // Drop the first element which never contains a project: + // + // We could swap-n-pop the element to avoid shifting the whole sequence. + // However, BOINC sorts the projects in client_state.xml by name, and we + // select the last valid CPID present in this file. To avoid a surprise, + // we'll just erase the first item. This routine doesn't run very often. + // + projects.erase(projects.begin()); + + return projects; +} + +//! +//! \brief Determine whether BOINC projects should be checked for membership in +//! team Gridcoin before enabling the associated CPID. +//! +//! \return \c true when the protocol is configured to require team membership +//! or when no protocol directive exists. +//! +bool ShouldEnforceTeamMembership() +{ + return ReadCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP").value != "false"; +} + +//! +//! \brief Process the provided project XML from BOINC's client_state.xml file +//! and load it into the supplied researcher context if valid. +//! +//! \param mining_id Updated with the project CPID if eligible. +//! \param projects Projects map to store the loaded project in. +//! \param project_xml As extracted from BOINC's client_state.xml file. +//! +void LoadProject( + MiningId& mining_id, + MiningProjectMap& projects, + const std::string& project_xml) +{ + MiningProject project = MiningProject::Parse(project_xml); + + if (project.m_name.empty()) { + LogPrintf("Skipping invalid BOINC project with empty name."); + return; + } + + // TODO: maybe we should support the TEAM_WHITELIST protocol directive: + if (ShouldEnforceTeamMembership() && project.m_team != "gridcoin") { + LogPrintf("Project %s is not joined to team Gridcoin.", project.m_name); + project.m_error = MiningProject::Error::INVALID_TEAM; + projects.Set(std::move(project)); + + return; + } + + if (project.m_cpid.IsZero()) { + const std::string external_cpid + = ExtractXML(project_xml, "", ""); + + // For the extremely rare case that a BOINC project assigned a user a + // CPID that contains only zeroes, double check that a CPID parsed to + // zero is actually invalid: + // + if (MiningId::Parse(external_cpid).Which() != MiningId::Kind::CPID) { + LogPrintf("Invalid external CPID for project %s.", project.m_name); + project.m_error = MiningProject::Error::MALFORMED_CPID; + projects.Set(std::move(project)); + + return; + } + } + + // We compare the digest of the internal CPID and email address to the + // external CPID as a smoke test to avoid running with corrupted CPIDs. + // + if (!project.m_cpid.Matches( + ExtractXML(project_xml, "", ""), + Researcher::Email())) + { + LogPrintf("CPID mismatch. Check email for %s.", project.m_name); + project.m_error = MiningProject::Error::MISMATCHED_CPID; + projects.Set(std::move(project)); + + return; + } + + mining_id = project.m_cpid; + + LogPrintf( + "Found eligible project %s with CPID %s.", + project.m_name, + project.m_cpid.ToString()); + + projects.Set(std::move(project)); +} + +//! +//! \brief Try to detect a split CPID and log a warning message. +//! +//! In the future, we can extend this to display a warning in the UI. +//! +//! \param projects Map of local projects loaded from BOINC's client_state.xml +//! file. +//! +void DetectSplitCpid(const MiningProjectMap& projects) +{ + std::unordered_map eligible_cpids; + + for (const auto& project_pair : projects) { + if (project_pair.second.Eligible()) { + eligible_cpids.emplace( + project_pair.second.m_cpid, + project_pair.second.m_name); + } + } + + if (eligible_cpids.size() > 1) { + std::string warning = "WARNING: Detected potential CPID split."; + warning += "Eligible CPIDs: \n"; + + for (const auto& cpid_pair : eligible_cpids) { + warning += " " + cpid_pair.first.ToString(); + warning += " (" + cpid_pair.second + ") \n"; + } + + LogPrintf("%s", warning); + } +} + +//! +//! \brief Set up the legacy global mining context variables after reloading +//! researcher context. +//! +//! \param researcher Contains the context to export. +//! +void SetLegacyResearcherContext(const Researcher& researcher) +{ + MiningCPID mc = GetMiningCPID(); + + mc.initialized = true; + mc.cpid = researcher.Id().ToString(); + mc.Magnitude = 0; + mc.clientversion = ""; + mc.RSAWeight = 0; + mc.LastPaymentTime = 0; + mc.lastblockhash = "0"; + // Reuse for debugging + mc.Organization = GetArg("-org", ""); + + GlobalCPUMiningCPID = std::move(mc); + + // TODO: this belongs in presentation layer code: + switch (researcher.Status()) { + case ResearcherStatus::ACTIVE: + msMiningErrors = _("Eligible for Research Rewards"); + break; + case ResearcherStatus::NO_PROJECTS: + msMiningErrors = _("Staking Only - No Eligible Research Projects"); + break; + default: + msMiningErrors = _("Staking Only - Investor Mode"); + break; + } +} + +//! +//! \brief Set the global BOINC researcher context. +//! +//! \param context Contains the CPID and local projects loaded from BOINC. +//! +void StoreResearcher(Researcher context) +{ + SetLegacyResearcherContext(context); + + std::atomic_store( + &researcher, + std::make_shared(std::move(context))); +} +} // anonymous namespace + +// ----------------------------------------------------------------------------- +// Functions +// ----------------------------------------------------------------------------- + +std::string NN::GetPrimaryCpid() +{ + return NN::Researcher::Get()->Id().ToString(); +} + +// ----------------------------------------------------------------------------- +// Class: MiningProject +// ----------------------------------------------------------------------------- + +MiningProject::MiningProject(std::string name, Cpid cpid, std::string team) + : m_name(LowerUnderscore(std::move(name))) + , m_cpid(std::move(cpid)) + , m_team(std::move(team)) + , m_error(Error::NONE) +{ + boost::to_lower(m_team); +} + +MiningProject MiningProject::Parse(const std::string& xml) +{ + return MiningProject( + ExtractXML(xml, "", ""), + Cpid::Parse(ExtractXML(xml, "", "")), + ExtractXML(xml, "","")); +} + +bool MiningProject::Eligible() const +{ + return m_error == Error::NONE; +} + +std::string MiningProject::ErrorMessage() const +{ + switch (m_error) { + case Error::NONE: return ""; + case Error::INVALID_TEAM: return _("Invalid team"); + case Error::MALFORMED_CPID: return _("Malformed CPID"); + case Error::MISMATCHED_CPID: return _("Project email mismatch"); + default: return _("Unknown error"); + } +} + +// ----------------------------------------------------------------------------- +// Class: MiningProjectMap +// ----------------------------------------------------------------------------- + +MiningProjectMap::MiningProjectMap() +{ +} + +MiningProjectMap::const_iterator MiningProjectMap::begin() const +{ + return m_projects.begin(); +} + +MiningProjectMap::const_iterator MiningProjectMap::end() const +{ + return m_projects.end(); +} + +MiningProjectMap::size_type MiningProjectMap::size() const +{ + return m_projects.size(); +} + +bool MiningProjectMap::empty() const +{ + return m_projects.empty(); +} + +ProjectOption MiningProjectMap::Try(const std::string& name) const +{ + const auto iter = m_projects.find(name); + + if (iter == m_projects.end()) { + return boost::none; + } + + return iter->second; +} + +void MiningProjectMap::Set(MiningProject project) +{ + m_projects.emplace(project.m_name, std::move(project)); +} + +// ----------------------------------------------------------------------------- +// Class: Researcher +// ----------------------------------------------------------------------------- + +Researcher::Researcher() + : m_mining_id(MiningId::ForInvestor()) +{ +} + +Researcher::Researcher(MiningId mining_id, MiningProjectMap projects) + : m_mining_id(std::move(mining_id)) + , m_projects(std::move(projects)) +{ +} + +std::string Researcher::Email() +{ + std::string email = GetArgument("email", ""); + boost::to_lower(email); + + return email; +} + +ResearcherPtr Researcher::Get() +{ + return std::atomic_load(&researcher); +} + +void Researcher::Reload() +{ + if (ConfiguredForInvestorMode()) { + StoreResearcher(Researcher()); // Investor + return; + } + + LogPrintf("Loading BOINC CPIDs..."); + + if (!GetArgument("boinckey", "").empty()) { + // TODO: implement a safer way to export researcher context that does + // not risk accidental exposure of an internal CPID and email address. + LogPrintf("WARNING: boinckey is no longer supported."); + } + + Reload(FetchProjectsXml()); +} + +void Researcher::Reload(const std::vector& projects_xml) +{ + Researcher researcher; + + for (const auto& project_xml : projects_xml) { + LoadProject(researcher.m_mining_id, researcher.m_projects, project_xml); + } + + if (const CpidOption cpid = researcher.m_mining_id.TryCpid()) { + DetectSplitCpid(researcher.m_projects); + LogPrintf("Selected primary CPID: %s", cpid->ToString()); + } else if (!researcher.m_projects.empty()) { + LogPrintf("WARNING: no projects eligible for research rewards."); + } + + StoreResearcher(std::move(researcher)); +} + +const MiningId& Researcher::Id() const +{ + return m_mining_id; +} + +const MiningProjectMap& Researcher::Projects() const +{ + return m_projects; +} + +ProjectOption Researcher::Project(const std::string& name) const +{ + return m_projects.Try(name); +} + +bool Researcher::Eligible() const +{ + return m_mining_id.Which() == MiningId::Kind::CPID; +} + +bool Researcher::IsInvestor() const +{ + return !Eligible(); +} + +ResearcherStatus Researcher::Status() const +{ + if (Eligible()) { + return ResearcherStatus::ACTIVE; + } + + if (!m_projects.empty()) { + return ResearcherStatus::NO_PROJECTS; + } + + return ResearcherStatus::INVESTOR; +} diff --git a/src/neuralnet/researcher.h b/src/neuralnet/researcher.h new file mode 100644 index 0000000000..7de561974f --- /dev/null +++ b/src/neuralnet/researcher.h @@ -0,0 +1,295 @@ +#pragma once + +#include "neuralnet/cpid.h" + +#include +#include +#include +#include + +namespace NN { +//! +//! \brief Describes the eligibility status for earning rewards as part of the +//! Proof-of-Research protocol. +//! +enum class ResearcherStatus +{ + INVESTOR, //!< BOINC not present; ineligible for research rewards. + ACTIVE, //!< CPID eligible for research rewards. + NO_PROJECTS, //!< BOINC present, but no eligible projects (investor). +}; + +//! +//! \brief Represents a local BOINC project loaded from client_state.xml. +//! +struct MiningProject +{ + //! + //! \brief Describes why a project is ineligible for Proof-of-Research + //! rewards. + //! + //! Note: we're only showing one error at a time. Later, we could store + //! these values in a bit field to track multiple errors simultaneously. + //! + enum class Error + { + NONE, //!< Eligible project; no errors. + INVALID_TEAM, //!< Project not joined to team Gridcoin. + MALFORMED_CPID, //!< Failed to parse a valid external CPID. + MISMATCHED_CPID, //!< External CPID failed internal CPID + email test. + }; + + //! + //! \brief Initialize a mining project object with fields extracted from + //! a project element in BOINC's client_state.xml file. + //! + //! \param name Project name from the \c element. + //! \param cpid External CPID parsed from the \c element. + //! \param team Associated team parsed from the \c element. + //! + MiningProject(std::string name, Cpid cpid, std::string team); + + //! + //! \brief Initialize a MiningProject instance by parsing the project XML + //! from BOINC's client_state.xml file. + //! + //! \param xml Contains project data within a \c ... + //! element. + //! + static MiningProject Parse(const std::string& xml); + + std::string m_name; // ProjectOption; + +//! +//! \brief Contains a local set of BOINC projects loaded from client_state.xml. +//! +//! This is a map keyed by normalized project names. The container will ignore +//! insertion of a project with the same name as an existing project. +//! +class MiningProjectMap +{ + using ProjectStorage = std::unordered_map; + +public: + typedef ProjectStorage::size_type size_type; + typedef ProjectStorage::iterator iterator; + typedef ProjectStorage::const_iterator const_iterator; + + //! + //! \brief Initialize an empty BOINC project map. + //! + MiningProjectMap(); + + //! + //! \brief Returns an iterator to the beginning. + //! + const_iterator begin() const; + + //! + //! \brief Returns an iterator to the end. + //! + const_iterator end() const; + + //! + //! \brief Get the number of projects loaded from BOINC. + //! + size_type size() const; + + //! + //! \brief Determine whether the map contains any projects. + //! + bool empty() const; + + //! + //! \brief Try to get the loaded BOINC project with the specified name. + //! + //! \param name The lowercase name of the BOINC project as it would exist + //! in client_state.xml with underscores replaced by spaces. + //! + //! \return An object that contains a reference to the matching BOINC + //! project if it exists. + //! + ProjectOption Try(const std::string& name) const; + + //! + //! \brief Add the provided project to the map or replace an existing + //! project with the same name. + //! + //! \param project BOINC project properties loaded from client_state.xml. + //! + void Set(MiningProject project); + +private: + //! + //! \brief Stores the local BOINC projects loaded from client_state.xml. + //! + ProjectStorage m_projects; +}; // MiningProjectMap + +class Researcher; // forward for ResearcherPtr + +//! +//! \brief A smart pointer around the global BOINC researcher context. +//! +typedef std::shared_ptr ResearcherPtr; + +//! +//! \brief Manages the global BOINC researcher context. +//! +//! This class governs a singleton that contains the global BOINC context set +//! for the application to participate in the Proof-of-Research protocol. The +//! class creates the context by reading BOINC's client_state.xml file on the +//! local computer to extract a CPID used to associate the wallet to accounts +//! on the BOINC platform. +//! +//! Thread safety: the API currently requires a lock on \c cs_main to reload +//! the BOINC context because it sets some legacy global variables. After it +//! finishes, the API is immutable. The reload operation stores a pointer to +//! the singleton object atomically. +//! +class Researcher +{ +public: + //! + //! \brief Initialize the researcher context to an investor. + //! + Researcher(); + + //! + //! \brief Initialize a researcher context with a mining ID and a set of + //! local projects. + //! + //! \param mining_id Represents a CPID or an investor. + //! \param projects A set of local projects loaded from BOINC. + //! + Researcher(MiningId mining_id, MiningProjectMap projects); + + //! + //! \brief Get the configured BOINC account email address. + //! + //! \return Lowercase BOINC email address as set in the configuration file. + //! + static std::string Email(); + + //! + //! \brief Get the current global researcher context. + //! + //! \return A smart pointer around the current \c Researcher object. + //! + static ResearcherPtr Get(); + + //! + //! \brief Reload the wallet's researcher mining context from BOINC. + //! + //! This method attempts to read BOINC's client_state.xml file to gather + //! CPIDs used to establish the wallet's eligibility to generate rewards + //! in the Proof-of-Research protocol. If BOINC is authenticated with at + //! least one eligible project, the call will set the BOINC context used + //! to mint blocks that claim Proof-of-Research rewards. Otherwise, this + //! method resets the wallet's mining context to investor mode. + //! + static void Reload(); + + //! + //! \brief Reload the wallet's researcher mining context from the supplied + //! collection of BOINC project data. + //! + //! \param projects_xml Data for one or more projects in the XML format + //! contained in BOINC's client_state.xml file. + //! + static void Reload(const std::vector& projects_xml); + + //! + //! \brief Get the primary mining ID that identifies the owner of the wallet. + //! + //! \return Contains a CPID or represents an investor. + //! + const MiningId& Id() const; + + //! + //! \brief Get the local BOINC projects loaded from client_state.xml. + //! + //! \return A map of local BOINC projects keyed by name. + //! + const MiningProjectMap& Projects() const; + + //! + //! \brief Try to get the loaded BOINC project with the specified name. + //! + //! \param name The lowercase name of the BOINC project as it would exist + //! in client_state.xml with underscores replaced by spaces. + //! + //! \return An object that contains a reference to the matching BOINC + //! project if it exists. + //! + ProjectOption Project(const std::string& name) const; + + //! + //! \brief Determine whether the wallet loaded BOINC projects eligible for + //! Proof-of-Research rewards. + //! + //! \return \c true if the wallet loaded at least one project with a valid + //! CPID and team membership (if team requirement active). + //! + bool Eligible() const; + + //! + //! \brief Determine whether the wallet will attempt to stake for rewards + //! in investor mode only. + //! + //! \return \c true if the wallet loaded no eligible BOINC projects or it + //! is configured to start in investor mode. + //! + bool IsInvestor() const; + + //! + //! \brief Get a value that indicates how the wallet participates in the + //! Proof-of-Research protocol. + //! + //! \return The status depends on whether the wallet successfully loaded + //! eligible CPIDs from BOINC. + //! + ResearcherStatus Status() const; + +private: + MiningId m_mining_id; //!< CPID or INVESTOR variant. + MiningProjectMap m_projects; //!< Local projects loaded from BOINC. +}; // Researcher + +//! +//! \brief Get the primary CPID selected from BOINC's client_state.xml file. +//! +//! This is a temporary, transitional function for areas of code that expect +//! a CPID as a string and replaces the global msPrimaryCPID variable. +//! +//! \return String representation of the MiningId stored in the researcher +//! context ("INVESTOR" or an external CPID). +//! +std::string GetPrimaryCpid(); +} diff --git a/src/test/data/client_state.xml b/src/test/data/client_state.xml new file mode 100644 index 0000000000..fa5993e757 --- /dev/null +++ b/src/test/data/client_state.xml @@ -0,0 +1,384 @@ + + + + + 0 + host.example.com + 127.0.0.1 + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + 4 + AuthenticAMD + AMD A8-7650K Radeon R7, 10 Compute Cores 4C+6G [Family 21 Model 48 Stepping 1] + fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 popcnt aes xsave avx f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce nodeid_msr tbm topoext perfctr_core perfctr_nb bpext ptsc cpb hw_pstate ssbd vmmcall fsgsbase bmi1 xsaveopt arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold overflow_recov + 2844945151.944860 + 84103715299.331421 + 1000000000.000000 + 1553593033.290475 + 0 + 15775625r16.000000 + 2097652.000000 + 2147479152.000000 + 112926989856.000000 + 38705620136.000000 + Linux Ubuntu + Ubuntu 18.04 LTS [4.15.0-46-generic|libc 2.27 (Ubuntu GLIBC 2.27-3ubuntu1)] + 1 + + + 1 + AMD Radeon Graphics + 2270572544.000000 + 0 + 1 + 552960000000.000000 + + 0 + 2165 + 0 + 0 + 720 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + AMD Radeon Graphics + Advanced Micro Devices, Inc. + 4098 + 1 + 0 + 190 + 63 + 1 + 1 + cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_image2d_from_buffer cl_khr_spir cl_khr_gl_event + 2270572544 + 32768 + 720 + 6 + 0 + 0 + 4 + 16 + 1 + OpenCL 2.1 AMD-APP (2671.3) + OpenCL 1.2 AMD-APP (2671.3) + 2671.3 + + + + + + 0.999004 + -1.000000 + 0.999985 + 0.999985 + 0.999985 + 1553573000.312873 + 1537809806.529388 + 16359738.928552 + 16358557.023707 + 16358236.640803 + 773537.446470 + 1554346531.751300 + + + 103958.517311 + 11943404.327771 + 1554346536.891153 + 2750980.763047 + 44292501.573256 + 1554343775.473025 + + + + https://project1.example.com/boinc/ + Valid_Project_1 + + researcher + gridcoin + + b8b58cce3c90c7dc9f3601674202b21c + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + 1541012345.000000 + 0.000000 + 0.000000 + 1540012345.000000 + 3 + 12345 + 1806 + 12345 + 0.000000 + 0.000000 + 1540012345.000000 + 0 + 0 + 0.000000 + 0.000000 + 0.000000 + 1550012345.000000 + 100.000000 + 0.000000 + 1.000000 + 0 + 0 + 0 + 0 + 0 + 0.000000 + 1540012345.000000 + + + + + cpu + 0.000000 + + + cpu + 0.000000 + + + ati + 0.000000 + + + ati + 0.000000 + + https://project1.example.com/boinc_cgi/cgi + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 1073712345.000000 + + + + https://project2.example.com/boinc/ + Valid_project 2 + + researcher + Gridcoin + + b8b58cce3c90c7dc9f3601674202b21c + YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY + 8edc235ddcecf9c416a5f9417d56f4fd + 1541012345.000000 + 0.000000 + 0.000000 + 1540012345.000000 + 3 + 12345 + 1806 + 12345 + 0.000000 + 0.000000 + 1540012345.000000 + 0 + 0 + 0.000000 + 0.000000 + 0.000000 + 1550012345.000000 + 100.000000 + 0.000000 + 1.000000 + 0 + 0 + 0 + 0 + 0 + 0.000000 + 1540012345.000000 + + + + + cpu + 0.000000 + + + cpu + 0.000000 + + + ati + 0.000000 + + + ati + 0.000000 + + https://project2.example.com/boinc_cgi/cgi + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 1073712345.000000 + + + + https://project3.example.com/boinc/ + invalid project 3 + + researcher + Gridcoin + + b8b58cce3c90c7dc9f3601674202b21c + ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ + 8edc235ddcecf9c416a5f9417d56f4fd + 1541012345.000000 + 0.000000 + 0.000000 + 1540012345.000000 + 3 + 12345 + 1806 + 12345 + 0.000000 + 0.000000 + 1540012345.000000 + 0 + 0 + 0.000000 + 0.000000 + 0.000000 + 1550012345.000000 + 100.000000 + 0.000000 + 1.000000 + 0 + 0 + 0 + 0 + 0 + 0.000000 + 1540012345.000000 + + + + + cpu + 0.000000 + + + cpu + 0.000000 + + + ati + 0.000000 + + + ati + 0.000000 + + https://project3.example.com/boinc_cgi/cgi + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 1073712345.000000 + + + + https://invalid-project.example.com/boinc/ + + researcher + Gridcoin + + b8b58cce3c90c7dc9f3601674202b21c + YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY + 8edc235ddcecf9c416a5f9417d56f4fd + 1541012345.000000 + 0.000000 + 0.000000 + 1540012345.000000 + 3 + 12345 + 1806 + 12345 + 0.000000 + 0.000000 + 1540012345.000000 + 0 + 0 + 0.000000 + 0.000000 + 0.000000 + 1550012345.000000 + 100.000000 + 0.000000 + 1.000000 + 0 + 0 + 0 + 0 + 0 + 0.000000 + 1540012345.000000 + + + + + cpu + 0.000000 + + + cpu + 0.000000 + + + ati + 0.000000 + + + ati + 0.000000 + + https://invalid-project.example.com/boinc_cgi/cgi + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 0.000000 + 1073712345.000000 + +x86_64-pc-linux-gnu +7 +9 +3 +1 +3 +1 +3 +2 +1530012345.000000 +1550012345.000000 +i686-pc-linux-gnu +home + diff --git a/src/test/neuralnet/researcher_tests.cpp b/src/test/neuralnet/researcher_tests.cpp new file mode 100644 index 0000000000..eef136b4b2 --- /dev/null +++ b/src/test/neuralnet/researcher_tests.cpp @@ -0,0 +1,732 @@ +#include "appcache.h" +#include "neuralnet/researcher.h" +#include "util.h" + +#include +#include +#include +#include +#include + +namespace { +//! +//! \brief Attempt to locate the test data directory that contains a BOINC +//! client_state.xml stub file. +//! +//! \return Path to the test data directory containing the stub. +//! +boost::filesystem::path ResolveStubDir() +{ + const boost::filesystem::path cwd = boost::filesystem::current_path(); + const boost::filesystem::path data_dir("src/test/data"); + const std::string stub = "client_state.xml"; + + // Test harness run from subdirectory of repo root (src/, build/, etc.): + if (boost::filesystem::exists(cwd / ".." / data_dir / stub)) { + return boost::filesystem::canonical(cwd / ".." / data_dir); + } + + // Test harness run from platform-specific build sub-directory + // (ex: build/gridcoin-x86_64-unknown-linux-gnu/) + if (boost::filesystem::exists(cwd / ".." / ".." / data_dir / stub)) { + return boost::filesystem::canonical(cwd / ".." / ".." / data_dir); + } + + // Test harness run from sub-directory in a platform-specific build sub- + // directory (Travis; ex: build/gridcoin-x86_64-unknown-linux-gnu/src) + if (boost::filesystem::exists(cwd / ".." / ".." / ".." / data_dir / stub)) { + return boost::filesystem::canonical(cwd / ".." / ".." / ".." / data_dir); + } + + // Test harness run from test directory (src/test/): + if (boost::filesystem::exists(cwd / "data" / stub)) { + return cwd / "data"; + } + + // Test harness run from repo root: + return cwd / data_dir; +} + +//! +//! \brief Precondition that skips tests that read a client_state.xml stub from +//! disk if it does not exist. +//! +boost::test_tools::assertion_result ClientStateStubExists(boost::unit_test::test_unit_id) +{ + if (boost::filesystem::exists(ResolveStubDir() / "client_state.xml")) { + return true; + } + + boost::test_tools::assertion_result result(false); + result.message() << "client_state.xml test stub not found"; + + return result; +} +} // anonymous namespace + +// ----------------------------------------------------------------------------- +// MiningProject +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(MiningProject) + +BOOST_AUTO_TEST_CASE(it_initializes_with_project_data) +{ + NN::Cpid expected(std::vector { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + NN::MiningProject project("project name", expected, "team name"); + + BOOST_CHECK(project.m_name == "project name"); + BOOST_CHECK(project.m_cpid == expected); + BOOST_CHECK(project.m_team == "team name"); + BOOST_CHECK(project.m_error == NN::MiningProject::Error::NONE); +} + +BOOST_AUTO_TEST_CASE(it_parses_a_project_xml_string) +{ + // The XML string contains a subset of data found within a element + // from BOINC's client_state.xml file: + // + NN::MiningProject project = NN::MiningProject::Parse( + R"XML( + + Project Name + Team Name + f5d8234352e5a5ae3915debba7258294 + + )XML"); + + NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + + BOOST_CHECK(project.m_name == "project name"); + BOOST_CHECK(project.m_cpid == cpid); + BOOST_CHECK(project.m_team == "team name"); + BOOST_CHECK(project.m_error == NN::MiningProject::Error::NONE); +} + +BOOST_AUTO_TEST_CASE(it_normalizes_project_names) +{ + NN::MiningProject project("Project_NAME", NN::Cpid(), "team name"); + + BOOST_CHECK(project.m_name == "project name"); +} + +BOOST_AUTO_TEST_CASE(it_converts_team_names_to_lowercase) +{ + NN::MiningProject project("project name", NN::Cpid(), "TEAM NAME"); + + BOOST_CHECK(project.m_team == "team name"); +} + +BOOST_AUTO_TEST_CASE(it_determines_whether_a_project_is_eligible) +{ + // Eligibility is determined by the absense of an error set while loading + // the project from BOINC's client_state.xml file. + + NN::MiningProject project("project name", NN::Cpid(), "team name"); + + BOOST_CHECK(project.Eligible() == true); + + project.m_error = NN::MiningProject::Error::INVALID_TEAM; + + BOOST_CHECK(project.Eligible() == false); +} + +BOOST_AUTO_TEST_CASE(it_formats_error_messages_for_display) +{ + NN::MiningProject project("project name", NN::Cpid(), "team name"); + + BOOST_CHECK(project.ErrorMessage().empty() == true); + + project.m_error = NN::MiningProject::Error::INVALID_TEAM; + + BOOST_CHECK(project.ErrorMessage().empty() == false); +} + +BOOST_AUTO_TEST_SUITE_END() + +// ----------------------------------------------------------------------------- +// MiningProjectMap +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(MiningProjectMap) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_empty_collection) +{ + NN::MiningProjectMap projects; + + BOOST_CHECK(projects.empty() == true); +} + +BOOST_AUTO_TEST_CASE(it_is_iterable) +{ + NN::MiningProjectMap projects; + + projects.Set(NN::MiningProject("project name 1", NN::Cpid(), "team name")); + projects.Set(NN::MiningProject("project name 2", NN::Cpid(), "team name")); + + auto counter = 0; + + for (auto const& project : projects) { + BOOST_CHECK(boost::starts_with(project.first, "project name") == true); + counter++; + } + + BOOST_CHECK(counter == 2); +} + +BOOST_AUTO_TEST_CASE(it_counts_the_number_of_projects) +{ + NN::MiningProjectMap projects; + + BOOST_CHECK(projects.size() == 0); + + projects.Set(NN::MiningProject("project name 1", NN::Cpid(), "team name")); + projects.Set(NN::MiningProject("project name 2", NN::Cpid(), "team name")); + + BOOST_CHECK(projects.size() == 2); +} + +BOOST_AUTO_TEST_CASE(it_indicates_whether_it_contains_any_projects) +{ + NN::MiningProjectMap projects; + + BOOST_CHECK(projects.empty() == true); + + projects.Set(NN::MiningProject("project name", NN::Cpid(), "team name")); + + BOOST_CHECK(projects.empty() == false); +} + +BOOST_AUTO_TEST_CASE(it_fetches_a_project_by_name) +{ + NN::MiningProjectMap projects; + + projects.Set(NN::MiningProject("project name", NN::Cpid(), "team name")); + + BOOST_CHECK(projects.Try("project name").value().m_name == "project name"); + BOOST_CHECK(projects.Try("nonexistent") == boost::none); +} + +BOOST_AUTO_TEST_CASE(it_does_not_overwrite_projects_with_the_same_name) +{ + NN::MiningProjectMap projects; + + projects.Set(NN::MiningProject("project name", NN::Cpid(), "team name 1")); + projects.Set(NN::MiningProject("project name", NN::Cpid(), "team name 2")); + + BOOST_CHECK(projects.Try("project name").value().m_team == "team name 1"); +} + +BOOST_AUTO_TEST_SUITE_END() + +// ----------------------------------------------------------------------------- +// Researcher +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(Researcher) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_investor) +{ + NN::Researcher researcher; + + BOOST_CHECK(researcher.Id().Which() == NN::MiningId::Kind::INVESTOR); + BOOST_CHECK(researcher.Projects().empty() == true); +} + +BOOST_AUTO_TEST_CASE(it_initializes_with_researcher_context_data) +{ + NN::MiningProjectMap expected; + + expected.Set(NN::MiningProject("project name", NN::Cpid(), "team name")); + + NN::Researcher researcher(NN::Cpid(), expected); + + BOOST_CHECK(researcher.Id().Which() == NN::MiningId::Kind::CPID); + BOOST_CHECK(researcher.Projects().size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_converts_a_configured_email_address_to_lowercase) +{ + SetArgument("email", "RESEARCHER@EXAMPLE.COM"); + + BOOST_CHECK(NN::Researcher::Email() == "researcher@example.com"); + + // Clean up: + SetArgument("email", ""); +} + +BOOST_AUTO_TEST_CASE(it_provides_access_to_a_global_researcher_singleton) +{ + NN::ResearcherPtr researcher(NN::Researcher::Get()); + + BOOST_CHECK(researcher->Id() == NN::MiningId::ForInvestor()); +} + +BOOST_AUTO_TEST_CASE(it_determines_whether_a_wallet_is_eligible_for_rewards) +{ + NN::Researcher researcher; + + BOOST_CHECK(researcher.Eligible() == false); + BOOST_CHECK(researcher.IsInvestor() == true); + + // A zero-value CPID is technically a valid CPID: + researcher = NN::Researcher(NN::Cpid(), NN::MiningProjectMap()); + + BOOST_CHECK(researcher.Eligible() == true); + BOOST_CHECK(researcher.IsInvestor() == false); +} + +BOOST_AUTO_TEST_CASE(it_provides_an_overall_status_of_the_reseracher_context) +{ + NN::Researcher researcher; + + BOOST_CHECK(researcher.Status() == NN::ResearcherStatus::INVESTOR); + + NN::MiningProjectMap projects; + projects.Set(NN::MiningProject("ineligible", NN::Cpid(), "team name")); + + researcher = NN::Researcher(NN::MiningId::ForInvestor(), projects); + + // Has projects but none eligible (investor): + BOOST_CHECK(researcher.Status() == NN::ResearcherStatus::NO_PROJECTS); + + researcher = NN::Researcher(NN::Cpid(), std::move(projects)); + + BOOST_CHECK(researcher.Status() == NN::ResearcherStatus::ACTIVE); +} + +BOOST_AUTO_TEST_CASE(it_parses_project_xml_to_a_global_researcher_singleton) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + NN::Researcher::Reload(std::vector { + R"XML( + + Project Name 1 + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + R"XML( + + Project Name 2 + Gridcoin + YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY + 8edc235ddcecf9c416a5f9417d56f4fd + + )XML", + }); + + NN::Cpid cpid_1 = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + NN::Cpid cpid_2 = NN::Cpid::Parse("8edc235ddcecf9c416a5f9417d56f4fd"); + + // Primary CPID is selected from the last valid CPID loaded: + BOOST_CHECK(NN::Researcher::Get()->Id() == cpid_2); + + const NN::MiningProjectMap& projects = NN::Researcher::Get()->Projects(); + BOOST_CHECK(projects.size() == 2); + + if (const NN::ProjectOption project1 = projects.Try("project name 1")) { + BOOST_CHECK(project1->m_name == "project name 1"); + BOOST_CHECK(project1->m_cpid == cpid_1); + BOOST_CHECK(project1->m_team == "gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project1->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project name 2")) { + BOOST_CHECK(project2->m_name == "project name 2"); + BOOST_CHECK(project2->m_cpid == cpid_2); + BOOST_CHECK(project2->m_team == "gridcoin"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + NN::Researcher::Reload({ }); +} + +BOOST_AUTO_TEST_CASE(it_looks_up_loaded_boinc_projects_by_name) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + NN::Researcher::Reload(std::vector { + R"XML( + + Name + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + }); + + NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + + const NN::ProjectOption project = NN::Researcher::Get()->Project("name"); + + if (project) { + BOOST_CHECK(project->m_name == "name"); + BOOST_CHECK(project->m_cpid == cpid); + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + NN::Researcher::Reload({ }); +} + +BOOST_AUTO_TEST_CASE(it_resets_to_investor_mode_when_parsing_no_projects) +{ + NN::Researcher::Reload(std::vector { }); + + BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); + BOOST_CHECK(NN::Researcher::Get()->Projects().empty() == true); +} + +BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + NN::Researcher::Reload(std::vector { + // Required team mismatch: + R"XML( + + Project Name 1 + Not Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + // element missing: + R"XML( + + Project Name 2 + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + // Malformed external CPID: + R"XML( + + Project Name 3 + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + invalid + + )XML", + // element missing: + R"XML( + + Project Name 4 + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + )XML", + // Mismatched external CPID to internal CPID/email address: + R"XML( + + Project Name 5 + Gridcoin + invalid + f5d8234352e5a5ae3915debba7258294 + + )XML", + // element missing: + R"XML( + + Project Name 6 + Gridcoin + f5d8234352e5a5ae3915debba7258294 + + )XML", + }); + + NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + + // No valid projects loaded; mining ID should remain INVESTOR: + BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); + + const NN::MiningProjectMap& projects = NN::Researcher::Get()->Projects(); + BOOST_CHECK(projects.size() == 6); + + if (const NN::ProjectOption project1 = projects.Try("project name 1")) { + BOOST_CHECK(project1->m_name == "project name 1"); + BOOST_CHECK(project1->m_cpid == cpid); + BOOST_CHECK(project1->m_team == "not gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project1->Eligible() == false); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project name 2")) { + BOOST_CHECK(project2->m_name == "project name 2"); + BOOST_CHECK(project2->m_cpid == cpid); + BOOST_CHECK(project2->m_team.empty() == true); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project2->Eligible() == false); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project3 = projects.Try("project name 3")) { + BOOST_CHECK(project3->m_name == "project name 3"); + BOOST_CHECK(project3->m_cpid == NN::Cpid()); + BOOST_CHECK(project3->m_team == "gridcoin"); + BOOST_CHECK(project3->m_error == NN::MiningProject::Error::MALFORMED_CPID); + BOOST_CHECK(project3->Eligible() == false); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project4 = projects.Try("project name 4")) { + BOOST_CHECK(project4->m_name == "project name 4"); + BOOST_CHECK(project4->m_cpid == NN::Cpid()); + BOOST_CHECK(project4->m_team == "gridcoin"); + BOOST_CHECK(project4->m_error == NN::MiningProject::Error::MALFORMED_CPID); + BOOST_CHECK(project4->Eligible() == false); + } else { + BOOST_FAIL("Project 4 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project5 = projects.Try("project name 5")) { + BOOST_CHECK(project5->m_name == "project name 5"); + BOOST_CHECK(project5->m_cpid == cpid); + BOOST_CHECK(project5->m_team == "gridcoin"); + BOOST_CHECK(project5->m_error == NN::MiningProject::Error::MISMATCHED_CPID); + BOOST_CHECK(project5->Eligible() == false); + } else { + BOOST_FAIL("Project 5 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project6 = projects.Try("project name 6")) { + BOOST_CHECK(project6->m_name == "project name 6"); + BOOST_CHECK(project6->m_cpid == cpid); + BOOST_CHECK(project6->m_team == "gridcoin"); + BOOST_CHECK(project6->m_error == NN::MiningProject::Error::MISMATCHED_CPID); + BOOST_CHECK(project6->Eligible() == false); + } else { + BOOST_FAIL("Project 6 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + NN::Researcher::Reload({ }); +} + +BOOST_AUTO_TEST_CASE(it_skips_loading_project_xml_with_empty_project_names) +{ + NN::Researcher::Reload(std::vector { + // Empty element: + R"XML( + + + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + // Missing element: + R"XML( + + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + }); + + // No valid projects loaded; mining ID should remain INVESTOR: + BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); + BOOST_CHECK(NN::Researcher::Get()->Projects().empty() == true); + + // Clean up: + NN::Researcher::Reload({ }); +} + +BOOST_AUTO_TEST_CASE(it_ignores_the_team_requirement_when_set_by_protocol) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + // Simulate a protocol control directive that disables the team requirement: + WriteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP", "false", 1); + + NN::Researcher::Reload(std::vector { + R"XML( + + Project Name 1 + ! Not Gridcoin ! + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + }); + + NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + + // Primary CPID is selected from the last valid CPID loaded: + BOOST_CHECK(NN::Researcher::Get()->Id() == cpid); + + const NN::MiningProjectMap& projects = NN::Researcher::Get()->Projects(); + BOOST_CHECK(projects.size() == 1); + + if (const NN::ProjectOption project1 = projects.Try("project name 1")) { + BOOST_CHECK(project1->m_name == "project name 1"); + BOOST_CHECK(project1->m_cpid == cpid); + BOOST_CHECK(project1->m_team == "! not gridcoin !"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project1->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", "researcher@example.com"); + DeleteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP"); + NN::Researcher::Reload({ }); +} + +// Note: the precondition skips this test case when the test harness cannot +// resolve the client_state.xml stub. Autotools' "make check" target counts +// this skip as a failure, so the test harness must be run from a supported +// path within the source tree. +// +BOOST_AUTO_TEST_CASE(it_parses_project_xml_from_a_client_state_xml_file, + *boost::unit_test::precondition(ClientStateStubExists)) +{ + // This test case reads a client_state.xml stub file in test/data/ and loads + // the projects and CPIDs into the global researcher context. + + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + // Set the directory from which the wallet will open the client_state.xml. + // We point it at our test stub: + SetArgument("boincdatadir", ResolveStubDir().string() + "/"); + + // Read the stub and load projects and CPIDs into the researcher context: + NN::Researcher::Reload(); + + NN::Cpid cpid_1 = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + NN::Cpid cpid_2 = NN::Cpid::Parse("8edc235ddcecf9c416a5f9417d56f4fd"); + + // Primary CPID is selected from the last valid CPID loaded: + BOOST_CHECK(NN::Researcher::Get()->Id() == cpid_2); + + const NN::MiningProjectMap& projects = NN::Researcher::Get()->Projects(); + + // The stub contains 4 projects. One invalid project omits the project name + // so the wallet skips it: + BOOST_CHECK(projects.size() == 3); + + if (const NN::ProjectOption project1 = projects.Try("valid project 1")) { + BOOST_CHECK(project1->m_name == "valid project 1"); + BOOST_CHECK(project1->m_cpid == cpid_1); + BOOST_CHECK(project1->m_team == "gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project1->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("valid project 2")) { + BOOST_CHECK(project2->m_name == "valid project 2"); + BOOST_CHECK(project2->m_cpid == cpid_2); + BOOST_CHECK(project2->m_team == "gridcoin"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + // The client_state.xml stub contains an invalid project for this test: + if (const NN::ProjectOption project3 = projects.Try("invalid project 3")) { + BOOST_CHECK(project3->m_name == "invalid project 3"); + BOOST_CHECK(project3->m_cpid == cpid_2); + BOOST_CHECK(project3->m_team == "gridcoin"); + BOOST_CHECK(project3->m_error == NN::MiningProject::Error::MISMATCHED_CPID); + BOOST_CHECK(project3->Eligible() == false); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + SetArgument("boincdatadir", ""); + NN::Researcher::Reload({ }); +} + +// Note: the precondition skips this test case when the test harness cannot +// resolve the client_state.xml stub. Autotools' "make check" target counts +// this skip as a failure, so the test harness must be run from a supported +// path within the source tree. +// +BOOST_AUTO_TEST_CASE(it_resets_to_investor_mode_when_missing_email_address, + *boost::unit_test::precondition(ClientStateStubExists)) +{ + // We don't SetArgument("email", "...") for this test. + + // For a valid test, ensure that we can access the client_state.xml stub + // because it will also pass falsely if this is unset: + SetArgument("boincdatadir", ResolveStubDir().string() + "/"); + + NN::Researcher::Reload(); + + BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); + BOOST_CHECK(NN::Researcher::Get()->Projects().empty() == true); + + // Clean up: + SetArgument("boincdatadir", ""); + NN::Researcher::Reload({ }); +} + +// Note: the precondition skips this test case when the test harness cannot +// resolve the client_state.xml stub. Autotools' "make check" target counts +// this skip as a failure, so the test harness must be run from a supported +// path within the source tree. +// +BOOST_AUTO_TEST_CASE(it_resets_to_investor_mode_when_explicitly_configured, + *boost::unit_test::precondition(ClientStateStubExists)) +{ + SetArgument("investor", "1"); + + // For a valid test, set the email address because it will also pass falsely + // if this is absent: + SetArgument("email", "researcher@example.com"); + + // For a valid test, ensure that we can access the client_state.xml stub + // because it will also pass falsely if this is unset: + SetArgument("boincdatadir", ResolveStubDir().string() + "/"); + + NN::Researcher::Reload(); + + BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); + BOOST_CHECK(NN::Researcher::Get()->Projects().empty() == true); + + // Clean up: + SetArgument("investor", "0"); + SetArgument("email", ""); + SetArgument("boincdatadir", ""); + NN::Researcher::Reload({ }); +} + +BOOST_AUTO_TEST_SUITE_END() From 7b63da10343495e9f37a6a6ba9e1a0dd411c8a07 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 9 Jun 2019 22:50:56 -0500 Subject: [PATCH 049/115] Refactor application to use NN researcher API --- src/contract/polls.cpp | 13 +- src/global_objects_noui.hpp | 7 - src/init.cpp | 6 +- src/main.cpp | 401 +---------------------------------- src/main.h | 4 - src/miner.cpp | 10 +- src/qt/bitcoingui.cpp | 13 +- src/qt/diagnosticsdialog.cpp | 9 +- src/rpcblockchain.cpp | 75 ++----- src/rpcmining.cpp | 9 +- src/rpcserver.cpp | 1 - src/rpcserver.h | 1 - src/test/gridcoin_tests.cpp | 6 - 13 files changed, 65 insertions(+), 490 deletions(-) diff --git a/src/contract/polls.cpp b/src/contract/polls.cpp index d2d979c902..a065ee0d97 100644 --- a/src/contract/polls.cpp +++ b/src/contract/polls.cpp @@ -19,6 +19,8 @@ bool GetEarliestStakeTime(std::string grcaddress, std::string cpid); CBlockIndex* GetHistoricalMagnitude(std::string cpid); bool WalletOutOfSync(); +namespace NN { std::string GetPrimaryCpid(); } + std::string GetShareType(double dShareType) { if (dShareType == 1) return "Magnitude"; @@ -286,23 +288,24 @@ std::string PollAnswers(std::string pollname) } std::string GetProvableVotingWeightXML() { + std::string primary_cpid = NN::GetPrimaryCpid(); std::string sXML = ""; //Retrieve the historical magnitude - if (IsResearcher(msPrimaryCPID)) + if (IsResearcher(primary_cpid)) { - StructCPID& st1 = GetLifetimeCPID(msPrimaryCPID); - CBlockIndex* pHistorical = GetHistoricalMagnitude(msPrimaryCPID); + StructCPID& st1 = GetLifetimeCPID(primary_cpid); + CBlockIndex* pHistorical = GetHistoricalMagnitude(primary_cpid); if (pHistorical->nHeight > 1 && pHistorical->nMagnitude > 0) { std::string sBlockhash = pHistorical->GetBlockHash().GetHex(); std::string sError; std::string sSignature; - bool bResult = SignBlockWithCPID(msPrimaryCPID, pHistorical->GetBlockHash().GetHex(), sSignature, sError); + bool bResult = SignBlockWithCPID(primary_cpid, pHistorical->GetBlockHash().GetHex(), sSignature, sError); // Just because below comment it'll keep in line with that if (!bResult) sSignature = sError; // Find the Magnitude from the last staked block, within the last 6 months, and ensure researcher has a valid current beacon (if the beacon is expired, the signature contain an error message) - sXML += "" + msPrimaryCPID + "" + sXML += "" + primary_cpid + "" + RoundToString(pHistorical->nMagnitude,2) + "" + "" + ToString(pHistorical->nHeight) + "" + sBlockhash + "" + sSignature + ""; diff --git a/src/global_objects_noui.hpp b/src/global_objects_noui.hpp index d4048243e2..786678da38 100755 --- a/src/global_objects_noui.hpp +++ b/src/global_objects_noui.hpp @@ -16,7 +16,6 @@ extern bool bGridcoinGUILoaded; struct StructCPID { bool initialized; - bool Iscpidvalid; double Magnitude; double owed; @@ -37,8 +36,6 @@ struct StructCPID double NetworkMagnitude; double NetworkAvgMagnitude; std::string cpid; - std::string team; - std::string errors; std::string BlockHash; std::set rewardBlocks; }; @@ -57,11 +54,9 @@ struct MiningCPID std::string cpid; std::string clientversion; - std::string email; std::string GRCAddress; std::string lastblockhash; std::string Organization; - std::string OrganizationKey; std::string NeuralHash; std::string superblock; std::string LastPORBlockHash; @@ -70,8 +65,6 @@ struct MiningCPID std::string BoincSignature; }; -//User CPIDs -extern std::map mvCPIDs; //Network Averages extern std::map mvNetwork; extern std::map mvNetworkCopy; diff --git a/src/init.cpp b/src/init.cpp index 4272a35ce6..7c2b0b5f52 100755 --- a/src/init.cpp +++ b/src/init.cpp @@ -14,6 +14,7 @@ #include "tally.h" #include "beacon.h" #include "neuralnet/neuralnet.h" +#include "neuralnet/researcher.h" #include #include @@ -32,7 +33,6 @@ extern boost::thread_group threadGroup; void TallyResearchAverages(CBlockIndex* index); extern void ThreadAppInit2(void* parg); -void LoadCPIDs(); bool IsConfigFileEmpty(); #ifndef WIN32 @@ -934,10 +934,10 @@ bool AppInit2(ThreadHandlerPtr threads) ComputeNeuralNetworkSupermajorityHashes(); uiInterface.InitMessage(_("Finding first applicable Research Project...")); - LoadCPIDs(); + NN::Researcher::Reload(); if(!pwalletMain->IsLocked()) - ImportBeaconKeysFromConfig(GlobalCPUMiningCPID.cpid, pwalletMain); + ImportBeaconKeysFromConfig(NN::GetPrimaryCpid(), pwalletMain); if (!CheckDiskSpace()) return false; diff --git a/src/main.cpp b/src/main.cpp index 94d452f21d..6409eac323 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,11 +17,11 @@ #include "global_objects_noui.hpp" #include "rpcserver.h" #include "rpcclient.h" -#include "boinc.h" #include "beacon.h" #include "miner.h" #include "neuralnet/cpid.h" #include "neuralnet/neuralnet.h" +#include "neuralnet/researcher.h" #include "backup.h" #include "appcache.h" #include "tally.h" @@ -30,13 +30,9 @@ #include "scraper_net.h" #include -#include #include #include // for to_lower() -#include // for startswith() and endswith() -#include #include -#include #include #include #include @@ -45,7 +41,6 @@ extern std::string NodeAddress(CNode* pfrom); extern bool WalletOutOfSync(); bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::string &sError, std::string &sMessage); -bool ImportBeaconKeysFromConfig(); extern void CleanInboundConnections(bool bClearAll); bool RequestSupermajorityNeuralData(); extern bool AskForOutstandingBlocks(uint256 hashStart); @@ -54,14 +49,11 @@ bool TallyResearchAverages(CBlockIndex* index); bool TallyResearchAverages_retired(CBlockIndex* index); bool TallyResearchAverages_v9(CBlockIndex* index); extern void IncrementCurrentNeuralNetworkSupermajority(std::string NeuralHash, std::string GRCAddress, double distance); -extern MiningCPID GetInitializedMiningCPID(std::string name, std::map& vRef); extern double ExtractMagnitudeFromExplainMagnitude(); extern void GridcoinServices(); extern double SnapToGrid(double d); extern bool StrLessThanReferenceHash(std::string rh); extern bool IsContract(CBlockIndex* pIndex); -std::string ExtractValue(std::string data, std::string delimiter, int pos); -UniValue MagnitudeReport(std::string cpid); void RemoveCPIDBlockHash(const std::string& cpid, const CBlockIndex* pindex); void ZeroOutResearcherTotals(StructCPID& stCpid); extern bool BlockNeedsChecked(int64_t BlockTime); @@ -112,22 +104,16 @@ int64_t nBootup = 0; int64_t nLastGRCtallied = 0; int64_t nLastCleaned = 0; -double GetLastPaymentTimeByCPID(std::string cpid); extern double CoinToDouble(double surrogate); -int64_t GetRSAWeightByCPID(std::string cpid); extern MiningCPID GetMiningCPID(); extern StructCPID GetStructCPID(); -int64_t nLastBlockSolved = 0; //Future timestamp - ///////////////////////MINOR VERSION//////////////////////////////// std::string msMasterProjectPublicKey = "049ac003b3318d9fe28b2830f6a95a2624ce2a69fb0c0c7ac0b513efcc1e93a6a6e8eba84481155dd82f2f1104e0ff62c69d662b0094639b7106abc5d84f948c0a"; // The Private Key is revealed by design, for public messages only: std::string msMasterMessagePrivateKey = "308201130201010420fbd45ffb02ff05a3322c0d77e1e7aea264866c24e81e5ab6a8e150666b4dc6d8a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a144034200044b2938fbc38071f24bede21e838a0758a52a0085f2e034e7f971df445436a252467f692ec9c5ba7e5eaa898ab99cbd9949496f7e3cafbf56304b1cc2e5bdf06e"; std::string msMasterMessagePublicKey = "044b2938fbc38071f24bede21e838a0758a52a0085f2e034e7f971df445436a252467f692ec9c5ba7e5eaa898ab99cbd9949496f7e3cafbf56304b1cc2e5bdf06e"; -std::string YesNo(bool bin); - int64_t GetMaximumBoincSubsidy(int64_t nTime); extern double CalculatedMagnitude(int64_t locktime,bool bUseLederstrumpf); extern int64_t GetCoinYearReward(int64_t nTime); @@ -202,15 +188,12 @@ bool PollIsActive(const std::string& poll_contract); extern bool IsCPIDValidv2(MiningCPID& mc, int height); extern bool LessVerbose(int iMax1000); -extern MiningCPID GetNextProject(bool bForce); -extern void HarvestCPIDs(bool cleardata); /////////////////////////////// // Standard Boinc Projects //// /////////////////////////////// //Global variables to display current mined project in various placesn: -std::string msPrimaryCPID; double mdPORNonce = 0; double mdMachineTimerLast = 0; // Mining status variables @@ -245,7 +228,6 @@ MiningCPID GlobalCPUMiningCPID = GetMiningCPID(); int nBoincUtilization = 0; std::string sRegVer; -std::map mvCPIDs; //Contains the project stats at the user level std::map mvNetwork; //Contains the project stats at the network level std::map mvNetworkCopy; //Contains the project stats at the network level std::map mvMagnitudes; // Contains Magnitudes by CPID & Outstanding Payments Owed per CPID @@ -723,166 +705,6 @@ void UnregisterWallet(CWallet* pwalletIn) } } - -MiningCPID GetInitializedGlobalCPUMiningCPID(std::string cpid) -{ - - MiningCPID mc = GetMiningCPID(); - mc.initialized = true; - mc.cpid=cpid; - mc.projectname = cpid; - mc.Magnitude = 0; - mc.clientversion = ""; - mc.RSAWeight = GetRSAWeightByCPID(cpid); - mc.LastPaymentTime = nLastBlockSolved; - mc.lastblockhash = "0"; - // Reuse for debugging - mc.Organization = GetArg("-org", ""); - return mc; -} - - -MiningCPID GetNextProject(bool bForce) -{ - if (GlobalCPUMiningCPID.projectname.length() > 3 && GlobalCPUMiningCPID.projectname != "INVESTOR" && GlobalCPUMiningCPID.Magnitude >= 1) - { - if (!Timer_Main("globalcpuminingcpid",10)) - { - //Prevent Thrashing - return GlobalCPUMiningCPID; - } - } - - GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID(""); - - std::string email = GetArgument("email", "NA"); - boost::to_lower(email); - - if (IsInitialBlockDownload() && !bForce) - { - if (LessVerbose(100)) LogPrintf("CPUMiner: Gridcoin is downloading blocks Or CPIDs are not yet loaded..."); - MilliSleep(1); - return GlobalCPUMiningCPID; - } - - try - { - - if (mvCPIDs.size() < 1) - { - if (fDebug && LessVerbose(10)) LogPrintf("Gridcoin has no CPIDs..."); - //Let control reach the investor area - } - - int iValidProjects=0; - //Count valid projects: - for(map::iterator ii=mvCPIDs.begin(); ii!=mvCPIDs.end(); ++ii) - { - StructCPID structcpid = mvCPIDs[(*ii).first]; - if ( msPrimaryCPID == structcpid.cpid && - structcpid.initialized && structcpid.Iscpidvalid) iValidProjects++; - } - - // Find next available CPU project: - int iDistributedProject = 0; - int iRow = 0; - - if (email=="" || email=="NA") iValidProjects = 0; //Let control reach investor area - - - if (iValidProjects > 0) - { - for (int i = 0; i <= 4;i++) - { - iRow=0; - iDistributedProject = (rand() % iValidProjects)+1; - - for(map::iterator ii=mvCPIDs.begin(); ii!=mvCPIDs.end(); ++ii) - { - StructCPID structcpid = mvCPIDs[(*ii).first]; - - if (structcpid.initialized) - { - if (msPrimaryCPID == structcpid.cpid && - structcpid.Iscpidvalid && structcpid.projectname.length() > 1) - { - iRow++; - if (i==4 || iDistributedProject == iRow) - { - if (true) - { - if (true) - { - - if (LessVerbose(1) || fDebug || fDebug3) LogPrintf("Ready to CPU Mine project %s with CPID %s", - structcpid.projectname.c_str(),structcpid.cpid.c_str()); - //Required for project to be mined in a block: - GlobalCPUMiningCPID.cpid=structcpid.cpid; - GlobalCPUMiningCPID.projectname = structcpid.projectname; - - GlobalCPUMiningCPID.lastblockhash = "0"; - // Sign the block - GlobalCPUMiningCPID.BoincPublicKey = GetBeaconPublicKey(structcpid.cpid, false); - std::string sSignature; - std::string sError; - bool bResult = SignBlockWithCPID(GlobalCPUMiningCPID.cpid, GlobalCPUMiningCPID.lastblockhash, sSignature, sError, true); -# if 0 - if (!bResult) - { - LogPrintf("GetNextProject: failed to sign block with cpid -> %s", sError); - continue; - } - GlobalCPUMiningCPID.BoincSignature = sSignature; - if (!IsCPIDValidv2(GlobalCPUMiningCPID,1)) - { - LogPrintf("CPID INVALID (GetNextProject) %s, ",GlobalCPUMiningCPID.cpid); - continue; - } -# else - (void)bResult; -# endif - - GlobalCPUMiningCPID.Magnitude = CalculatedMagnitude(GetAdjustedTime(),false); - if (fDebug && LessVerbose(2)) LogPrintf("For CPID %s Verified Magnitude = %f",GlobalCPUMiningCPID.cpid, GlobalCPUMiningCPID.Magnitude); - //Reserved for GRC Speech Synthesis - msMiningErrors = !IsResearcher(msPrimaryCPID) ? _("Staking Interest") : _("Boinc Mining"); - GlobalCPUMiningCPID.RSAWeight = GetRSAWeightByCPID(GlobalCPUMiningCPID.cpid); - GlobalCPUMiningCPID.LastPaymentTime = GetLastPaymentTimeByCPID(GlobalCPUMiningCPID.cpid); - return GlobalCPUMiningCPID; - } - } - } - - } - - } - } - - } - } - - msMiningErrors = (IsResearcher(msPrimaryCPID)) ? _("All BOINC projects exhausted.") : ""; - GlobalCPUMiningCPID = GetInitializedGlobalCPUMiningCPID("INVESTOR"); - if (fDebug10) LogPrintf("-Investor mode-"); - - } - catch (std::exception& e) - { - msMiningErrors = _("Error obtaining next project. Error 16172014."); - - LogPrintf("Error obtaining next project"); - } - catch(...) - { - msMiningErrors = _("Error obtaining next project. Error 06172014."); - LogPrintf("Error obtaining next project 2."); - } - return GlobalCPUMiningCPID; - -} - - - // check whether the passed transaction is from us bool static IsFromMe(CTransaction& tx) { @@ -3442,7 +3264,6 @@ bool DisconnectBlocksBatch(CTxDB& txdb, list& vResurrect, unsigned //Block was disconnected - User is Re-eligibile for staking StructCPID& sMag = GetInitializedStructCPID2(GlobalCPUMiningCPID.cpid,mvMagnitudes); - nLastBlockSolved = 0; if (sMag.initialized) { sMag.LastPaymentTime = 0; @@ -4390,10 +4211,12 @@ void GridcoinServices() { try { - if (msNeuralResponse.length() < 25 && IsResearcher(msPrimaryCPID)) + std::string primary_cpid = NN::GetPrimaryCpid(); + + if (msNeuralResponse.length() < 25 && IsResearcher(primary_cpid)) { - AsyncNeuralRequest("explainmag",msPrimaryCPID,5); - if (fDebug3) LogPrintf("Async explainmag sent for %s.",msPrimaryCPID); + AsyncNeuralRequest("explainmag", primary_cpid, 5); + if (fDebug3) LogPrintf("Async explainmag sent for %s.", primary_cpid); } if (fDebug3) LogPrintf("MR Complete"); } @@ -5280,20 +5103,6 @@ StructCPID& GetLifetimeCPID(const std::string& cpid) return stCPID; } -MiningCPID GetInitializedMiningCPID(std::string name,std::map& vRef) -{ - MiningCPID& cpid = vRef[name]; - if (!cpid.initialized) - { - cpid = GetMiningCPID(); - cpid.initialized=true; - cpid.LastPaymentTime = 0; - } - - return cpid; -} - - StructCPID& GetInitializedStructCPID2(const std::string& name, std::map& vRef) { StructCPID& cpid = vRef[name]; @@ -6934,7 +6743,6 @@ std::string SerializeBoincBlock(MiningCPID mcpid, int BlockVersion) if (!IsResearchAgeEnabled(pindexBest->nHeight)) { mcpid.Organization = GetArg("-org", "windows"); - mcpid.OrganizationKey = "12345678"; //Only reveal 8 characters } mcpid.LastPORBlockHash = GetLastPORBlockHash(mcpid.cpid); @@ -6969,7 +6777,7 @@ std::string SerializeBoincBlock(MiningCPID mcpid, int BlockVersion) + delim + mcpid.lastblockhash + delim + RoundToString(mcpid.InterestSubsidy,subsidy_places) + delim + mcpid.Organization - + delim + mcpid.OrganizationKey + + delim // + mcpid.OrganizationKey // Obsolete + delim + mcpid.NeuralHash + delim + mcpid.superblock + delim // + RoundToString(mcpid.ResearchSubsidy2,2) // Obsolete @@ -7052,10 +6860,10 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) { surrogate.Organization = s[19]; } - if (s.size() > 20) - { - surrogate.OrganizationKey = s[20]; - } + //if (s.size() > 20) + //{ + // surrogate.OrganizationKey = s[20]; // Obsolete + //} if (s.size() > 21) { surrogate.NeuralHash = s[21]; @@ -7107,190 +6915,10 @@ MiningCPID DeserializeBoincBlock(std::string block, int BlockVersion) return surrogate; } -std::string LowerUnderscore(std::string data) -{ - boost::to_lower(data); - boost::replace_all(data, "_", " "); - return data; -} - -void HarvestCPIDs(bool cleardata) -{ - if (fDebug10) - LogPrintf("loading BOINC cpids ..."); - - if (!GetArgument("boinckey", "").empty()) { - // TODO: implement a safer way to export researcher context that doesn't - // risk accidental exposure of internal CPID and email address. - LogPrintf("ERROR: boinckey is no longer supported."); - } - - try - { - std::string sourcefile = GetBoincDataDir() + "client_state.xml"; - std::string sout = GetFileContents(sourcefile); - - if (sout == "-1") - { - LogPrintf("Unable to obtain Boinc CPIDs "); - - if (mapArgs.count("-boincdatadir") && mapArgs["-boincdatadir"].length() > 0) - { - LogPrintf("Boinc data directory set in gridcoinresearch.conf has been incorrectly specified "); - } - - else LogPrintf("Boinc data directory is not in the operating system's default location \nPlease move it there or specify its current location in gridcoinresearch.conf"); - - return; - } - - if (cleardata) - { - mvCPIDs.clear(); - } - std::string email = GetArgument("email",""); - boost::to_lower(email); - - int iRow = 0; - std::vector vCPID = split(sout.c_str(),""); - std::string investor = GetArgument("investor","false"); - - if (investor=="true") - { - msPrimaryCPID="INVESTOR"; - } - else - { - if (vCPID.size() > 0) - { - for (unsigned int i = 0; i < vCPID.size(); i++) - { - std::string email_hash = ExtractXML(vCPID[i],"",""); - std::string cpidhash = ExtractXML(vCPID[i],"",""); - std::string externalcpid = ExtractXML(vCPID[i],"",""); - std::string proj=ExtractXML(vCPID[i],"",""); - std::string team=ExtractXML(vCPID[i],"",""); - - proj = LowerUnderscore(proj); - int64_t nStart = GetTimeMillis(); - if (cpidhash.length() > 5 && proj.length() > 3) - { - NN::MiningId mining_id = NN::MiningId::Parse(externalcpid); - std::string cpid_non = cpidhash+email; - to_lower(cpid_non); - StructCPID& structcpid = GetInitializedStructCPID2(proj,mvCPIDs); - iRow++; - structcpid.projectname = proj; - boost::to_lower(team); - structcpid.team = team; - structcpid.cpid = externalcpid; - structcpid.Iscpidvalid = mining_id.Which() == NN::MiningId::Kind::CPID; - - int64_t elapsed = GetTimeMillis()-nStart; - if (fDebug3) - LogPrintf("Enumerating boinc local project %s cpid %s valid %s, elapsed %" PRId64, structcpid.projectname, structcpid.cpid, YesNo(structcpid.Iscpidvalid), elapsed); - - std::string sLocalClientEmailHash = RetrieveMd5(email); - - if (email_hash != sLocalClientEmailHash) - { - structcpid.errors = "Gridcoin Email setting does not match project Email. Check Gridcoin e-mail address setting or boinc project e-mail setting."; - structcpid.Iscpidvalid=false; - } - - if (!structcpid.Iscpidvalid) - { - structcpid.errors = "CPID calculation invalid. Check e-mail address and try resetting the boinc project."; - } - - std::string sKey = structcpid.cpid + ":" + proj; - mvCPIDs[proj] = structcpid; - - if (!structcpid.Iscpidvalid) - { - structcpid.errors = "CPID invalid. Check E-mail address."; - } - - if (structcpid.team != "gridcoin") - { - structcpid.Iscpidvalid = false; - structcpid.errors = "Team invalid"; - } - - if (const NN::CpidOption cpid = mining_id.TryCpid()) - { - LogPrintf("External CPID not empty %s", externalcpid); - - if ((*cpid).Matches(cpidhash, email)) - { - structcpid.cpid = externalcpid; - LogPrintf(" Setting CPID to %s ",structcpid.cpid); - } - else - { - LogPrintf("External test failed."); - - structcpid.Iscpidvalid = false; - structcpid.errors = "CPID corrupted Internal: %s, External: %s" + cpidhash + "," + externalcpid.c_str(); - LogPrintf("CPID corrupted Internal: %s, External: %s", cpidhash, externalcpid); - } - - mvCPIDs[proj] = structcpid; - } - - if (structcpid.Iscpidvalid) - { - // Verify the CPID is a valid researcher: - if (IsResearcher(structcpid.cpid)) - { - LogPrintf("Setting bpk to %s", cpidhash); - - if (structcpid.team=="gridcoin") - { - msPrimaryCPID = structcpid.cpid; - //Try to get a neural RAC report - AsyncNeuralRequest("explainmag",msPrimaryCPID,5); - } - } - } - - mvCPIDs[proj] = structcpid; - if (fDebug10) LogPrintf("Adding Local Project %s ", structcpid.cpid); - - } - - } - - } - // If no valid boinc projects were found: - if (msPrimaryCPID.empty()) - msPrimaryCPID="INVESTOR"; - } - } - catch (std::exception &e) - { - LogPrintf("Error while harvesting CPIDs."); - } - catch(...) - { - LogPrintf("Error while harvesting CPIDs 2."); - } -} - -void LoadCPIDs() -{ - LogPrintf("Load CPID; "); - HarvestCPIDs(true); - LogPrintf(" Getting first project;"); - GetNextProject(false); - LogPrintf(" Finished getting first project"); -} - StructCPID GetStructCPID() { StructCPID c; c.initialized=false; - c.Iscpidvalid=false; c.Magnitude=0; c.owed=0; c.payments=0; @@ -7676,13 +7304,6 @@ std::string GetNeuralNetworkReport() return report; } -std::string GetOrgSymbolFromFeedKey(std::string feedkey) -{ - std::string Symbol = ExtractValue(feedkey,"-",0); - return Symbol; - -} - bool MemorizeMessage(const CTransaction &tx, double dAmount, std::string sRecipient) { const std::string &msg = tx.hashBoinc; diff --git a/src/main.h b/src/main.h index d57c36ac0c..5d6ab63ac4 100644 --- a/src/main.h +++ b/src/main.h @@ -34,8 +34,6 @@ static const int BLOCK_GRANULARITY = 10; //Consensus block divisor static const int TALLY_GRANULARITY = BLOCK_GRANULARITY; static const int64_t DEFAULT_CBR = 10 * COIN; -extern int64_t nLastBlockSolved; - extern std::string msMasterProjectPublicKey; extern std::string msMasterMessagePublicKey; extern std::string msMasterMessagePrivateKey; @@ -192,8 +190,6 @@ extern bool fEnforceCanonical; static const uint64_t nMinDiskSpace = 52428800; // PoB Miner Global Vars: -extern std::string msPrimaryCPID; - extern double mdPORNonce; extern double mdMachineTimerLast; diff --git a/src/miner.cpp b/src/miner.cpp index 3edd69cb55..f56bdb8f02 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -25,7 +25,6 @@ using namespace std; // unsigned int nMinerSleep; -MiningCPID GetNextProject(bool bForce); void ThreadCleanWalletPassphrase(void* parg); double CoinToDouble(double surrogate); @@ -36,6 +35,8 @@ bool LessVerbose(int iMax1000); int64_t GetRSAWeightByBlock(MiningCPID boincblock); +namespace NN { std::string GetPrimaryCpid(); } + namespace { // Some explaining would be appreciated class COrphan @@ -1030,7 +1031,7 @@ bool IsMiningAllowed(CWallet *pwallet) { LOCK(MinerStatus.lock); MinerStatus.ReasonNotStaking+=_("Net averages not yet loaded; "); - if (LessVerbose(100) && IsResearcher(msPrimaryCPID)) LogPrintf("ResearchMiner:Net averages not yet loaded..."); + if (LessVerbose(100) && IsResearcher(NN::GetPrimaryCpid())) LogPrintf("ResearchMiner:Net averages not yet loaded..."); status=false; } @@ -1220,12 +1221,8 @@ void StakeMiner(CWallet *pwallet) continue; } - // Lock main lock since GetNextProject and subsequent calls - // require the state to be static. LOCK(cs_main); - GetNextProject(true); - // * Create a bare block StakeBlock.nTime= GetAdjustedTime(); StakeBlock.nNonce= 0; @@ -1279,7 +1276,6 @@ void StakeMiner(CWallet *pwallet) LogPrintf("StakeMiner: block processed"); { LOCK(MinerStatus.lock); MinerStatus.AcceptedCnt++; - nLastBlockSolved = GetAdjustedTime(); } } //end while(!fShutdown) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 368029faee..a6621923f5 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -82,6 +82,7 @@ #include "rpcprotocol.h" #include "contract/polls.h" #include "contract/contract.h" +#include "neuralnet/researcher.h" #include #include // for to_lower() @@ -97,7 +98,6 @@ extern std::string qtExecuteDotNetStringFunction(std::string function, std::stri void GetGlobalStatus(); bool IsConfigFileEmpty(); -void HarvestCPIDs(bool cleardata); BitcoinGUI::BitcoinGUI(QWidget *parent): QMainWindow(parent), @@ -906,7 +906,7 @@ void BitcoinGUI::NewUserWizard() bool ok; boincemail = QInputDialog::getText(this, tr("New User Wizard"), - tr("Please enter your boinc E-mail address, or click to skip for now:"), + tr("Please enter your BOINC E-mail address, or click to skip for now:"), QLineEdit::Normal, "", &ok); @@ -919,14 +919,15 @@ void BitcoinGUI::NewUserWizard() CreateNewConfigFile(new_email); QString strMessage = tr("Created new Configuration File Successfully. "); QMessageBox::warning(this, tr("New Account Created - Welcome Aboard!"), strMessage); - //Load CPIDs: - HarvestCPIDs(true); + + // Reload BOINC CPIDs now that we know the user's email address: + NN::Researcher::Reload(); } else { //Create Config File CreateNewConfigFile("investor"); - QString strMessage = tr("To get started with BOINC, run the BOINC client, choose projects, then populate the gridcoinresearch.conf file in %appdata%\\GridcoinResearch with your boinc e-mail address. To run this wizard again, please delete the gridcoinresearch.conf file. "); + QString strMessage = tr("To get started with BOINC, run the BOINC client, choose projects, then populate the gridcoinresearch.conf file in %appdata%\\GridcoinResearch with your BOINC e-mail address. To run this wizard again, please delete the gridcoinresearch.conf file. "); QMessageBox::warning(this, tr("New User Wizard - Skipped"), strMessage); } // Read in the mapargs, and set the seed nodes 10-13-2015 @@ -943,7 +944,7 @@ void BitcoinGUI::NewUserWizard() if (sBoincNarr != "") { QString qsMessage = tr(sBoincNarr.c_str()); - QMessageBox::warning(this, tr("Attention! - Boinc Path Error!"), qsMessage); + QMessageBox::warning(this, tr("Attention! - BOINC Path Error!"), qsMessage); } } } diff --git a/src/qt/diagnosticsdialog.cpp b/src/qt/diagnosticsdialog.cpp index 58a22d484f..318a63c73a 100644 --- a/src/qt/diagnosticsdialog.cpp +++ b/src/qt/diagnosticsdialog.cpp @@ -13,6 +13,7 @@ #include #include +namespace NN { std::string GetPrimaryCpid(); } DiagnosticsDialog::DiagnosticsDialog(QWidget *parent) : QDialog(parent), @@ -78,17 +79,19 @@ bool DiagnosticsDialog::VerifyIsCPIDValid() cpid.erase(pos, cpid.length()); } - return (msPrimaryCPID == cpid) ? true : false; + return (NN::GetPrimaryCpid() == cpid) ? true : false; } bool DiagnosticsDialog::VerifyCPIDIsInNeuralNetwork() { - if(!IsResearcher(msPrimaryCPID)) + std::string primary_cpid = NN::GetPrimaryCpid(); + + if(!IsResearcher(primary_cpid)) return false; for(const auto& entry : GetConsensusBeaconList().mBeaconMap) { - if(boost::iequals(entry.first, msPrimaryCPID)) + if(boost::iequals(entry.first, primary_cpid)) return true; } diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 94c98172b0..fee379cb91 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -11,8 +11,8 @@ #include "block.h" #include "txdb.h" #include "beacon.h" -#include "neuralnet/cpid.h" #include "neuralnet/neuralnet.h" +#include "neuralnet/researcher.h" #include "backup.h" #include "appcache.h" #include "tally.h" @@ -79,15 +79,11 @@ void GatherNeuralHashes(); extern bool TallyMagnitudesInSuperblock(); double GetTotalBalance(); -MiningCPID GetNextProject(bool bForce); -std::string SerializeBoincBlock(MiningCPID mcpid); - double CoinToDouble(double surrogate); extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry); double LederstrumpfMagnitude2(double mag,int64_t locktime); bool IsCPIDValidv2(MiningCPID& mc, int height); -void HarvestCPIDs(bool cleardata); BlockFinder RPCBlockFinder; double GetDifficulty(const CBlockIndex* blockindex) @@ -676,7 +672,6 @@ bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::str sOutPrivKey = "BUG! deprecated field used"; LOCK(cs_main); { - GetNextProject(false); if (!IsResearcher(GlobalCPUMiningCPID.cpid)) { sError = "INVESTORS_CANNOT_SEND_BEACONS"; @@ -719,7 +714,6 @@ bool AdvertiseBeacon(std::string &sOutPrivKey, std::string &sOutPubKey, std::str // Convert the new pubkey into legacy hex format sOutPubKey = HexStr(keyBeacon.GetPubKey().Raw()); - std::string sParam = SerializeBoincBlock(GlobalCPUMiningCPID,pindexBest->nVersion); std::string GRCAddress = DefaultWalletAddress(); // Public Signing Key is stored in Beacon std::string contract = "UNUSED;" + hashRand.GetHex() + ";" + GRCAddress + ";" + sOutPubKey; @@ -1031,7 +1025,7 @@ UniValue beaconstatus(const UniValue& params, bool fHelp) // Search for beacon, and report on beacon status. - std::string sCPID = msPrimaryCPID; + std::string sCPID = NN::GetPrimaryCpid(); if (params.size() > 0) sCPID = params[0].get_str(); @@ -1216,7 +1210,7 @@ UniValue lifetime(const UniValue& params, bool fHelp) UniValue c(UniValue::VOBJ); UniValue res(UniValue::VOBJ); - std::string cpid = msPrimaryCPID; + std::string cpid = NN::GetPrimaryCpid(); std::string Narr = ToString(GetAdjustedTime()); c.pushKV("Lifetime Payments Report", Narr); @@ -1266,7 +1260,7 @@ UniValue magnitude(const UniValue& params, bool fHelp) !params[0].get_str().empty() ) ? params[0].get_str() - : msPrimaryCPID; + : NN::GetPrimaryCpid(); if(cpid.empty()) throw runtime_error("CPID appears to be empty; unable to request magnitude report"); @@ -1343,8 +1337,8 @@ UniValue resetcpids(const UniValue& params, bool fHelp) LOCK(cs_main); ReadConfigFile(mapArgs, mapMultiArgs); - HarvestCPIDs(true); - GetNextProject(true); + NN::Researcher::Reload(); + res.pushKV("Reset", 1); return res; @@ -1763,25 +1757,6 @@ UniValue getlistof(const UniValue& params, bool fHelp) return res; } -UniValue getnextproject(const UniValue& params, bool fHelp) -{ - if (fHelp || params.size() != 0) - throw runtime_error( - "getnextproject\n" - "\n" - "Requests wallet to get next project\n"); - - UniValue res(UniValue::VOBJ); - - LOCK(cs_main); - - GetNextProject(true); - - res.pushKV("GetNext", 1); - - return res; -} - UniValue listdata(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) @@ -1930,9 +1905,6 @@ UniValue projects(const UniValue& params, bool fHelp) LOCK(cs_main); - if (mvCPIDs.empty()) - HarvestCPIDs(false); - for (const auto& item : NN::GetWhitelist().Snapshot().Sorted()) { UniValue entry(UniValue::VOBJ); @@ -1955,23 +1927,18 @@ UniValue projects(const UniValue& params, bool fHelp) entry.pushKV("Project", sProjectName); entry.pushKV("URL", sProjectURL); - if (!mvCPIDs.empty()) - { - StructCPID structcpid = mvCPIDs[sProjectName]; - - if (structcpid.initialized && IsResearcher(structcpid.cpid) && IsResearcher(GlobalCPUMiningCPID.cpid)) - { - UniValue researcher(UniValue::VOBJ); + if (const NN::ProjectOption project = NN::Researcher::Get()->Projects().Try(item.m_name)) { + UniValue researcher(UniValue::VOBJ); - researcher.pushKV("CPID", structcpid.cpid); - researcher.pushKV("Team", structcpid.team); - researcher.pushKV("Valid for Research", (structcpid.team == "gridcoin" && structcpid.Iscpidvalid ? "true" : "false")); + researcher.pushKV("CPID", project->m_cpid.ToString()); + researcher.pushKV("Team", project->m_team); + researcher.pushKV("Valid for Research", project->Eligible()); - if (!structcpid.errors.empty()) - researcher.pushKV("Errors", structcpid.errors); + if (!project->Eligible()) { + researcher.pushKV("Errors", project->ErrorMessage()); + } - entry.pushKV("Researcher", researcher); - } + entry.pushKV("Researcher", researcher); } res.push_back(entry); @@ -2450,7 +2417,6 @@ UniValue MagnitudeReport(std::string cpid) StructCPID& stCPID = GetLifetimeCPID(structMag.cpid); double days = (GetAdjustedTime() - stCPID.LowLockTime) / 86400.0; entry.pushKV("CPID",structMag.cpid); - StructCPID& UH = GetInitializedStructCPID2(cpid,mvMagnitudes); entry.pushKV("Earliest Payment Time",TimestampToHRDate(stCPID.LowLockTime)); entry.pushKV("Magnitude (Last Superblock)", structMag.Magnitude); entry.pushKV("Research Payments (14 days)",structMag.payments); @@ -2548,12 +2514,13 @@ UniValue GetJsonUnspentReport() // Written on 5-28-2017 - R HALFORD // We can use this as the basis for proving the total coin balance, and the current researcher magnitude in the voting system. UniValue results(UniValue::VARR); + std::string primary_cpid = NN::GetPrimaryCpid(); //Retrieve the historical magnitude - if (IsResearcher(msPrimaryCPID)) + if (IsResearcher(primary_cpid)) { - StructCPID& st1 = GetLifetimeCPID(msPrimaryCPID); - CBlockIndex* pHistorical = GetHistoricalMagnitude(msPrimaryCPID); + StructCPID& st1 = GetLifetimeCPID(primary_cpid); + CBlockIndex* pHistorical = GetHistoricalMagnitude(primary_cpid); UniValue entry1(UniValue::VOBJ); entry1.pushKV("Researcher Magnitude",pHistorical->nMagnitude); results.push_back(entry1); @@ -2564,14 +2531,14 @@ UniValue GetJsonUnspentReport() std::string sBlockhash = pHistorical->GetBlockHash().GetHex(); std::string sError; std::string sSignature; - bool bResult = SignBlockWithCPID(msPrimaryCPID, pHistorical->GetBlockHash().GetHex(), sSignature, sError); + bool bResult = SignBlockWithCPID(primary_cpid, pHistorical->GetBlockHash().GetHex(), sSignature, sError); // Just because below comment it'll keep in line with that if (!bResult) sSignature = sError; // Find the Magnitude from the last staked block, within the last 6 months, and ensure researcher has a valid current beacon (if the beacon is expired, the signature contain an error message) - std::string sMagXML = "" + msPrimaryCPID + "" + RoundToString(pHistorical->nMagnitude,2) + "" + + std::string sMagXML = "" + primary_cpid + "" + RoundToString(pHistorical->nMagnitude,2) + "" + "" + ToString(pHistorical->nHeight) + "" + sBlockhash + "" + sSignature + ""; std::string sMagnitude = ExtractXML(sMagXML,"",""); std::string sXmlSigned = ExtractXML(sMagXML,"",""); diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 6d3df6da3d..15bd3d2d01 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -15,6 +15,8 @@ using namespace std; double GRCMagnitudeUnit(int64_t locktime); +namespace NN { std::string GetPrimaryCpid(); } + UniValue getmininginfo(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 0) @@ -117,14 +119,15 @@ UniValue getmininginfo(const UniValue& params, bool fHelp) //9-19-2015 - CM obj.pushKV("MyNeuralHash", NN::GetInstance()->GetNeuralHash()); - obj.pushKV("CPID",msPrimaryCPID); + std::string primary_cpid = NN::GetPrimaryCpid(); + obj.pushKV("CPID", primary_cpid); - if (IsResearcher(msPrimaryCPID)) + if (IsResearcher(primary_cpid)) { { double dMagnitudeUnit = GRCMagnitudeUnit(nTime); double dAccrualAge,AvgMagnitude; - int64_t nBoinc = ComputeResearchAccrual(nTime, msPrimaryCPID, "getmininginfo", pindexBest, false, 69, dAccrualAge, dMagnitudeUnit, AvgMagnitude); + int64_t nBoinc = ComputeResearchAccrual(nTime, primary_cpid, "getmininginfo", pindexBest, false, 69, dAccrualAge, dMagnitudeUnit, AvgMagnitude); obj.pushKV("Magnitude Unit",dMagnitudeUnit); obj.pushKV("BoincRewardPending",nBoinc/(double)COIN); } diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 041af75aef..127eca763c 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -371,7 +371,6 @@ static const CRPCCommand vRPCCommands[] = { "gatherneuralhashes", &gatherneuralhashes, cat_developer }, { "getblockstats", &rpc_getblockstats, cat_developer }, { "getlistof", &getlistof, cat_developer }, - { "getnextproject", &getnextproject, cat_developer }, { "getrecentblocks", &rpc_getrecentblocks, cat_developer }, { "getsupervotes", &rpc_getsupervotes, cat_developer }, { "listdata", &listdata, cat_developer }, diff --git a/src/rpcserver.h b/src/rpcserver.h index be5b01bba5..5071f3ac34 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -191,7 +191,6 @@ extern UniValue forcequorum(const UniValue& params, bool fHelp); extern UniValue gatherneuralhashes(const UniValue& params, bool fHelp); extern UniValue rpc_getblockstats(const UniValue& params, bool fHelp); extern UniValue getlistof(const UniValue& params, bool fHelp); -extern UniValue getnextproject(const UniValue& params, bool fHelp); extern UniValue listdata(const UniValue& params, bool fHelp); extern UniValue listprojects(const UniValue& params, bool fHelp); extern UniValue memorizekeys(const UniValue& params, bool fHelp); diff --git a/src/test/gridcoin_tests.cpp b/src/test/gridcoin_tests.cpp index cd9e340932..8ec6541fa1 100755 --- a/src/test/gridcoin_tests.cpp +++ b/src/test/gridcoin_tests.cpp @@ -19,7 +19,6 @@ extern std::map mvDPOR; extern std::string GetQuorumHash(const std::string& data); extern bool fTestNet; double RoundFromString(std::string s, int place); -std::string LowerUnderscore(std::string data); namespace { @@ -102,11 +101,6 @@ BOOST_AUTO_TEST_CASE(gridcoin_ValidateUnpackBinarySuperblock) BOOST_CHECK_EQUAL(UnpackBinarySuperblock(packed), expected); } -BOOST_AUTO_TEST_CASE(gridcoin_LowerUnderscoreShouldConvertToLowerCaseAndReplaceUnderscoresWithSpaces) -{ - BOOST_CHECK_EQUAL("hello test string", LowerUnderscore("Hello_TEST_string")); -} - BOOST_AUTO_TEST_CASE(gridcoin_V8ShouldBeEnabledOnBlock1010000InProduction) { bool was_testnet = fTestNet; From 67c90f99470da96f4e936794f5eac33f2e23d9e7 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 15 Jun 2019 15:25:43 -0500 Subject: [PATCH 050/115] Clean up "projects" RPC method --- src/rpcblockchain.cpp | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index fee379cb91..682297fad3 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1902,32 +1902,16 @@ UniValue projects(const UniValue& params, bool fHelp) "Displays information on projects in the network as well as researcher data if available\n"); UniValue res(UniValue::VARR); - - LOCK(cs_main); + NN::ResearcherPtr researcher = NN::Researcher::Get(); for (const auto& item : NN::GetWhitelist().Snapshot().Sorted()) { UniValue entry(UniValue::VOBJ); - std::string sProjectName = item.m_name; - - if (sProjectName.empty()) - continue; - - std::string sProjectURL = item.m_url; - sProjectURL.erase(std::remove(sProjectURL.begin(), sProjectURL.end(), '@'), sProjectURL.end()); - - // If contains an additional stats URL for project stats; remove it for the user to goto the correct website. - if (sProjectURL.find("stats/") != string::npos) - { - std::size_t tFound = sProjectURL.find("stats/"); - sProjectURL.erase(tFound, sProjectURL.length()); - } - - entry.pushKV("Project", sProjectName); - entry.pushKV("URL", sProjectURL); + entry.pushKV("Project", item.DisplayName()); + entry.pushKV("URL", item.DisplayUrl()); - if (const NN::ProjectOption project = NN::Researcher::Get()->Projects().Try(item.m_name)) { + if (const NN::ProjectOption project = researcher->Project(item.m_name)) { UniValue researcher(UniValue::VOBJ); researcher.pushKV("CPID", project->m_cpid.ToString()); From 51410be854dd4841a76b40fc65ad05692cf5341f Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 18 Jun 2019 22:47:54 -0500 Subject: [PATCH 051/115] Fix empty status field on GUI overview screen --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6409eac323..29bc268778 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -608,7 +608,7 @@ void GetGlobalStatus() LogPrintf("Error obtaining last poll: %s", e.what()); } - GlobalStatusStruct.status.clear(); + GlobalStatusStruct.status = msMiningErrors; if(MinerStatus.WeightSum) GlobalStatusStruct.coinWeight = RoundToString(MinerStatus.WeightSum / 80.0,2); @@ -640,7 +640,7 @@ void GetGlobalStatus() } catch (std::exception& e) { - msMiningErrors = _("Error obtaining status."); + GlobalStatusStruct.errors = _("Error obtaining status."); LogPrintf("Error obtaining status"); return; From 4eb3e70666f56c13ea0997368774d5e954117204 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 21 Jun 2019 18:30:22 -0400 Subject: [PATCH 052/115] Add functionality to support retention of unprocessed user files for explorer mode. Normalized common code for aligning scraper file manifest entries into separate function AlignScraperFileManifestEntries to eliminate repeated code. --- src/scraper/scraper.cpp | 336 ++++++++++++++++------------------------ 1 file changed, 132 insertions(+), 204 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 7c26ca1460..71ddca7039 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -105,6 +105,7 @@ bool LoadScraperFileManifest(const fs::path& file); bool InsertScraperFileManifestEntry(ScraperFileManifestEntry& entry); unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry); bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry); +bool AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest); ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); @@ -1371,65 +1372,7 @@ bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist) } // Save host xml files to file manifest map with exclude from CSManifest flag set to true. - ScraperFileManifestEntry NewRecord; - - NewRecord.filename = host_file_name; - NewRecord.project = prjs.m_name; - NewRecord.hash = GetFileHash(host_file); - NewRecord.timestamp = GetAdjustedTime(); - NewRecord.current = true; - // Host files are not included in CScraperManifests (published manifests). - NewRecord.excludefromcsmanifest = true; - NewRecord.filetype = "host"; - - // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. - { - LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "download host files: cs_StructScraperFileManifest"); - - // Iterate mScraperFileManifest to find any prior host records for the same project and change current flag to false, - // or delete if older than EXPLORER_EXTENDED_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles - // is false. - - ScraperFileManifestMap::iterator entry; - for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) - { - ScraperFileManifestMap::iterator entry_copy = entry++; - - if (entry_copy->second.project == prjs.m_name && entry_copy->second.current == true && entry_copy->second.filetype == "host") - { - _log(logattribute::INFO, "DownloadProjectHostFiles", "Marking old project manifest host entry as current = false."); - MarkScraperFileManifestEntryNonCurrent(entry_copy->second); - } - - // If host records are older than EXPLORER_EXTENDED_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, - // delete all non-current records, including the one just marked non-current. (EXPLORER_EXTENDED_FILE_RETENTION_TIME rather - // then SCRAPER_FILE_RETENTION_TIME is used, because this section is only active if fExplorer is true.) - if (entry_copy->second.filetype == "host" && (((GetAdjustedTime() - entry_copy->second.timestamp) > EXPLORER_EXTENDED_FILE_RETENTION_TIME) - || (entry_copy->second.project == prjs.m_name && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) - { - DeleteScraperFileManifestEntry(entry_copy->second); - } - } - - if (!InsertScraperFileManifestEntry(NewRecord)) - _log(logattribute::WARNING, "DownloadProjectHostFiles", "Manifest entry already exists for " + NewRecord.hash.ToString() + " " + host_file_name); - else - _log(logattribute::INFO, "DownloadProjectHostFiles", "Created manifest entry for " + NewRecord.hash.ToString() + " " + host_file_name); - - // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. - // The manifest file is actually very small though, and this primitive implementation will suffice. I could - // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of - // sync if the wallet is ended during the middle of pulling the files. - _log(logattribute::INFO, "DownloadProjectHostFiles", "Persisting manifest entry to disk."); - if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) - _log(logattribute::ERR, "DownloadProjectHostFiles", "StoreScraperFileManifest error occurred"); - else - _log(logattribute::INFO, "DownloadProjectHostFiles", "Stored Manifest"); - - // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download host files: cs_StructScraperFileManifest"); - } + AlignScraperFileManifestEntries(host_file, "host", prjs.m_name, true); } return true; @@ -1563,68 +1506,7 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) } // If in explorer mode, save team xml files to file manifest map with exclude from CSManifest flag set to true. - if (fExplorer) - { - ScraperFileManifestEntry NewRecord; - - NewRecord.filename = team_file_name; - NewRecord.project = prjs.m_name; - NewRecord.hash = GetFileHash(team_file); - NewRecord.timestamp = GetAdjustedTime(); - NewRecord.current = true; - // Team files are not included in CScraperManifests (published manifests). - NewRecord.excludefromcsmanifest = true; - NewRecord.filetype = "team"; - - // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. - { - LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "download team files: cs_StructScraperFileManifest"); - - // Iterate mScraperFileManifest to find any prior team records for the same project and change current flag to false, - // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles - // is false. - - ScraperFileManifestMap::iterator entry; - for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) - { - ScraperFileManifestMap::iterator entry_copy = entry++; - - if (entry_copy->second.project == prjs.m_name && entry_copy->second.current == true && entry_copy->second.filetype == "team") - { - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Marking old project manifest team entry as current = false."); - MarkScraperFileManifestEntryNonCurrent(entry_copy->second); - } - - // If team records are older than EXPLORER_EXTENDED_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, - // delete all non-current records, including the one just marked non-current. (EXPLORER_EXTENDED_FILE_RETENTION_TIME rather - // then SCRAPER_FILE_RETENTION_TIME is used, because this section is only active if fExplorer is true.) - if (entry_copy->second.filetype == "team" && (((GetAdjustedTime() - entry_copy->second.timestamp) > EXPLORER_EXTENDED_FILE_RETENTION_TIME) - || (entry_copy->second.project == prjs.m_name && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) - { - DeleteScraperFileManifestEntry(entry_copy->second); - } - } - - if (!InsertScraperFileManifestEntry(NewRecord)) - _log(logattribute::WARNING, "DownloadProjectTeamFiles", "Manifest entry already exists for " + NewRecord.hash.ToString() + " " + team_file_name); - else - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Created manifest entry for " + NewRecord.hash.ToString() + " " + team_file_name); - - // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. - // The manifest file is actually very small though, and this primitive implementation will suffice. I could - // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of - // sync if the wallet is ended during the middle of pulling the files. - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Persisting manifest entry to disk."); - if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) - _log(logattribute::ERR, "DownloadProjectTeamFiles", "StoreScraperFileManifest error occurred"); - else - _log(logattribute::INFO, "DownloadProjectTeamFiles", "Stored Manifest"); - - // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "download team files: cs_StructScraperFileManifest"); - } - } + if (fExplorer) AlignScraperFileManifestEntries(team_file, "team", prjs.m_name, true); std::map mTeamIDsForProject; @@ -1780,10 +1662,6 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist { _log(logattribute::INFO, "DownloadProjectRacFiles", "Downloading project file for " + prjs.m_name); - std::string rac_file_name = prjs.m_name + +"-user.gz"; - - fs::path rac_file = pathScraper / rac_file_name; - // Grab ETag of rac file Http http; std::string sRacETag; @@ -1832,17 +1710,43 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist _log(logattribute::CRITICAL, "DownloadProjectRacFiles", "Failed to export etag for " + prjs.m_name + " to authentication file"); } - std::string chketagfile = prjs.m_name + "-" + sRacETag + ".csv" + ".gz"; - fs::path chkfile = pathScraper / chketagfile; + std::string rac_file_name; + fs::path rac_file; - if (fs::exists(chkfile)) + std::string processed_rac_file_name; + fs::path processed_rac_file; + + processed_rac_file_name = prjs.m_name + "-" + sRacETag + ".csv" + ".gz"; + processed_rac_file = pathScraper / processed_rac_file_name; + + if (fExplorer) { - _log(logattribute::INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.m_name + " already exists"); - //_log(logattribute::INFO, "DownloadProjectRacFiles", "Etag file size " + std::to_string(fs::file_size(chkfile))); - continue; + // Use eTag versioning for source file. + rac_file_name = prjs.m_name + sRacETag + "-user.gz"; + rac_file = pathScraper / rac_file_name; + + // If the file was already processed, both should be here. If both here, skip processing. + if (fs::exists(rac_file) && fs::exists(processed_rac_file)) + { + _log(logattribute::INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.m_name + " already exists"); + continue; + } } else - fs::remove(chkfile); + { + // No versioning for source file. If file exists delete it and download anew, unless processed file already present. + rac_file_name = prjs.m_name + "-user.gz"; + rac_file = pathScraper / rac_file_name; + + if (fs::exists(rac_file)) fs::remove(rac_file); + + // If the file was already processed, skip processing. + if (fs::exists(processed_rac_file)) + { + _log(logattribute::INFO, "DownloadProjectRacFiles", "Etag file for " + prjs.m_name + " already exists"); + continue; + } + } try { @@ -1854,6 +1758,10 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist continue; } + // If in explorer mode, save user (rac) source xml files to file manifest map with exclude from CSManifest flag set to true. + if (fExplorer) AlignScraperFileManifestEntries(rac_file, "user_source", prjs.m_name, true); + + // Now that the source file is handled, process the file. ProcessProjectRacFileByCPID(prjs.m_name, rac_file.string(), sRacETag, Consensus); } @@ -1865,7 +1773,8 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist int64_t nMaxTime = 0; for (const auto& entry : StructScraperFileManifest.mScraperFileManifest) { - nMaxTime = std::max(nMaxTime, entry.second.timestamp); + // Only consider processed (user) files + if (entry.second.filetype == "user") nMaxTime = std::max(nMaxTime, entry.second.timestamp); } StructScraperFileManifest.timestamp = nMaxTime; @@ -1997,18 +1906,15 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil { _log(logattribute::CRITICAL, "ProcessProjectRacFileByCPID", "Error in data processing of " + file.string() + "; Aborted processing"); - std::string efile = etag + ".gz"; - fs::path fsepfile = pathScraper/ efile; ingzfile.close(); outgzfile.flush(); outgzfile.close(); - if (fs::exists(fsepfile)) - fs::remove(fsepfile); - + // Remove the source file because it was bad. (Probable incomplete download.) if (fs::exists(file)) fs::remove(file); + // Remove the errored out processed file. if (fs::exists(gzetagfile)) fs::remove(gzetagfile); @@ -2034,7 +1940,7 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil fs::path temp = gzetagfile; size_t fileb = fs::file_size(temp); - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Processing new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); + _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Processed new rac file " + file.string() + "(" + std::to_string(filea) + " -> " + std::to_string(fileb) + ")"); ndownloadsize += (int64_t)filea; nuploadsize += (int64_t)fileb; @@ -2044,70 +1950,11 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "FS Error -> " + std::string(e.what())); } - fs::remove(file); - - ScraperFileManifestEntry NewRecord; + // If not in explorer mode, no need to retain source file. + if (!fExplorer) fs::remove(file); - // Don't include path in Manifest, because this is local node dependent. - NewRecord.filename = gzetagfile_no_path; - NewRecord.project = project; - NewRecord.hash = nFileHash; - NewRecord.timestamp = GetAdjustedTime(); - // By definition the record we are about to insert is current. If a new file is downloaded for - // a given project, it has to be more up to date than any others. - NewRecord.current = true; - NewRecord.excludefromcsmanifest = false; - NewRecord.filetype = "user"; - - // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. - { - LOCK(cs_StructScraperFileManifest); - if (fDebug3) _log(logattribute::INFO, "LOCK", "rac (user) file processing record insert: cs_StructScraperFileManifest"); - - // Iterate mScraperFileManifest to find any prior user records for the same project and change current flag to false, - // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles - // is false. - - ScraperFileManifestMap::iterator entry; - for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) - { - ScraperFileManifestMap::iterator entry_copy = entry++; - - if (entry_copy->second.project == project && entry_copy->second.current == true && entry_copy->second.filetype == "user") - { - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Marking old project manifest user entry as current = false."); - MarkScraperFileManifestEntryNonCurrent(entry_copy->second); - } - - // If user records are older than nFileRetentionTime delete record, or if fScraperRetainNonCurrentFiles is false, - // delete all non-current records, including the one just marked non-current. - int64_t nFileRetentionTime = fExplorer ? EXPLORER_EXTENDED_FILE_RETENTION_TIME : SCRAPER_FILE_RETENTION_TIME; - - if (entry_copy->second.filetype == "user" && (((GetAdjustedTime() - entry_copy->second.timestamp) > nFileRetentionTime) - || (entry_copy->second.project == project && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) - { - DeleteScraperFileManifestEntry(entry_copy->second); - } - } - - if (!InsertScraperFileManifestEntry(NewRecord)) - _log(logattribute::WARNING, "ProcessProjectRacFileByCPID", "Manifest entry already exists for " + nFileHash.ToString() + " " + gzetagfile); - else - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Created manifest entry for " + nFileHash.ToString() + " " + gzetagfile); - - // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. - // The manifest file is actually very small though, and this primitive implementation will suffice. I could - // put it up in the while loop above, but then there is a much higher risk that the manifest file could be out of - // sync if the wallet is ended during the middle of pulling the files. - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Persisting manifest entry to disk."); - if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) - _log(logattribute::ERR, "ProcessProjectRacFileByCPID", "StoreScraperFileManifest error occurred"); - else - _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Stored Manifest"); - - // End LOCK(cs_StructScraperFileManifest) - if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "rac (user) file processing record insert: cs_StructScraperFileManifest"); - } + // Here, regardless of explorer mode, save processed rac files to file manifest map with exclude from CSManifest flag set to false. + AlignScraperFileManifestEntries(gzetagfile, "user", project, false); _log(logattribute::INFO, "ProcessProjectRacFileByCPID", "Complete Process"); @@ -2115,8 +1962,6 @@ bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& fil } - - uint256 GetFileHash(const fs::path& inputfile) { // open input file, and associate with CAutoFile @@ -2497,6 +2342,89 @@ bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry) } +bool AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest) +{ + ScraperFileManifestEntry NewRecord; + + std::string file_name = file.filename().string(); + + NewRecord.filename = file_name; + NewRecord.project = sProject; + NewRecord.hash = GetFileHash(file); + NewRecord.timestamp = GetAdjustedTime(); + NewRecord.current = true; + NewRecord.excludefromcsmanifest = excludefromcsmanifest; + NewRecord.filetype = filetype; + + // Code block to lock StructScraperFileManifest during record insertion and delete because we want this atomic. + { + LOCK(cs_StructScraperFileManifest); + if (fDebug3) + { + if (excludefromcsmanifest) + { + _log(logattribute::INFO, "LOCK", "saved manifest for downloaded "+ filetype + " files: AlignScraperFileManifestEntries: cs_StructScraperFileManifest"); + } + else + { + _log(logattribute::INFO, "LOCK", "saved manifest for processed "+ filetype + " files: AlignScraperFileManifestEntries: cs_StructScraperFileManifest"); + } + } + + // Iterate mScraperFileManifest to find any prior filetype records for the same project and change current flag to false, + // or delete if older than SCRAPER_FILE_RETENTION_TIME or non-current and fScraperRetainNonCurrentFiles + // is false. + + ScraperFileManifestMap::iterator entry; + for (entry = StructScraperFileManifest.mScraperFileManifest.begin(); entry != StructScraperFileManifest.mScraperFileManifest.end(); ) + { + ScraperFileManifestMap::iterator entry_copy = entry++; + + if (entry_copy->second.project == sProject && entry_copy->second.current == true && entry_copy->second.filetype == filetype) + { + _log(logattribute::INFO, "AlignScraperFileManifestEntries", "Marking old project manifest "+ filetype + " entry as current = false."); + MarkScraperFileManifestEntryNonCurrent(entry_copy->second); + } + + // If filetype records are older than EXPLORER_EXTENDED_FILE_RETENTION_TIME delete record, or if fScraperRetainNonCurrentFiles is false, + // delete all non-current records, including the one just marked non-current. (EXPLORER_EXTENDED_FILE_RETENTION_TIME rather + // then SCRAPER_FILE_RETENTION_TIME is used, because this section is only active if fExplorer is true.) + if (entry_copy->second.filetype == filetype && (((GetAdjustedTime() - entry_copy->second.timestamp) > EXPLORER_EXTENDED_FILE_RETENTION_TIME) + || (entry_copy->second.project == sProject && entry_copy->second.current == false && !SCRAPER_RETAIN_NONCURRENT_FILES))) + { + DeleteScraperFileManifestEntry(entry_copy->second); + } + } + + if (!InsertScraperFileManifestEntry(NewRecord)) + _log(logattribute::WARNING, "AlignScraperFileManifestEntries", "Manifest entry already exists for " + NewRecord.hash.ToString() + " " + file_name); + else + _log(logattribute::INFO, "AlignScraperFileManifestEntries", "Created manifest entry for " + NewRecord.hash.ToString() + " " + file_name); + + // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. + // The manifest file is actually very small though, and this primitive implementation will suffice. + _log(logattribute::INFO, "AlignScraperFileManifestEntries", "Persisting manifest entry to disk."); + if (!StoreScraperFileManifest(pathScraper / "Manifest.csv.gz")) + _log(logattribute::ERR, "AlignScraperFileManifestEntries", "StoreScraperFileManifest error occurred"); + else + _log(logattribute::INFO, "AlignScraperFileManifestEntries", "Stored Manifest"); + + // End LOCK(cs_StructScraperFileManifest) + if (fDebug3) + { + if (excludefromcsmanifest) + { + _log(logattribute::INFO, "ENDLOCK", "saved manifest for downloaded "+ filetype + " files: AlignScraperFileManifestEntries: cs_StructScraperFileManifest"); + } + else + { + _log(logattribute::INFO, "ENDLOCK", "saved manifest for processed "+ filetype + " files: AlignScraperFileManifestEntries: cs_StructScraperFileManifest"); + } + } + } +} + + bool LoadScraperFileManifest(const fs::path& file) { std::ifstream ingzfile(file.string(), std::ios_base::in | std::ios_base::binary); From 9425600221abe7b9b18d1d51543b9686b0541ff8 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 22 Jun 2019 10:27:10 -0400 Subject: [PATCH 053/115] Ensure scraper excluded and included list is properly scoped Both of those vectors must only include scrapers marked active in the appcache. --- src/scraper/scraper.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 71ddca7039..8f5d56b302 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -3644,12 +3644,16 @@ bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifes for (const auto& iScraper : mScrapers) { - if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) - == std::end(StructConvergedManifest.vExcludedScrapers) - && std::find(std::begin(StructConvergedManifest.vIncludedScrapers), std::end(StructConvergedManifest.vIncludedScrapers), iScraper.first) - == std::end(StructConvergedManifest.vIncludedScrapers)) + // Only include scrapers enabled in protocol. + if (iScraper.second.value == "true" || iScraper.second.value == "1") { - StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vExcludedScrapers) + && std::find(std::begin(StructConvergedManifest.vIncludedScrapers), std::end(StructConvergedManifest.vIncludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vIncludedScrapers)) + { + StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + } } } @@ -4019,12 +4023,16 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro for (const auto& iScraper : mScrapers) { - if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) - == std::end(StructConvergedManifest.vExcludedScrapers) - && std::find(std::begin(StructConvergedManifest.vIncludedScrapers), std::end(StructConvergedManifest.vIncludedScrapers), iScraper.first) - == std::end(StructConvergedManifest.vIncludedScrapers)) + // Only include scrapers enabled in protocol. + if (iScraper.second.value == "true" || iScraper.second.value == "1") { - StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vExcludedScrapers) + && std::find(std::begin(StructConvergedManifest.vIncludedScrapers), std::end(StructConvergedManifest.vIncludedScrapers), iScraper.first) + == std::end(StructConvergedManifest.vIncludedScrapers)) + { + StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + } } } From b4dfde671b5b3f05bd74c6b538ee422c238b8c1f Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 22 Jun 2019 14:10:04 -0400 Subject: [PATCH 054/115] Correct missing hyphen on filenames for unprocessed user files. --- src/scraper/scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 8f5d56b302..e5987f0e18 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -1722,7 +1722,7 @@ bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist if (fExplorer) { // Use eTag versioning for source file. - rac_file_name = prjs.m_name + sRacETag + "-user.gz"; + rac_file_name = prjs.m_name + "-" + sRacETag + "-user.gz"; rac_file = pathScraper / rac_file_name; // If the file was already processed, both should be here. If both here, skip processing. From 23ce1bacaa5ae76540c3dc2be159833d12ef5e65 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 23 Jun 2019 01:07:28 -0400 Subject: [PATCH 055/115] Correct negation error in scraper tooltip for vScrapersNotPublishing --- src/qt/bitcoingui.cpp | 2 +- src/scraper/scraper.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 01fbf12406..0c341d1a12 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -1488,7 +1488,7 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status) qsExcludedScrapers = tr("none"); } - if (ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing.empty()) + if (!ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing.empty()) { qsScrapersNotPublishing = QString(((std::string)boost::algorithm::join(ConvergedScraperStatsCache.Convergence.vScrapersNotPublishing, ", ")).c_str()); } diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index e5987f0e18..bbb89640ff 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -3645,6 +3645,7 @@ bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifes for (const auto& iScraper : mScrapers) { // Only include scrapers enabled in protocol. + if (iScraper.second.value == "true" || iScraper.second.value == "1") { if (std::find(std::begin(StructConvergedManifest.vExcludedScrapers), std::end(StructConvergedManifest.vExcludedScrapers), iScraper.first) @@ -3653,6 +3654,7 @@ bool ScraperConstructConvergedManifest(ConvergedManifest& StructConvergedManifes == std::end(StructConvergedManifest.vIncludedScrapers)) { StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + _log(logattribute::INFO, "ScraperConstructConvergedManifest", "Scraper " + iScraper.first + " authorized but not publishing."); } } } @@ -4032,6 +4034,7 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro == std::end(StructConvergedManifest.vIncludedScrapers)) { StructConvergedManifest.vScrapersNotPublishing.push_back(iScraper.first); + _log(logattribute::INFO, "ScraperConstructConvergedManifesByProject", "Scraper " + iScraper.first + " authorized but not publishing."); } } } From 8371af93424ac810c7241a67a7ac0ae975ecfe1e Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 24 Jun 2019 23:28:44 -0500 Subject: [PATCH 056/115] Fix block rejection when active researcher --- src/miner.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index f56bdb8f02..97fae62df3 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -30,6 +30,7 @@ double CoinToDouble(double surrogate); void ThreadTopUpKeyPool(void* parg); +bool HasActiveBeacon(const std::string& cpid); std::string SerializeBoincBlock(MiningCPID mcpid); bool LessVerbose(int iMax1000); @@ -832,9 +833,8 @@ unsigned int GetNumberOfStakeOutputs(int64_t &nValue, int64_t &nMinStakeSplitVal bool SignStakeBlock(CBlock &block, CKey &key, vector &StakeInputs, CWallet *pwallet, MiningCPID& BoincData) { - //Append beacon signature to coinbase - std::string PublicKey = GlobalCPUMiningCPID.BoincPublicKey; - if (!PublicKey.empty()) + // Append beacon signature to coinbase + if (HasActiveBeacon(GlobalCPUMiningCPID.cpid)) { std::string sBoincSignature; std::string sError; From 5709dcf88798fd1895eda675589d8d797cc60077 Mon Sep 17 00:00:00 2001 From: Richard Leckinger Date: Wed, 26 Jun 2019 10:51:48 +1200 Subject: [PATCH 057/115] bump version to 4.0.4.2 bump development branch to 4.0.4.2 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index e8696be722..5adf1d1109 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 1) +define(_CLIENT_VERSION_BUILD, 2) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From 4066c5e8e7d758309d6f113d2fb4d550d62c77d1 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 28 Jun 2019 19:01:46 -0400 Subject: [PATCH 058/115] Add back in the in sync check in ScraperGetNeuralContract This is done with a atomic boolean that is updated by the scraper or neuralnet loops as a result of the call to the OutOfSyncByAge function. --- src/scraper/scraper.cpp | 19 +++++++++++++++---- src/scraper/scraper.h | 3 +++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index bbb89640ff..6e004b0d6c 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -735,6 +735,9 @@ void Scraper(bool bSingleShot) // beforehand. while (OutOfSyncByAge()) { + // Set atomic out of sync flag to true. + fOutOfSyncByAge = true; + // Signal stats event to UI. uiInterface.NotifyScraperEvent(scrapereventtypes::OutOfSync, CT_UPDATING, {}); @@ -742,6 +745,9 @@ void Scraper(bool bSingleShot) MilliSleep(8000); } + // Set atomic out of sync flag to false. + fOutOfSyncByAge = false; + nSyncTime = GetAdjustedTime(); // Now that we are in sync, refresh from the AppCache and check for proper directory/file structure. @@ -980,6 +986,9 @@ void NeuralNetwork() // We do NOT want to filter statistics with an out-of-date beacon list or project whitelist. while (OutOfSyncByAge()) { + // Set atomic out of sync flag to true. + fOutOfSyncByAge = true; + // Signal stats event to UI. uiInterface.NotifyScraperEvent(scrapereventtypes::OutOfSync, CT_NEW, {}); @@ -987,6 +996,9 @@ void NeuralNetwork() MilliSleep(8000); } + // Set atomic out of sync flag to false. + fOutOfSyncByAge = false; + nSyncTime = GetAdjustedTime(); // ScraperHousekeeping items are only run in this thread if not handled by the Scraper() thread. @@ -4293,11 +4305,10 @@ std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats) std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDirectFromStatsUpdate) { - // NOTE - out of sync check here is removed, because in all instances, it is being checked before this function is - // called. OutOfSyncByAge calls PreviousBlockAge(), which takes a lock on cs_main. This is likely a deadlock culprit. + // NOTE - OutOfSyncByAge calls PreviousBlockAge(), which takes a lock on cs_main. This is likely a deadlock culprit if called from here + // and the scraper or neuralnet loop nearly simultaneously. So we use an atomic flag updated by the scraper or neuralnet loop. // If not in sync then immediately bail with a empty string. - // if (OutOfSyncByAge()) - // return std::string(); + if (fOutOfSyncByAge) return std::string(); // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep / 1000 old (for seconds), then simply report back the cache contents. // This prevents the relatively heavyweight stats computations from running too often. The time here may not exactly align with diff --git a/src/scraper/scraper.h b/src/scraper/scraper.h index b6bfbaa84c..c7dfea0f4f 100644 --- a/src/scraper/scraper.h +++ b/src/scraper/scraper.h @@ -100,6 +100,9 @@ AppCacheSectionExt mScrapersExt = {}; // Lets try to start using some lockless synchronization. std::atomic nSyncTime {0}; +// Starting state is always out of sync. This atomic is to avoid multiple threads calling +// OutOfSyncByAge(), which takes a lock on cs_main and can cause deadlocks. +std::atomic fOutOfSyncByAge {true}; CCriticalSection cs_mScrapersExt; From 9ce5ffbd49aa509f0223312224fd0d736aeb662d Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 28 Jun 2019 23:53:15 -0500 Subject: [PATCH 059/115] Clear email to fix intermittent researcher test failure --- src/test/neuralnet/researcher_tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/neuralnet/researcher_tests.cpp b/src/test/neuralnet/researcher_tests.cpp index eef136b4b2..c394e129e1 100644 --- a/src/test/neuralnet/researcher_tests.cpp +++ b/src/test/neuralnet/researcher_tests.cpp @@ -600,7 +600,7 @@ BOOST_AUTO_TEST_CASE(it_ignores_the_team_requirement_when_set_by_protocol) } // Clean up: - SetArgument("email", "researcher@example.com"); + SetArgument("email", ""); DeleteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP"); NN::Researcher::Reload({ }); } From a8f168132361e3716a218aea7f7ca573c98e462d Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 29 Jun 2019 00:04:33 -0500 Subject: [PATCH 060/115] Remove unused GetFilesize() function --- src/main.cpp | 11 ----------- src/util.h | 2 -- 2 files changed, 13 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 29bc268778..6f5f150657 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4751,17 +4751,6 @@ std::string RetrieveMd5(std::string s1) } } -int GetFilesize(FILE* file) -{ - int nSavePos = ftell(file); - int nFilesize = -1; - if (fseek(file, 0, SEEK_END) == 0) - nFilesize = ftell(file); - fseek(file, nSavePos, SEEK_SET); - return nFilesize; -} - - std::set GetAlternativeBeaconKeys(const std::string& cpid) { int64_t iMaxSeconds = 60 * 24 * 30 * 6 * 60; diff --git a/src/util.h b/src/util.h index 464427df9c..0c913aebac 100644 --- a/src/util.h +++ b/src/util.h @@ -192,8 +192,6 @@ bool WildcardMatch(const char* psz, const char* mask); bool WildcardMatch(const std::string& str, const std::string& mask); void FileCommit(FILE *fileout); -int GetFilesize(FILE* file); - std::string TimestampToHRDate(double dtm); bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest); From 442f23b2c6c7566e261b5a96aa15831802e5f7de Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 29 Jun 2019 16:48:31 -0400 Subject: [PATCH 061/115] Change type of AlignScraperFileManifestEntries to void --- src/scraper/scraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 6e004b0d6c..f6b643dfeb 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -105,7 +105,7 @@ bool LoadScraperFileManifest(const fs::path& file); bool InsertScraperFileManifestEntry(ScraperFileManifestEntry& entry); unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry); bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry); -bool AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest); +void AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest); ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); @@ -2354,7 +2354,7 @@ bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry) } -bool AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest) +void AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest) { ScraperFileManifestEntry NewRecord; From c2e9b15a2c29ecf4188fe4db668e3a7491efee91 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 30 Jun 2019 13:49:04 -0400 Subject: [PATCH 062/115] Primitive first cut of native SB serialization --- src/contract/superblock.cpp | 156 ++++++++++++++++++++++++++++++++++++ src/contract/superblock.h | 82 +++++++++++++++++++ src/neuralnet/cpid.h | 24 ++++++ src/scraper/scraper.cpp | 98 +++++++++++++++++++++- src/serialize.h | 42 ++++++++++ 5 files changed, 401 insertions(+), 1 deletion(-) diff --git a/src/contract/superblock.cpp b/src/contract/superblock.cpp index c0119428b8..5edaa0bf3f 100644 --- a/src/contract/superblock.cpp +++ b/src/contract/superblock.cpp @@ -98,3 +98,159 @@ std::string PackBinarySuperblock(std::string sBlock) "" << ExtractXML(sBlock,"","") << ""; return block_stream.str(); } + + + + +void Superblock::PopulateReducedMaps() +{ + + uint16_t iProject = 0; + for (auto const& entry : mScraperSBStats) + { + if (entry.first.objecttype == statsobjecttype::byProject) + { + mProjectRef[entry.first.objectID] = iProject; + mProjectStats[iProject] = std::make_pair((uint64_t) std::round(entry.second.statsvalue.dAvgRAC), + (uint64_t) std::round(entry.second.statsvalue.dRAC)); + ++iProject; + } + } + + + // Find the single network wide NN entry and put in string. + ScraperObjectStatsKey StatsKey; + StatsKey.objecttype = statsobjecttype::NetworkWide; + StatsKey.objectID = ""; + + const auto& iter = mScraperSBStats.find(StatsKey); + + mProjectRef["Network"] = iProject; + mProjectStats[iProject] = std::make_pair((uint64_t) iter->second.statsvalue.dAvgRAC, + (uint64_t) iter->second.statsvalue.dRAC); + + nNetworkMagnitude = (uint64_t) std::round(iter->second.statsvalue.dMag); + + uint32_t iCPID = 0; + nZeroMagCPIDs = 0; + for (auto const& entry : mScraperSBStats) + { + if (entry.first.objecttype == statsobjecttype::byCPID) + { + // If the magnitude entry is zero suppress the CPID and increment the zero counter. + if (std::round(entry.second.statsvalue.dMag) > 0) + { + mCPIDRef[NN::Cpid::Parse(entry.first.objectID)] = iCPID; + mCPIDMagnitudes[iCPID] = (uint16_t) std::round(entry.second.statsvalue.dMag); + + ++iCPID; + } + else + { + nZeroMagCPIDs++; + } + } + } + + for (auto const& entry : mScraperSBStats) + { + if (entry.first.objecttype == statsobjecttype::byCPIDbyProject) + { + + std::vector vObjectID = split(entry.first.objectID, ","); + + const auto& iterProject = mProjectRef.find(vObjectID[0]); + const auto& iterCPID = mCPIDRef.find(NN::Cpid::Parse(vObjectID[1])); + + mProjectCPIDStats[iterProject->second][iterCPID->second] = std::make_tuple((uint64_t) std::round(entry.second.statsvalue.dTC), + (uint64_t) std::round(entry.second.statsvalue.dRAC), + (uint16_t) std::round(entry.second.statsvalue.dMag)); + } + + } + + fReducedMapsPopulated = true; +} + +void Superblock::SerializeSuperblock(CDataStream& ss, int nType, int nVersion) const +{ + WriteCompactSize(ss, mScraperSBStats.size()); + + for (const auto& entry : mScraperSBStats) + { + ss << (unsigned int) entry.first.objecttype; + ss << entry.first.objectID; + ss << entry.second.statsvalue.dTC; + ss << entry.second.statsvalue.dRAT; + ss << entry.second.statsvalue.dRAC; + ss << entry.second.statsvalue.dAvgRAC; + ss << entry.second.statsvalue.dMag; + } + + ss << nTime; + ss << nSBVersion; +} + +void Superblock::UnserializeSuperblock(CReaderStream& ss) +{ + //ss >> mScraperConvergedStats; + int64_t nSize = ReadCompactSize(ss); + + + unsigned int iEntry = 0; + for (auto entry = ss.begin(); entry < ss.end(); ++entry) + { + if (iEntry == nSize) break; + + ScraperObjectStats StatsEntry; + unsigned int nObjectType; + + ss >> nObjectType; + StatsEntry.statskey.objecttype = (statsobjecttype) nObjectType; + ss >> StatsEntry.statskey.objectID; + ss >> StatsEntry.statsvalue.dTC; + ss >> StatsEntry.statsvalue.dRAT; + ss >> StatsEntry.statsvalue.dRAC; + ss >> StatsEntry.statsvalue.dAvgRAC; + ss >> StatsEntry.statsvalue.dMag; + + mScraperSBStats[StatsEntry.statskey] = StatsEntry; + + ++iEntry; + } + + ss >> nTime; + ss >> nSBVersion; +} + +void Superblock::SerializeSuperblock2(CDataStream& ss, int nType, int nVersion) const +{ + ss << mProjectRef; + ss << mCPIDRef; + + ss << mProjectStats; + ss << mCPIDMagnitudes; + ss << mProjectCPIDStats; + + ss << nNetworkMagnitude; + ss << nZeroMagCPIDs; + ss << nHeight; + ss << nTime; + ss << nSBVersion; +} + +void Superblock::UnserializeSuperblock2(CReaderStream& ss) +{ + ss >> mProjectRef; + ss >> mCPIDRef; + + ss >> mProjectStats; + ss >> mCPIDMagnitudes; + ss >> mProjectCPIDStats; + + ss >> nNetworkMagnitude; + ss >> nZeroMagCPIDs; + ss >> nHeight; + ss >> nTime; + ss >> nSBVersion; +} diff --git a/src/contract/superblock.h b/src/contract/superblock.h index 796b4faca6..fffd930050 100644 --- a/src/contract/superblock.h +++ b/src/contract/superblock.h @@ -1,6 +1,88 @@ #pragma once +#include "scraper/fwd.h" #include +#include "key.h" +#include "neuralnet/cpid.h" std::string UnpackBinarySuperblock(std::string block); std::string PackBinarySuperblock(std::string sBlock); + + +class Superblock +{ +public: /* fields */ + + uint32_t nSBVersion; + + int64_t nTime; + int64_t nHeight; + + ScraperStats mScraperSBStats; + + bool fReducedMapsPopulated = false; + + // ----- Project ---- ProjID + std::map mProjectRef; + // ----- CPID ------- CPIDID + std::map mCPIDRef; + + // ------ ProjID ----------- avgRAC ---- RAC + std::map> mProjectStats; + // ------ CPIDID ----- Mag + std::map mCPIDMagnitudes; + //------- ProjID ---------- CPIDID ------------- TC -------- RAC ----- Mag + std::map>> mProjectCPIDStats; + + uint32_t nZeroMagCPIDs; + uint64_t nNetworkMagnitude; + + /* + std::string sContractHash; + std::string sContract; + + ConvergedManifest Convergence; + + std::vector m_verified_beacons; + + + */ + + /* + IMPLEMENT_SERIALIZE + ( + READWRITE(m_version); + READWRITE(m_projects); + READWRITE(m_magnitudes); + READWRITE(m_verified_beacons); + ) + */ + +public: /* public methods */ + + void PopulateReducedMaps(); + + // This serializes the full map. + void SerializeSuperblock(CDataStream& ss, int nType, int nVersion) const; + void UnserializeSuperblock(CReaderStream& ss); + + // This is similar to legacy + void SerializeSuperblock2(CDataStream& ss, int nType, int nVersion) const; + void UnserializeSuperblock2(CReaderStream& ss); + + + /* + + Superblock(); + int64_t Age() const; + + static Superblock UnpackLegacy(const std::string& binary); + std::string PackLegacy() const; + + QuorumHash ComputeQuorumHash() const; + double ComputeAverageMagnitude() const; + + + + */ +}; diff --git a/src/neuralnet/cpid.h b/src/neuralnet/cpid.h index 4e1731fa53..397ec3d9c2 100644 --- a/src/neuralnet/cpid.h +++ b/src/neuralnet/cpid.h @@ -76,6 +76,30 @@ class Cpid //! bool operator!=(const Cpid& other) const; + //! + //! \brief Compare a supplied CPID value for less than other. + //! + //! \param other A CPID value to check whether current is less than. + //! + //! \return \c true if the supplied CPID's bytes do not match. + //! + bool operator<(const Cpid& other) const + { + return ToString() < other.ToString(); + } + + //! + //! \brief Compare a supplied CPID value for greater than other. + //! + //! \param other A CPID value to check whether current is greater than. + //! + //! \return \c true if the supplied CPID's bytes do not match. + //! + bool operator>(const Cpid& other) const + { + return ToString() > other.ToString(); + } + //! //! \brief Determine whether the CPID contains only zeros. //! diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index f6b643dfeb..c90ab13460 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4,6 +4,8 @@ #include "http.h" #include "ui_interface.h" +#include "contract/superblock.h" + #include #include #include @@ -1054,7 +1056,8 @@ bool ScraperHousekeeping() // Contract binary pack/unpack check... _log(logattribute::INFO, "ScraperHousekeeping", "Checking compatibility with binary SB pack/unpack by packing then unpacking, then comparing to the original"); - std::string sSBCoreData_out = UnpackBinarySuperblock(PackBinarySuperblock(sSBCoreData)); + std::string sPackedSBCoreData = PackBinarySuperblock(sSBCoreData); + std::string sSBCoreData_out = UnpackBinarySuperblock(sPackedSBCoreData); if (sSBCoreData == sSBCoreData_out) _log(logattribute::INFO, "ScraperHousekeeping", "Generated contract passed binary pack/unpack"); @@ -1063,6 +1066,99 @@ bool ScraperHousekeeping() _log(logattribute::ERR, "ScraperHousekeeping", "Generated contract FAILED binary pack/unpack"); _log(logattribute::INFO, "ScraperHousekeeping", "sSBCoreData_out = \n" + sSBCoreData_out); } + + _log(logattribute::INFO, "ScraperHousekeeping", "sSBCoreData size = " + std::to_string(sSBCoreData.size())); + _log(logattribute::INFO, "ScraperHousekeeping", "sPackedSBCoreData size = " + std::to_string(sPackedSBCoreData.size())); + + Superblock NewFormatSuperblock; + Superblock NewFormatSuperblock_out; + CDataStream ss(SER_NETWORK, 1); + CDataStream ss2(SER_NETWORK, 1); + CDataStream ss3(SER_NETWORK, 1); + CDataStream ss4(SER_NETWORK, 1); + unsigned int nNewFormatSuperblockSerSize; + unsigned int nNewFormatSuperblock_outSerSize; + unsigned int nNewFormatSuperblockSerSize2; + unsigned int nNewFormatSuperblock_outSerSize2; + uint256 nNewFormatSuperblockHash; + uint256 nNewFormatSuperblock_outHash; + uint256 nNewFormatSuperblockHash2; + uint256 nNewFormatSuperblock_outHash2; + + { + LOCK(cs_ConvergedScraperStatsCache); + + NewFormatSuperblock.nSBVersion = 2; + NewFormatSuperblock.nTime = ConvergedScraperStatsCache.nTime; + NewFormatSuperblock.mScraperSBStats = ConvergedScraperStatsCache.mScraperConvergedStats; + } + + NewFormatSuperblock.PopulateReducedMaps(); + + _log(logattribute::INFO, "ScraperHousekeeping", "mProjRef size = " + std::to_string(NewFormatSuperblock.mProjectRef.size())); + _log(logattribute::INFO, "ScraperHousekeeping", "mCPIDRef size = " + std::to_string(NewFormatSuperblock.mCPIDRef.size())); + _log(logattribute::INFO, "ScraperHousekeeping", "mProjectCPIDStats size = " + std::to_string(NewFormatSuperblock.mProjectCPIDStats.size())); + + unsigned int nmProjectCPIDStatsTotalSize = 0; + for (auto const& entry : NewFormatSuperblock.mProjectCPIDStats) + { + _log(logattribute::INFO, "ScraperHousekeeping", "mProjectCPIDStats ProjID " + std::to_string(entry.first) + + ", CPID size " + std::to_string(entry.second.size())); + nmProjectCPIDStatsTotalSize += entry.second.size(); + } + + _log(logattribute::INFO, "ScraperHousekeeping", "mProjectCPIDStats total size = " + std::to_string(nmProjectCPIDStatsTotalSize)); + + + NewFormatSuperblock.SerializeSuperblock(ss, SER_NETWORK, 1); + + nNewFormatSuperblockSerSize = ss.size(); + nNewFormatSuperblockHash = Hash(ss.begin(), ss.end()); + + _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblockSerSize = " + std::to_string(nNewFormatSuperblockSerSize)); + + NewFormatSuperblock_out.UnserializeSuperblock(ss); + + NewFormatSuperblock_out.SerializeSuperblock(ss2, SER_NETWORK, 1); + + nNewFormatSuperblock_outSerSize = ss2.size(); + nNewFormatSuperblock_outHash = Hash(ss2.begin(), ss2.end()); + + _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblock_outSerSize = " + std::to_string(nNewFormatSuperblock_outSerSize)); + + if (nNewFormatSuperblockHash == nNewFormatSuperblock_outHash) + _log(logattribute::INFO, "ScraperHousekeeping", "NewFormatSuperblock serialization passed."); + else + { + _log(logattribute::ERR, "ScraperHousekeeping", "NewFormatSuperblock serialization FAILED."); + } + + + + NewFormatSuperblock.SerializeSuperblock2(ss3, SER_NETWORK, 1); + + nNewFormatSuperblockSerSize2 = ss3.size(); + nNewFormatSuperblockHash2 = Hash(ss3.begin(), ss3.end()); + + _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblockSerSize2 = " + std::to_string(nNewFormatSuperblockSerSize2)); + + + NewFormatSuperblock_out.UnserializeSuperblock2(ss3); + + NewFormatSuperblock_out.SerializeSuperblock2(ss4, SER_NETWORK, 1); + + nNewFormatSuperblock_outSerSize2 = ss4.size(); + nNewFormatSuperblock_outHash2 = Hash(ss4.begin(), ss4.end()); + + _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblock_outSerSize2 = " + std::to_string(nNewFormatSuperblock_outSerSize2)); + + if (nNewFormatSuperblockHash2 == nNewFormatSuperblock_outHash2) + _log(logattribute::INFO, "ScraperHousekeeping", "NewFormatSuperblock2 serialization passed."); + else + { + _log(logattribute::ERR, "ScraperHousekeeping", "NewFormatSuperblock2 serialization FAILED."); + } + } // Show this node's contract hash in the log. diff --git a/src/serialize.h b/src/serialize.h index 642339f051..beb2703665 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -322,6 +323,11 @@ template unsigned int GetSeri template void Serialize(Stream& os, const std::map& m, int nType, int nVersion); template void Unserialize(Stream& is, std::map& m, int nType, int nVersion); +// unordered_map +template unsigned int GetSerializeSize(const std::unordered_map& m, int nType, int nVersion); +template void Serialize(Stream& os, const std::unordered_map& m, int nType, int nVersion); +template void Unserialize(Stream& is, std::unordered_map& m, int nType, int nVersion); + // set template unsigned int GetSerializeSize(const std::set& m, int nType, int nVersion); template void Serialize(Stream& os, const std::set& m, int nType, int nVersion); @@ -625,6 +631,42 @@ void Unserialize(Stream& is, std::map& m, int nType, int nVersion + +// +// unordered_map +// +template +unsigned int GetSerializeSize(const std::unordered_map& m, int nType, int nVersion) +{ + unsigned int nSize = GetSizeOfCompactSize(m.size()); + for (typename std::unordered_map::const_iterator mi = m.begin(); mi != m.end(); ++mi) + nSize += GetSerializeSize((*mi), nType, nVersion); + return nSize; +} + +template +void Serialize(Stream& os, const std::unordered_map& m, int nType, int nVersion) +{ + WriteCompactSize(os, m.size()); + for (typename std::unordered_map::const_iterator mi = m.begin(); mi != m.end(); ++mi) + Serialize(os, (*mi), nType, nVersion); +} + +template +void Unserialize(Stream& is, std::unordered_map& m, int nType, int nVersion) +{ + m.clear(); + unsigned int nSize = ReadCompactSize(is); + typename std::unordered_map::iterator mi = m.begin(); + for (unsigned int i = 0; i < nSize; i++) + { + std::pair item; + Unserialize(is, item, nType, nVersion); + mi = m.insert(mi, item); + } +} + + // // set // From 278aed9144d10052b17260e7d6737bf7c66454d4 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 1 Jul 2019 16:39:46 -0400 Subject: [PATCH 063/115] Change (Un)SerializeSuperblock() for comparison purposes --- src/contract/superblock.cpp | 51 ++++++++++++------------------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/src/contract/superblock.cpp b/src/contract/superblock.cpp index 5edaa0bf3f..f0c5c6cfb8 100644 --- a/src/contract/superblock.cpp +++ b/src/contract/superblock.cpp @@ -174,51 +174,32 @@ void Superblock::PopulateReducedMaps() void Superblock::SerializeSuperblock(CDataStream& ss, int nType, int nVersion) const { - WriteCompactSize(ss, mScraperSBStats.size()); + ss << mProjectRef; + ss << mCPIDRef; - for (const auto& entry : mScraperSBStats) - { - ss << (unsigned int) entry.first.objecttype; - ss << entry.first.objectID; - ss << entry.second.statsvalue.dTC; - ss << entry.second.statsvalue.dRAT; - ss << entry.second.statsvalue.dRAC; - ss << entry.second.statsvalue.dAvgRAC; - ss << entry.second.statsvalue.dMag; - } + ss << mProjectStats; + ss << mCPIDMagnitudes; + //ss << mProjectCPIDStats; + ss << nNetworkMagnitude; + ss << nZeroMagCPIDs; + ss << nHeight; ss << nTime; ss << nSBVersion; } void Superblock::UnserializeSuperblock(CReaderStream& ss) { - //ss >> mScraperConvergedStats; - int64_t nSize = ReadCompactSize(ss); - - - unsigned int iEntry = 0; - for (auto entry = ss.begin(); entry < ss.end(); ++entry) - { - if (iEntry == nSize) break; - - ScraperObjectStats StatsEntry; - unsigned int nObjectType; - - ss >> nObjectType; - StatsEntry.statskey.objecttype = (statsobjecttype) nObjectType; - ss >> StatsEntry.statskey.objectID; - ss >> StatsEntry.statsvalue.dTC; - ss >> StatsEntry.statsvalue.dRAT; - ss >> StatsEntry.statsvalue.dRAC; - ss >> StatsEntry.statsvalue.dAvgRAC; - ss >> StatsEntry.statsvalue.dMag; - - mScraperSBStats[StatsEntry.statskey] = StatsEntry; + ss >> mProjectRef; + ss >> mCPIDRef; - ++iEntry; - } + ss >> mProjectStats; + ss >> mCPIDMagnitudes; + //ss >> mProjectCPIDStats; + ss >> nNetworkMagnitude; + ss >> nZeroMagCPIDs; + ss >> nHeight; ss >> nTime; ss >> nSBVersion; } From 32abe1ea69e105a96ff5584d93faf98b301b8046 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 1 Jul 2019 23:12:13 -0400 Subject: [PATCH 064/115] Add testnewsb temporary rpc function --- src/rpcserver.cpp | 1 + src/rpcserver.h | 1 + src/scraper/scraper.cpp | 150 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 127eca763c..e916e62d40 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -400,6 +400,7 @@ static const CRPCCommand vRPCCommands[] = { "savescraperfilemanifest", &savescraperfilemanifest, cat_developer }, { "deletecscrapermanifest", &deletecscrapermanifest, cat_developer }, { "archivescraperlog", &archivescraperlog, cat_developer }, + { "testnewsb", &testnewsb, cat_developer }, // Network commands { "addnode", &addnode, cat_network }, diff --git a/src/rpcserver.h b/src/rpcserver.h index 5071f3ac34..b2ef165559 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -219,6 +219,7 @@ extern UniValue sendscraperfilemanifest(const UniValue& params, bool fHelp); extern UniValue savescraperfilemanifest(const UniValue& params, bool fHelp); extern UniValue deletecscrapermanifest(const UniValue& params, bool fHelp); extern UniValue archivescraperlog(const UniValue& params, bool fHelp); +extern UniValue testnewsb(const UniValue& params, bool fHelp); // Network extern UniValue addnode(const UniValue& params, bool fHelp); diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index c90ab13460..62f08662c7 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4709,3 +4709,153 @@ UniValue archivescraperlog(const UniValue& params, bool fHelp) } + +UniValue testnewsb(const UniValue& params, bool fHelp) +{ + if (fHelp || params.size() != 0 ) + throw std::runtime_error( + "testnewsb\n" + "Test the new Superblock class.\n" + ); + + LOCK(cs_ConvergedScraperStatsCache); + + if (ConvergedScraperStatsCache.sContract.empty()) + throw std::runtime_error( + "Wait until a convergence is formed.\n" + ); + + UniValue res(UniValue::VOBJ); + + // Contract binary pack/unpack check... + _log(logattribute::INFO, "testnewsb", "Checking compatibility with binary SB pack/unpack by packing then unpacking, then comparing to the original"); + + std::string& sSBCoreData = ConvergedScraperStatsCache.sContract; + + std::string sPackedSBCoreData = PackBinarySuperblock(sSBCoreData); + std::string sSBCoreData_out = UnpackBinarySuperblock(sPackedSBCoreData); + + if (sSBCoreData == sSBCoreData_out) + { + _log(logattribute::INFO, "testnewsb", "Generated contract passed binary pack/unpack"); + res.pushKV("Generated legacy contract", "passed"); + } + else + { + _log(logattribute::ERR, "testnewsb", "Generated contract FAILED binary pack/unpack"); + _log(logattribute::INFO, "testnewsb", "sSBCoreData_out = \n" + sSBCoreData_out); + res.pushKV("Generated legacy contract", "FAILED"); + + } + + _log(logattribute::INFO, "testnewsb", "sSBCoreData size = " + std::to_string(sSBCoreData.size())); + res.pushKV("sSBCoreData size", (uint64_t) sSBCoreData.size()); + _log(logattribute::INFO, "testnewsb", "sPackedSBCoreData size = " + std::to_string(sPackedSBCoreData.size())); + res.pushKV("sSBPackedCoreData size", (uint64_t) sPackedSBCoreData.size()); + + Superblock NewFormatSuperblock; + Superblock NewFormatSuperblock_out; + CDataStream ss(SER_NETWORK, 1); + CDataStream ss2(SER_NETWORK, 1); + CDataStream ss3(SER_NETWORK, 1); + CDataStream ss4(SER_NETWORK, 1); + uint64_t nNewFormatSuperblockSerSize; + uint64_t nNewFormatSuperblock_outSerSize; + uint64_t nNewFormatSuperblockSerSize2; + uint64_t nNewFormatSuperblock_outSerSize2; + uint256 nNewFormatSuperblockHash; + uint256 nNewFormatSuperblock_outHash; + uint256 nNewFormatSuperblockHash2; + uint256 nNewFormatSuperblock_outHash2; + + NewFormatSuperblock.nSBVersion = 2; + NewFormatSuperblock.nTime = ConvergedScraperStatsCache.nTime; + NewFormatSuperblock.mScraperSBStats = ConvergedScraperStatsCache.mScraperConvergedStats; + + NewFormatSuperblock.PopulateReducedMaps(); + + _log(logattribute::INFO, "testnewsb", "mProjRef size = " + std::to_string(NewFormatSuperblock.mProjectRef.size())); + res.pushKV("mProjRef size", (uint64_t) NewFormatSuperblock.mProjectRef.size()); + _log(logattribute::INFO, "testnewsb", "mCPIDRef size = " + std::to_string(NewFormatSuperblock.mCPIDRef.size())); + res.pushKV("mCPIDRef size", (uint64_t) NewFormatSuperblock.mCPIDRef.size()); + _log(logattribute::INFO, "testnewsb", "mProjectCPIDStats size = " + std::to_string(NewFormatSuperblock.mProjectCPIDStats.size())); + res.pushKV("mProjectCPIDStats size", (uint64_t) NewFormatSuperblock.mProjectCPIDStats.size()); + + uint64_t nmProjectCPIDStatsTotalSize = 0; + for (auto const& entry : NewFormatSuperblock.mProjectCPIDStats) + { + _log(logattribute::INFO, "testnewsb", "mProjectCPIDStats ProjID " + std::to_string(entry.first) + + ", CPID size " + std::to_string(entry.second.size())); + nmProjectCPIDStatsTotalSize += entry.second.size(); + } + + _log(logattribute::INFO, "testnewsb", "mProjectCPIDStats total size = " + std::to_string(nmProjectCPIDStatsTotalSize)); + res.pushKV("mProjectCPIDStats total size", nmProjectCPIDStatsTotalSize); + + + NewFormatSuperblock.SerializeSuperblock(ss, SER_NETWORK, 1); + + nNewFormatSuperblockSerSize = ss.size(); + nNewFormatSuperblockHash = Hash(ss.begin(), ss.end()); + + _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblockSerSize = " + std::to_string(nNewFormatSuperblockSerSize)); + res.pushKV("nNewFormatSuperblockSerSize", nNewFormatSuperblockSerSize); + + NewFormatSuperblock_out.UnserializeSuperblock(ss); + + NewFormatSuperblock_out.SerializeSuperblock(ss2, SER_NETWORK, 1); + + + nNewFormatSuperblock_outSerSize = ss2.size(); + nNewFormatSuperblock_outHash = Hash(ss2.begin(), ss2.end()); + + _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblock_outSerSize = " + std::to_string(nNewFormatSuperblock_outSerSize)); + res.pushKV("nNewFormatSuperblock_outSerSize", nNewFormatSuperblock_outSerSize); + + if (nNewFormatSuperblockHash == nNewFormatSuperblock_outHash) + { + _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock serialization passed."); + res.pushKV("NewFormatSuperblock serialization", "passed"); + } + else + { + _log(logattribute::ERR, "testnewsb", "NewFormatSuperblock serialization FAILED."); + res.pushKV("NewFormatSuperblock serialization", "FAILED"); + } + + + + NewFormatSuperblock.SerializeSuperblock2(ss3, SER_NETWORK, 1); + + nNewFormatSuperblockSerSize2 = ss3.size(); + nNewFormatSuperblockHash2 = Hash(ss3.begin(), ss3.end()); + + _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblockSerSize2 = " + std::to_string(nNewFormatSuperblockSerSize2)); + res.pushKV("nNewFormatSuperblockSerSize2", nNewFormatSuperblockSerSize2); + + + NewFormatSuperblock_out.UnserializeSuperblock2(ss3); + + NewFormatSuperblock_out.SerializeSuperblock2(ss4, SER_NETWORK, 1); + + nNewFormatSuperblock_outSerSize2 = ss4.size(); + nNewFormatSuperblock_outHash2 = Hash(ss4.begin(), ss4.end()); + + _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblock_outSerSize2 = " + std::to_string(nNewFormatSuperblock_outSerSize2)); + res.pushKV("nNewFormatSuperblock_outSerSize2", nNewFormatSuperblock_outSerSize2); + + if (nNewFormatSuperblockHash2 == nNewFormatSuperblock_outHash2) + { + _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock2 serialization passed."); + res.pushKV("NewFormatSuperblock2 serialization", "passed"); + } + else + { + _log(logattribute::ERR, "testnewsb", "NewFormatSuperblock2 serialization FAILED."); + res.pushKV("NewFormatSuperblock2 serialization", "FAILED"); + } + + return res; +} + + From 2eac643bc88a34e33a80ea729b2108d1ff44883a Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 2 Jul 2019 01:02:44 -0500 Subject: [PATCH 065/115] Add back informational magnitude to generated blocks --- src/miner.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/miner.cpp b/src/miner.cpp index 97fae62df3..447bd0522c 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -30,6 +30,7 @@ double CoinToDouble(double surrogate); void ThreadTopUpKeyPool(void* parg); +double CalculatedMagnitude(int64_t locktime, bool bUseLederstrumpf); bool HasActiveBeacon(const std::string& cpid); std::string SerializeBoincBlock(MiningCPID mcpid); bool LessVerbose(int iMax1000); @@ -973,6 +974,7 @@ bool CreateGridcoinReward(CBlock &blocknew, MiningCPID& miningcpid, uint64_t &nC pbh=pindexPrev->GetBlockHash(); miningcpid.lastblockhash = pbh.GetHex(); + miningcpid.Magnitude = CalculatedMagnitude(blocknew.nTime, false); miningcpid.ResearchSubsidy = OUT_POR; miningcpid.ResearchAge = dAccrualAge; miningcpid.ResearchMagnitudeUnit = dAccrualMagnitudeUnit; From 21a9244e135789fb1caedbc5cd336235f6fe6472 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 2 Jul 2019 12:38:28 -0500 Subject: [PATCH 066/115] Move superblock code to neuralnet directory --- src/Makefile.am | 4 ++-- src/main.cpp | 2 +- src/{contract => neuralnet}/superblock.cpp | 0 src/{contract => neuralnet}/superblock.h | 0 src/scraper/scraper.cpp | 2 +- src/test/gridcoin_tests.cpp | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) rename src/{contract => neuralnet}/superblock.cpp (100%) rename src/{contract => neuralnet}/superblock.h (100%) diff --git a/src/Makefile.am b/src/Makefile.am index 41710d0fec..afeef92359 100755 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -74,7 +74,6 @@ GRIDCOIN_CORE_H = \ compat/endian.h \ contract/polls.h \ contract/contract.h \ - contract/superblock.h \ crypter.h \ db.h \ fwd.h \ @@ -95,6 +94,7 @@ GRIDCOIN_CORE_H = \ neuralnet/neuralnet_stub.h \ neuralnet/project.h \ neuralnet/researcher.h \ + neuralnet/superblock.h \ netbase.h \ net.h \ pbkdf2.h \ @@ -135,7 +135,6 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ checkpoints.cpp \ contract/polls.cpp \ contract/contract.cpp \ - contract/superblock.cpp \ crypter.cpp \ db.cpp \ gridcoin.cpp \ @@ -151,6 +150,7 @@ GRIDCOIN_CORE_CPP = addrman.cpp \ neuralnet/cpid.cpp \ neuralnet/project.cpp \ neuralnet/researcher.cpp \ + neuralnet/superblock.cpp \ netbase.cpp \ net.cpp \ noui.cpp \ diff --git a/src/main.cpp b/src/main.cpp index 29bc268778..c84e9ff78a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,11 +22,11 @@ #include "neuralnet/cpid.h" #include "neuralnet/neuralnet.h" #include "neuralnet/researcher.h" +#include "neuralnet/superblock.h" #include "backup.h" #include "appcache.h" #include "tally.h" #include "contract/contract.h" -#include "contract/superblock.h" #include "scraper_net.h" #include diff --git a/src/contract/superblock.cpp b/src/neuralnet/superblock.cpp similarity index 100% rename from src/contract/superblock.cpp rename to src/neuralnet/superblock.cpp diff --git a/src/contract/superblock.h b/src/neuralnet/superblock.h similarity index 100% rename from src/contract/superblock.h rename to src/neuralnet/superblock.h diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 62f08662c7..7ddd58a9ed 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4,7 +4,7 @@ #include "http.h" #include "ui_interface.h" -#include "contract/superblock.h" +#include "neuralnet/superblock.h" #include #include diff --git a/src/test/gridcoin_tests.cpp b/src/test/gridcoin_tests.cpp index 8ec6541fa1..52b12a77c3 100755 --- a/src/test/gridcoin_tests.cpp +++ b/src/test/gridcoin_tests.cpp @@ -3,7 +3,7 @@ #include "main.h" #include "global_objects_noui.hpp" #include "appcache.h" -#include "contract/superblock.h" +#include "neuralnet/superblock.h" #include "data/superblock.txt.h" #include "data/superblock_packed.bin.h" From 72fc52d173086033859dd4a71e38aa3e8b94573f Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 2 Jul 2019 12:50:30 -0500 Subject: [PATCH 067/115] Move Superblock class into NN namespace --- src/neuralnet/superblock.cpp | 4 +++- src/neuralnet/superblock.h | 3 ++- src/scraper/scraper.cpp | 8 ++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index f0c5c6cfb8..d4f8ca9f92 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -1,9 +1,11 @@ -#include "superblock.h" +#include "neuralnet/superblock.h" #include "uint256.h" #include "util.h" #include "main.h" #include "compat/endian.h" +using namespace NN; + std::string ExtractValue(std::string data, std::string delimiter, int pos); namespace diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index fffd930050..39d3f6f596 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -8,7 +8,7 @@ std::string UnpackBinarySuperblock(std::string block); std::string PackBinarySuperblock(std::string sBlock); - +namespace NN { class Superblock { public: /* fields */ @@ -86,3 +86,4 @@ class Superblock */ }; +} diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 7ddd58a9ed..2125c43d50 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -1070,8 +1070,8 @@ bool ScraperHousekeeping() _log(logattribute::INFO, "ScraperHousekeeping", "sSBCoreData size = " + std::to_string(sSBCoreData.size())); _log(logattribute::INFO, "ScraperHousekeeping", "sPackedSBCoreData size = " + std::to_string(sPackedSBCoreData.size())); - Superblock NewFormatSuperblock; - Superblock NewFormatSuperblock_out; + NN::Superblock NewFormatSuperblock; + NN::Superblock NewFormatSuperblock_out; CDataStream ss(SER_NETWORK, 1); CDataStream ss2(SER_NETWORK, 1); CDataStream ss3(SER_NETWORK, 1); @@ -4753,8 +4753,8 @@ UniValue testnewsb(const UniValue& params, bool fHelp) _log(logattribute::INFO, "testnewsb", "sPackedSBCoreData size = " + std::to_string(sPackedSBCoreData.size())); res.pushKV("sSBPackedCoreData size", (uint64_t) sPackedSBCoreData.size()); - Superblock NewFormatSuperblock; - Superblock NewFormatSuperblock_out; + NN::Superblock NewFormatSuperblock; + NN::Superblock NewFormatSuperblock_out; CDataStream ss(SER_NETWORK, 1); CDataStream ss2(SER_NETWORK, 1); CDataStream ss3(SER_NETWORK, 1); From c539bf7804ad7aecd5ba58ce851381d263fb3d1e Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 2 Jul 2019 17:42:38 -0500 Subject: [PATCH 068/115] Refactor experimental SB serialization with compact integers --- src/neuralnet/superblock.cpp | 196 ++++++++++---------------- src/neuralnet/superblock.h | 259 ++++++++++++++++++++++++++++------- src/scraper/scraper.cpp | 192 +++++--------------------- 3 files changed, 321 insertions(+), 326 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index d4f8ca9f92..2ed939eb2c 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -15,7 +15,7 @@ namespace std::array cpid; int16_t magnitude; }; - + // Ensure that the compiler does not add padding between the cpid and the // magnitude. If it does it does it to align the data, at which point the // pointer cast in UnpackBinarySuperblock will be illegal. In such a @@ -23,7 +23,11 @@ namespace static_assert(offsetof(struct BinaryResearcher, magnitude) == sizeof(struct BinaryResearcher) - sizeof(int16_t), "Unexpected padding in BinaryResearcher"); -} +} // anonymous namespace + +// ----------------------------------------------------------------------------- +// Functions +// ----------------------------------------------------------------------------- std::string UnpackBinarySuperblock(std::string sBlock) { @@ -101,139 +105,89 @@ std::string PackBinarySuperblock(std::string sBlock) return block_stream.str(); } +// ----------------------------------------------------------------------------- +// Class: Superblock +// ----------------------------------------------------------------------------- - - -void Superblock::PopulateReducedMaps() +void Superblock::LoadStats(const ScraperStats& stats) { - - uint16_t iProject = 0; - for (auto const& entry : mScraperSBStats) - { - if (entry.first.objecttype == statsobjecttype::byProject) - { - mProjectRef[entry.first.objectID] = iProject; - mProjectStats[iProject] = std::make_pair((uint64_t) std::round(entry.second.statsvalue.dAvgRAC), - (uint64_t) std::round(entry.second.statsvalue.dRAC)); - ++iProject; - } - } - - - // Find the single network wide NN entry and put in string. - ScraperObjectStatsKey StatsKey; - StatsKey.objecttype = statsobjecttype::NetworkWide; - StatsKey.objectID = ""; - - const auto& iter = mScraperSBStats.find(StatsKey); - - mProjectRef["Network"] = iProject; - mProjectStats[iProject] = std::make_pair((uint64_t) iter->second.statsvalue.dAvgRAC, - (uint64_t) iter->second.statsvalue.dRAC); - - nNetworkMagnitude = (uint64_t) std::round(iter->second.statsvalue.dMag); - - uint32_t iCPID = 0; - nZeroMagCPIDs = 0; - for (auto const& entry : mScraperSBStats) - { - if (entry.first.objecttype == statsobjecttype::byCPID) - { - // If the magnitude entry is zero suppress the CPID and increment the zero counter. - if (std::round(entry.second.statsvalue.dMag) > 0) - { - mCPIDRef[NN::Cpid::Parse(entry.first.objectID)] = iCPID; - mCPIDMagnitudes[iCPID] = (uint16_t) std::round(entry.second.statsvalue.dMag); - - ++iCPID; - } - else - { - nZeroMagCPIDs++; - } + // TODO: this routine depends entirely on the order of items in the scraper + // stats map. Need to verify that it isn't too fragile... + for (const auto& entry: stats) { + switch (entry.first.objecttype) { + case statsobjecttype::byCPID: + { + uint16_t mag = std::round(entry.second.statsvalue.dMag); + + if (mag > 0) { + m_cpids.emplace(NN::Cpid::Parse(entry.first.objectID), mag); + } else { + m_network.m_zero_mag_cpid_count++; + } + } + break; + + case statsobjecttype::byProject: + m_projects.emplace(entry.first.objectID, ProjectStats( + std::round(entry.second.statsvalue.dAvgRAC), + std::round(entry.second.statsvalue.dRAC))); + + break; + + case statsobjecttype::byCPIDbyProject: + { + std::vector vObjectID = split(entry.first.objectID, ","); + Cpid cpid = NN::Cpid::Parse(vObjectID[1]); + + m_projects[vObjectID[0]].m_cpids.emplace( + std::distance(m_cpids.begin(), m_cpids.find(cpid)), + CpidStats( + std::round(entry.second.statsvalue.dTC), + std::round(entry.second.statsvalue.dRAC), + std::round(entry.second.statsvalue.dMag))); + } + break; + + case statsobjecttype::NetworkWide: + m_network.m_average_rac = entry.second.statsvalue.dAvgRAC; + m_network.m_rac = entry.second.statsvalue.dRAC; + m_network.m_magnitude = std::round(entry.second.statsvalue.dMag); + + break; } } - - for (auto const& entry : mScraperSBStats) - { - if (entry.first.objecttype == statsobjecttype::byCPIDbyProject) - { - - std::vector vObjectID = split(entry.first.objectID, ","); - - const auto& iterProject = mProjectRef.find(vObjectID[0]); - const auto& iterCPID = mCPIDRef.find(NN::Cpid::Parse(vObjectID[1])); - - mProjectCPIDStats[iterProject->second][iterCPID->second] = std::make_tuple((uint64_t) std::round(entry.second.statsvalue.dTC), - (uint64_t) std::round(entry.second.statsvalue.dRAC), - (uint16_t) std::round(entry.second.statsvalue.dMag)); - } - - } - - fReducedMapsPopulated = true; } -void Superblock::SerializeSuperblock(CDataStream& ss, int nType, int nVersion) const +// ----------------------------------------------------------------------------- +// Class: Superblock::CpidStats +// ----------------------------------------------------------------------------- + +Superblock::CpidStats::CpidStats() + : m_total_credit(0) + , m_rac(0) + , m_magnitude(0) { - ss << mProjectRef; - ss << mCPIDRef; - - ss << mProjectStats; - ss << mCPIDMagnitudes; - //ss << mProjectCPIDStats; - - ss << nNetworkMagnitude; - ss << nZeroMagCPIDs; - ss << nHeight; - ss << nTime; - ss << nSBVersion; } -void Superblock::UnserializeSuperblock(CReaderStream& ss) +Superblock::CpidStats::CpidStats( + uint64_t total_credit, + uint64_t rac, + uint16_t magnitude) + : m_total_credit(total_credit) + , m_rac(rac) + , m_magnitude(magnitude) { - ss >> mProjectRef; - ss >> mCPIDRef; - - ss >> mProjectStats; - ss >> mCPIDMagnitudes; - //ss >> mProjectCPIDStats; - - ss >> nNetworkMagnitude; - ss >> nZeroMagCPIDs; - ss >> nHeight; - ss >> nTime; - ss >> nSBVersion; } -void Superblock::SerializeSuperblock2(CDataStream& ss, int nType, int nVersion) const +// ----------------------------------------------------------------------------- +// Class: Superblock::ProjectStats +// ----------------------------------------------------------------------------- + +Superblock::ProjectStats::ProjectStats() : m_average_rac(0) , m_rac(0) { - ss << mProjectRef; - ss << mCPIDRef; - - ss << mProjectStats; - ss << mCPIDMagnitudes; - ss << mProjectCPIDStats; - - ss << nNetworkMagnitude; - ss << nZeroMagCPIDs; - ss << nHeight; - ss << nTime; - ss << nSBVersion; } -void Superblock::UnserializeSuperblock2(CReaderStream& ss) +Superblock::ProjectStats::ProjectStats(uint64_t average_rac, uint64_t rac) + : m_average_rac(average_rac), m_rac(rac) { - ss >> mProjectRef; - ss >> mCPIDRef; - - ss >> mProjectStats; - ss >> mCPIDMagnitudes; - ss >> mProjectCPIDStats; - - ss >> nNetworkMagnitude; - ss >> nZeroMagCPIDs; - ss >> nHeight; - ss >> nTime; - ss >> nSBVersion; } diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index 39d3f6f596..a17fb2288f 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -9,67 +9,228 @@ std::string UnpackBinarySuperblock(std::string block); std::string PackBinarySuperblock(std::string sBlock); namespace NN { -class Superblock + +// TODO: move this out into a common location...? +template +struct Compact { -public: /* fields */ + Compact() : m_value(0) + { + } + + Compact(integer_t value) : m_value(value) + { + } + + integer_t m_value; + + // TODO: implement the other general-purpose operators... + + integer_t operator*() const + { + return m_value; + } + + bool operator<(Compact other) const + { + return m_value < other.m_value; + } + + bool operator<(integer_t other) const + { + return m_value < other; + } + + void operator=(integer_t value) + { + m_value = value; + } + + Compact& operator++() + { + m_value++; + + return *this; + } + + Compact operator++(int) + { + Compact original = *this; + ++*this; + + return original; + } + + unsigned int GetSerializeSize(int nType, int nVersion) const + { + if (m_value < 253) { + return sizeof(unsigned char); + } + + if (m_value <= std::numeric_limits::max()) { + return sizeof(unsigned char) + sizeof(unsigned short); + } + + if (m_value <= std::numeric_limits::max()) { + return sizeof(unsigned char) + sizeof(unsigned int); + } + + return sizeof(unsigned char) + sizeof(uint64_t); + } + + template + void Serialize(Stream& s, int nType, int nVersion) const + { + if (m_value < 253) { + unsigned char chSize = m_value; + WRITEDATA(s, chSize); + } else if (m_value <= std::numeric_limits::max()) { + unsigned char chSize = 253; + unsigned short xSize = m_value; + WRITEDATA(s, chSize); + WRITEDATA(s, xSize); + } else if (m_value <= std::numeric_limits::max()) { + unsigned char chSize = 254; + unsigned int xSize = m_value; + WRITEDATA(s, chSize); + WRITEDATA(s, xSize); + } else { + unsigned char chSize = 255; + uint64_t xSize = m_value; + WRITEDATA(s, chSize); + WRITEDATA(s, xSize); + } + } + + template + void Unserialize(Stream& s, int nType, int nVersion) + { + unsigned char chSize; + + // TODO: constrain max value to the size of the integer type in the + // template parameter. + uint64_t nSizeRet = 0; + + READDATA(s, chSize); + + if (chSize < 253) { + nSizeRet = chSize; + } else if (chSize == 253) { + unsigned short xSize; + READDATA(s, xSize); + nSizeRet = xSize; + + if (nSizeRet < 253) { + throw std::ios_base::failure("non-canonical Compact::Unserialize()"); + } + } else if (chSize == 254) { + unsigned int xSize; + READDATA(s, xSize); + nSizeRet = xSize; + + if (nSizeRet < 0x10000u) { + throw std::ios_base::failure("non-canonical Compact::Unserialize()"); + } + } else { + uint64_t xSize; + READDATA(s, xSize); + nSizeRet = xSize; + + if (nSizeRet < 0x100000000LLu) { + throw std::ios_base::failure("non-canonical Compact::Unserialize()"); + } + } + + m_value = nSizeRet; + } +}; - uint32_t nSBVersion; +class Superblock +{ +public: + struct CpidStats + { + CpidStats(); + + CpidStats(uint64_t total_credit, uint64_t rac, uint16_t magnitude); + + Compact m_total_credit; + Compact m_rac; + Compact m_magnitude; + + IMPLEMENT_SERIALIZE + ( + READWRITE(m_total_credit); + READWRITE(m_rac); + READWRITE(m_magnitude); + ) + }; + + struct ProjectStats + { + ProjectStats(); + + ProjectStats(uint64_t average_rac, uint64_t rac); + + Compact m_average_rac; + Compact m_rac; + std::map, CpidStats> m_cpids; + + IMPLEMENT_SERIALIZE + ( + READWRITE(m_average_rac); + READWRITE(m_rac); + + // Omit full project stats to compare old content size: + // TODO: remove the condition? + if (nVersion > 1) { + READWRITE(m_cpids); + } + ) + }; + + struct NetworkStats + { + Compact m_average_rac; + Compact m_rac; + Compact m_magnitude; + Compact m_zero_mag_cpid_count; + + IMPLEMENT_SERIALIZE + ( + READWRITE(m_average_rac); + READWRITE(m_rac); + READWRITE(m_magnitude); + READWRITE(m_zero_mag_cpid_count); + ) + }; + + uint32_t m_version; + std::map> m_cpids; + std::map m_projects; + NetworkStats m_network; + //std::vector m_verified_beacons; int64_t nTime; int64_t nHeight; - ScraperStats mScraperSBStats; - - bool fReducedMapsPopulated = false; - - // ----- Project ---- ProjID - std::map mProjectRef; - // ----- CPID ------- CPIDID - std::map mCPIDRef; - - // ------ ProjID ----------- avgRAC ---- RAC - std::map> mProjectStats; - // ------ CPIDID ----- Mag - std::map mCPIDMagnitudes; - //------- ProjID ---------- CPIDID ------------- TC -------- RAC ----- Mag - std::map>> mProjectCPIDStats; - - uint32_t nZeroMagCPIDs; - uint64_t nNetworkMagnitude; - - /* - std::string sContractHash; - std::string sContract; - - ConvergedManifest Convergence; - - std::vector m_verified_beacons; - - - */ - - /* IMPLEMENT_SERIALIZE ( - READWRITE(m_version); + if (!(nType & SER_GETHASH)) { + READWRITE(m_version); + } + + nVersion = m_version; + + READWRITE(m_cpids); READWRITE(m_projects); - READWRITE(m_magnitudes); - READWRITE(m_verified_beacons); + READWRITE(m_network); + //READWRITE(m_verified_beacons); ) - */ public: /* public methods */ - void PopulateReducedMaps(); - - // This serializes the full map. - void SerializeSuperblock(CDataStream& ss, int nType, int nVersion) const; - void UnserializeSuperblock(CReaderStream& ss); - - // This is similar to legacy - void SerializeSuperblock2(CDataStream& ss, int nType, int nVersion) const; - void UnserializeSuperblock2(CReaderStream& ss); - + void LoadStats(const ScraperStats& stats); /* @@ -82,8 +243,6 @@ class Superblock QuorumHash ComputeQuorumHash() const; double ComputeAverageMagnitude() const; - - */ }; } diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 2125c43d50..3ba986044f 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -1034,6 +1034,7 @@ void NeuralNetwork() } } +UniValue testnewsb(const UniValue& params, bool fHelp); bool ScraperHousekeeping() { @@ -1053,112 +1054,8 @@ bool ScraperHousekeeping() if (fDebug3 && !sSBCoreData.empty()) { - // Contract binary pack/unpack check... - _log(logattribute::INFO, "ScraperHousekeeping", "Checking compatibility with binary SB pack/unpack by packing then unpacking, then comparing to the original"); - - std::string sPackedSBCoreData = PackBinarySuperblock(sSBCoreData); - std::string sSBCoreData_out = UnpackBinarySuperblock(sPackedSBCoreData); - - if (sSBCoreData == sSBCoreData_out) - _log(logattribute::INFO, "ScraperHousekeeping", "Generated contract passed binary pack/unpack"); - else - { - _log(logattribute::ERR, "ScraperHousekeeping", "Generated contract FAILED binary pack/unpack"); - _log(logattribute::INFO, "ScraperHousekeeping", "sSBCoreData_out = \n" + sSBCoreData_out); - } - - _log(logattribute::INFO, "ScraperHousekeeping", "sSBCoreData size = " + std::to_string(sSBCoreData.size())); - _log(logattribute::INFO, "ScraperHousekeeping", "sPackedSBCoreData size = " + std::to_string(sPackedSBCoreData.size())); - - NN::Superblock NewFormatSuperblock; - NN::Superblock NewFormatSuperblock_out; - CDataStream ss(SER_NETWORK, 1); - CDataStream ss2(SER_NETWORK, 1); - CDataStream ss3(SER_NETWORK, 1); - CDataStream ss4(SER_NETWORK, 1); - unsigned int nNewFormatSuperblockSerSize; - unsigned int nNewFormatSuperblock_outSerSize; - unsigned int nNewFormatSuperblockSerSize2; - unsigned int nNewFormatSuperblock_outSerSize2; - uint256 nNewFormatSuperblockHash; - uint256 nNewFormatSuperblock_outHash; - uint256 nNewFormatSuperblockHash2; - uint256 nNewFormatSuperblock_outHash2; - - { - LOCK(cs_ConvergedScraperStatsCache); - - NewFormatSuperblock.nSBVersion = 2; - NewFormatSuperblock.nTime = ConvergedScraperStatsCache.nTime; - NewFormatSuperblock.mScraperSBStats = ConvergedScraperStatsCache.mScraperConvergedStats; - } - - NewFormatSuperblock.PopulateReducedMaps(); - - _log(logattribute::INFO, "ScraperHousekeeping", "mProjRef size = " + std::to_string(NewFormatSuperblock.mProjectRef.size())); - _log(logattribute::INFO, "ScraperHousekeeping", "mCPIDRef size = " + std::to_string(NewFormatSuperblock.mCPIDRef.size())); - _log(logattribute::INFO, "ScraperHousekeeping", "mProjectCPIDStats size = " + std::to_string(NewFormatSuperblock.mProjectCPIDStats.size())); - - unsigned int nmProjectCPIDStatsTotalSize = 0; - for (auto const& entry : NewFormatSuperblock.mProjectCPIDStats) - { - _log(logattribute::INFO, "ScraperHousekeeping", "mProjectCPIDStats ProjID " + std::to_string(entry.first) - + ", CPID size " + std::to_string(entry.second.size())); - nmProjectCPIDStatsTotalSize += entry.second.size(); - } - - _log(logattribute::INFO, "ScraperHousekeeping", "mProjectCPIDStats total size = " + std::to_string(nmProjectCPIDStatsTotalSize)); - - - NewFormatSuperblock.SerializeSuperblock(ss, SER_NETWORK, 1); - - nNewFormatSuperblockSerSize = ss.size(); - nNewFormatSuperblockHash = Hash(ss.begin(), ss.end()); - - _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblockSerSize = " + std::to_string(nNewFormatSuperblockSerSize)); - - NewFormatSuperblock_out.UnserializeSuperblock(ss); - - NewFormatSuperblock_out.SerializeSuperblock(ss2, SER_NETWORK, 1); - - nNewFormatSuperblock_outSerSize = ss2.size(); - nNewFormatSuperblock_outHash = Hash(ss2.begin(), ss2.end()); - - _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblock_outSerSize = " + std::to_string(nNewFormatSuperblock_outSerSize)); - - if (nNewFormatSuperblockHash == nNewFormatSuperblock_outHash) - _log(logattribute::INFO, "ScraperHousekeeping", "NewFormatSuperblock serialization passed."); - else - { - _log(logattribute::ERR, "ScraperHousekeeping", "NewFormatSuperblock serialization FAILED."); - } - - - - NewFormatSuperblock.SerializeSuperblock2(ss3, SER_NETWORK, 1); - - nNewFormatSuperblockSerSize2 = ss3.size(); - nNewFormatSuperblockHash2 = Hash(ss3.begin(), ss3.end()); - - _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblockSerSize2 = " + std::to_string(nNewFormatSuperblockSerSize2)); - - - NewFormatSuperblock_out.UnserializeSuperblock2(ss3); - - NewFormatSuperblock_out.SerializeSuperblock2(ss4, SER_NETWORK, 1); - - nNewFormatSuperblock_outSerSize2 = ss4.size(); - nNewFormatSuperblock_outHash2 = Hash(ss4.begin(), ss4.end()); - - _log(logattribute::INFO, "ScraperHousekeeping", "nNewFormatSuperblock_outSerSize2 = " + std::to_string(nNewFormatSuperblock_outSerSize2)); - - if (nNewFormatSuperblockHash2 == nNewFormatSuperblock_outHash2) - _log(logattribute::INFO, "ScraperHousekeeping", "NewFormatSuperblock2 serialization passed."); - else - { - _log(logattribute::ERR, "ScraperHousekeeping", "NewFormatSuperblock2 serialization FAILED."); - } - + UniValue dummy_params(UniValue::VARR); + testnewsb(dummy_params, false); } // Show this node's contract hash in the log. @@ -4757,57 +4654,45 @@ UniValue testnewsb(const UniValue& params, bool fHelp) NN::Superblock NewFormatSuperblock_out; CDataStream ss(SER_NETWORK, 1); CDataStream ss2(SER_NETWORK, 1); - CDataStream ss3(SER_NETWORK, 1); - CDataStream ss4(SER_NETWORK, 1); uint64_t nNewFormatSuperblockSerSize; uint64_t nNewFormatSuperblock_outSerSize; - uint64_t nNewFormatSuperblockSerSize2; - uint64_t nNewFormatSuperblock_outSerSize2; uint256 nNewFormatSuperblockHash; uint256 nNewFormatSuperblock_outHash; - uint256 nNewFormatSuperblockHash2; - uint256 nNewFormatSuperblock_outHash2; - NewFormatSuperblock.nSBVersion = 2; + NewFormatSuperblock.m_version = 1; NewFormatSuperblock.nTime = ConvergedScraperStatsCache.nTime; - NewFormatSuperblock.mScraperSBStats = ConvergedScraperStatsCache.mScraperConvergedStats; - NewFormatSuperblock.PopulateReducedMaps(); + NewFormatSuperblock.LoadStats(ConvergedScraperStatsCache.mScraperConvergedStats); - _log(logattribute::INFO, "testnewsb", "mProjRef size = " + std::to_string(NewFormatSuperblock.mProjectRef.size())); - res.pushKV("mProjRef size", (uint64_t) NewFormatSuperblock.mProjectRef.size()); - _log(logattribute::INFO, "testnewsb", "mCPIDRef size = " + std::to_string(NewFormatSuperblock.mCPIDRef.size())); - res.pushKV("mCPIDRef size", (uint64_t) NewFormatSuperblock.mCPIDRef.size()); - _log(logattribute::INFO, "testnewsb", "mProjectCPIDStats size = " + std::to_string(NewFormatSuperblock.mProjectCPIDStats.size())); - res.pushKV("mProjectCPIDStats size", (uint64_t) NewFormatSuperblock.mProjectCPIDStats.size()); + _log(logattribute::INFO, "testnewsb", "m_projects size = " + std::to_string(NewFormatSuperblock.m_projects.size())); + res.pushKV("m_projects size", (uint64_t) NewFormatSuperblock.m_projects.size()); + _log(logattribute::INFO, "testnewsb", "m_cpids size = " + std::to_string(NewFormatSuperblock.m_cpids.size())); + res.pushKV("m_cpids size", (uint64_t) NewFormatSuperblock.m_cpids.size()); uint64_t nmProjectCPIDStatsTotalSize = 0; - for (auto const& entry : NewFormatSuperblock.mProjectCPIDStats) + for (auto const& entry : NewFormatSuperblock.m_projects) { - _log(logattribute::INFO, "testnewsb", "mProjectCPIDStats ProjID " + std::to_string(entry.first) - + ", CPID size " + std::to_string(entry.second.size())); - nmProjectCPIDStatsTotalSize += entry.second.size(); + _log(logattribute::INFO, "testnewsb", "m_projects ProjID " + entry.first + + ", CPID size " + std::to_string(entry.second.m_cpids.size())); + nmProjectCPIDStatsTotalSize += entry.second.m_cpids.size(); } - _log(logattribute::INFO, "testnewsb", "mProjectCPIDStats total size = " + std::to_string(nmProjectCPIDStatsTotalSize)); - res.pushKV("mProjectCPIDStats total size", nmProjectCPIDStatsTotalSize); - + _log(logattribute::INFO, "testnewsb", "m_projects.m_cpids total size = " + std::to_string(nmProjectCPIDStatsTotalSize)); + res.pushKV("m_projects.m_cpids total size", nmProjectCPIDStatsTotalSize); - NewFormatSuperblock.SerializeSuperblock(ss, SER_NETWORK, 1); - - nNewFormatSuperblockSerSize = ss.size(); - nNewFormatSuperblockHash = Hash(ss.begin(), ss.end()); + // Version 1: compare serialization without full project stats: + // + nNewFormatSuperblockSerSize = NewFormatSuperblock.GetSerializeSize(SER_NETWORK, 1); + nNewFormatSuperblockHash = SerializeHash(NewFormatSuperblock); _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblockSerSize = " + std::to_string(nNewFormatSuperblockSerSize)); res.pushKV("nNewFormatSuperblockSerSize", nNewFormatSuperblockSerSize); - NewFormatSuperblock_out.UnserializeSuperblock(ss); - - NewFormatSuperblock_out.SerializeSuperblock(ss2, SER_NETWORK, 1); - + ss << NewFormatSuperblock; + ss >> NewFormatSuperblock_out; - nNewFormatSuperblock_outSerSize = ss2.size(); - nNewFormatSuperblock_outHash = Hash(ss2.begin(), ss2.end()); + nNewFormatSuperblock_outSerSize = NewFormatSuperblock_out.GetSerializeSize(SER_NETWORK, 1); + nNewFormatSuperblock_outHash = SerializeHash(NewFormatSuperblock_out); _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblock_outSerSize = " + std::to_string(nNewFormatSuperblock_outSerSize)); res.pushKV("nNewFormatSuperblock_outSerSize", nNewFormatSuperblock_outSerSize); @@ -4824,27 +4709,26 @@ UniValue testnewsb(const UniValue& params, bool fHelp) } + // Version 2: compare serialization with full project stats: + // + NewFormatSuperblock.m_version = 2; - NewFormatSuperblock.SerializeSuperblock2(ss3, SER_NETWORK, 1); + nNewFormatSuperblockSerSize = NewFormatSuperblock.GetSerializeSize(SER_NETWORK, 1); + nNewFormatSuperblockHash = SerializeHash(NewFormatSuperblock); - nNewFormatSuperblockSerSize2 = ss3.size(); - nNewFormatSuperblockHash2 = Hash(ss3.begin(), ss3.end()); + _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblockSerSize2 = " + std::to_string(nNewFormatSuperblockSerSize)); + res.pushKV("nNewFormatSuperblockSerSize2", nNewFormatSuperblockSerSize); - _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblockSerSize2 = " + std::to_string(nNewFormatSuperblockSerSize2)); - res.pushKV("nNewFormatSuperblockSerSize2", nNewFormatSuperblockSerSize2); + ss2 << NewFormatSuperblock; + ss2 >> NewFormatSuperblock_out; + nNewFormatSuperblock_outSerSize = NewFormatSuperblock_out.GetSerializeSize(SER_NETWORK, 1); + nNewFormatSuperblock_outHash = SerializeHash(NewFormatSuperblock_out); - NewFormatSuperblock_out.UnserializeSuperblock2(ss3); + _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblock_outSerSize2 = " + std::to_string(nNewFormatSuperblock_outSerSize)); + res.pushKV("nNewFormatSuperblock_outSerSize2", nNewFormatSuperblock_outSerSize); - NewFormatSuperblock_out.SerializeSuperblock2(ss4, SER_NETWORK, 1); - - nNewFormatSuperblock_outSerSize2 = ss4.size(); - nNewFormatSuperblock_outHash2 = Hash(ss4.begin(), ss4.end()); - - _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblock_outSerSize2 = " + std::to_string(nNewFormatSuperblock_outSerSize2)); - res.pushKV("nNewFormatSuperblock_outSerSize2", nNewFormatSuperblock_outSerSize2); - - if (nNewFormatSuperblockHash2 == nNewFormatSuperblock_outHash2) + if (nNewFormatSuperblockHash == nNewFormatSuperblock_outHash) { _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock2 serialization passed."); res.pushKV("NewFormatSuperblock2 serialization", "passed"); @@ -4857,5 +4741,3 @@ UniValue testnewsb(const UniValue& params, bool fHelp) return res; } - - From 5de25284aa906dfbb64e2f683a6db8d4aab797a3 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 2 Jul 2019 21:21:09 -0500 Subject: [PATCH 069/115] Optimize NN::Cpid less than and greater than operators --- src/neuralnet/cpid.cpp | 10 ++++++ src/neuralnet/cpid.h | 20 ++++++------ src/test/neuralnet/cpid_tests.cpp | 52 +++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 10 deletions(-) diff --git a/src/neuralnet/cpid.cpp b/src/neuralnet/cpid.cpp index 38365c6064..30e22ca703 100644 --- a/src/neuralnet/cpid.cpp +++ b/src/neuralnet/cpid.cpp @@ -82,6 +82,16 @@ bool Cpid::operator!=(const Cpid& other) const return m_bytes != other.m_bytes; } +bool Cpid::operator<(const Cpid& other) const +{ + return m_bytes < other.m_bytes; +} + +bool Cpid::operator>(const Cpid& other) const +{ + return m_bytes > other.m_bytes; +} + bool Cpid::IsZero() const { const auto zero = [](const unsigned char& i) { return i == 0; }; diff --git a/src/neuralnet/cpid.h b/src/neuralnet/cpid.h index 397ec3d9c2..3826b7ee6c 100644 --- a/src/neuralnet/cpid.h +++ b/src/neuralnet/cpid.h @@ -79,26 +79,26 @@ class Cpid //! //! \brief Compare a supplied CPID value for less than other. //! + //! The comparison checks from left to right with the most significant byte + //! on the left (byte order equivalent to the hex string representation). + //! //! \param other A CPID value to check whether current is less than. //! - //! \return \c true if the supplied CPID's bytes do not match. + //! \return \c true if the supplied CPID's bytes represent a greater number. //! - bool operator<(const Cpid& other) const - { - return ToString() < other.ToString(); - } + bool operator<(const Cpid& other) const; //! //! \brief Compare a supplied CPID value for greater than other. //! + //! The comparison checks from left to right with the most significant byte + //! on the left (byte order equivalent to the hex string representation). + //! //! \param other A CPID value to check whether current is greater than. //! - //! \return \c true if the supplied CPID's bytes do not match. + //! \return \c true if the supplied CPID's bytes represent a lesser number. //! - bool operator>(const Cpid& other) const - { - return ToString() > other.ToString(); - } + bool operator>(const Cpid& other) const; //! //! \brief Determine whether the CPID contains only zeros. diff --git a/src/test/neuralnet/cpid_tests.cpp b/src/test/neuralnet/cpid_tests.cpp index 0dc7ca2d80..4bf37dcbf9 100644 --- a/src/test/neuralnet/cpid_tests.cpp +++ b/src/test/neuralnet/cpid_tests.cpp @@ -109,6 +109,58 @@ BOOST_AUTO_TEST_CASE(it_compares_another_cpid_for_equality) BOOST_CHECK(cpid1 != NN::Cpid()); } +BOOST_AUTO_TEST_CASE(it_compares_another_cpid_by_relative_greatness) +{ + NN::Cpid cpid1(std::vector { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + }); + + NN::Cpid cpid2(std::vector { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + }); + + BOOST_CHECK(cpid1 < cpid2); + BOOST_CHECK(cpid2 > cpid1); + + NN::Cpid cpid3(std::vector { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }); + + BOOST_CHECK(cpid1 < cpid3); + BOOST_CHECK(cpid3 > cpid1); + BOOST_CHECK(NN::Cpid() < cpid3); + BOOST_CHECK(cpid3 > NN::Cpid()); + + NN::Cpid cpid4(std::vector { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }); + + NN::Cpid cpid5(std::vector { + 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }); + + BOOST_CHECK(cpid4 < cpid5); + BOOST_CHECK(cpid5 > cpid4); + + NN::Cpid cpid6(std::vector { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, + }); + + BOOST_CHECK(cpid6 < cpid5); + BOOST_CHECK(cpid5 > cpid6); + + BOOST_CHECK((cpid1 < cpid1) == false); + BOOST_CHECK((cpid1 > cpid1) == false); + BOOST_CHECK((NN::Cpid() < NN::Cpid()) == false); + BOOST_CHECK((NN::Cpid() > NN::Cpid()) == false); +} + BOOST_AUTO_TEST_CASE(it_determines_whether_a_cpid_is_all_zeros) { NN::Cpid cpid; From ccafd4417716f178c0480857e1356d3f0c595699 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 28 Jun 2019 19:01:46 -0400 Subject: [PATCH 070/115] Add back in the in sync check in ScraperGetNeuralContract This is done with a atomic boolean that is updated by the scraper or neuralnet loops as a result of the call to the OutOfSyncByAge function. --- src/scraper/scraper.cpp | 19 +++++++++++++++---- src/scraper/scraper.h | 3 +++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index bbb89640ff..6e004b0d6c 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -735,6 +735,9 @@ void Scraper(bool bSingleShot) // beforehand. while (OutOfSyncByAge()) { + // Set atomic out of sync flag to true. + fOutOfSyncByAge = true; + // Signal stats event to UI. uiInterface.NotifyScraperEvent(scrapereventtypes::OutOfSync, CT_UPDATING, {}); @@ -742,6 +745,9 @@ void Scraper(bool bSingleShot) MilliSleep(8000); } + // Set atomic out of sync flag to false. + fOutOfSyncByAge = false; + nSyncTime = GetAdjustedTime(); // Now that we are in sync, refresh from the AppCache and check for proper directory/file structure. @@ -980,6 +986,9 @@ void NeuralNetwork() // We do NOT want to filter statistics with an out-of-date beacon list or project whitelist. while (OutOfSyncByAge()) { + // Set atomic out of sync flag to true. + fOutOfSyncByAge = true; + // Signal stats event to UI. uiInterface.NotifyScraperEvent(scrapereventtypes::OutOfSync, CT_NEW, {}); @@ -987,6 +996,9 @@ void NeuralNetwork() MilliSleep(8000); } + // Set atomic out of sync flag to false. + fOutOfSyncByAge = false; + nSyncTime = GetAdjustedTime(); // ScraperHousekeeping items are only run in this thread if not handled by the Scraper() thread. @@ -4293,11 +4305,10 @@ std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats) std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDirectFromStatsUpdate) { - // NOTE - out of sync check here is removed, because in all instances, it is being checked before this function is - // called. OutOfSyncByAge calls PreviousBlockAge(), which takes a lock on cs_main. This is likely a deadlock culprit. + // NOTE - OutOfSyncByAge calls PreviousBlockAge(), which takes a lock on cs_main. This is likely a deadlock culprit if called from here + // and the scraper or neuralnet loop nearly simultaneously. So we use an atomic flag updated by the scraper or neuralnet loop. // If not in sync then immediately bail with a empty string. - // if (OutOfSyncByAge()) - // return std::string(); + if (fOutOfSyncByAge) return std::string(); // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep / 1000 old (for seconds), then simply report back the cache contents. // This prevents the relatively heavyweight stats computations from running too often. The time here may not exactly align with diff --git a/src/scraper/scraper.h b/src/scraper/scraper.h index b6bfbaa84c..c7dfea0f4f 100644 --- a/src/scraper/scraper.h +++ b/src/scraper/scraper.h @@ -100,6 +100,9 @@ AppCacheSectionExt mScrapersExt = {}; // Lets try to start using some lockless synchronization. std::atomic nSyncTime {0}; +// Starting state is always out of sync. This atomic is to avoid multiple threads calling +// OutOfSyncByAge(), which takes a lock on cs_main and can cause deadlocks. +std::atomic fOutOfSyncByAge {true}; CCriticalSection cs_mScrapersExt; From 1c9ac32529830bd19e1248330fdc714b1f8c61b3 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 29 Jun 2019 16:48:31 -0400 Subject: [PATCH 071/115] Change type of AlignScraperFileManifestEntries to void --- src/scraper/scraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 6e004b0d6c..f6b643dfeb 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -105,7 +105,7 @@ bool LoadScraperFileManifest(const fs::path& file); bool InsertScraperFileManifestEntry(ScraperFileManifestEntry& entry); unsigned int DeleteScraperFileManifestEntry(ScraperFileManifestEntry& entry); bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry); -bool AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest); +void AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest); ScraperStats GetScraperStatsByConsensusBeaconList(); bool LoadProjectFileToStatsByCPID(const std::string& project, const fs::path& file, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); bool LoadProjectObjectToStatsByCPID(const std::string& project, const CSerializeData& ProjectData, const double& projectmag, const BeaconMap& mBeaconMap, ScraperStats& mScraperStats); @@ -2354,7 +2354,7 @@ bool MarkScraperFileManifestEntryNonCurrent(ScraperFileManifestEntry& entry) } -bool AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest) +void AlignScraperFileManifestEntries(const fs::path& file, const std::string& filetype, const std::string& sProject, const bool& excludefromcsmanifest) { ScraperFileManifestEntry NewRecord; From ae0b2fb53fc2c202ec7de3d91a99892f7b5a97b0 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 6 Jul 2019 17:59:23 -0400 Subject: [PATCH 072/115] Add forgotten v11 condition for removing old RR signals --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 78ad343c33..6efa938aec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1880,7 +1880,8 @@ int64_t GetProofOfStakeReward(uint64_t nCoinAge, int64_t nFees, std::string cpid } int64_t nTotalSubsidy = nSubsidy + nFees; - if (nBoinc > 1) + // This rule does not apply in v11 + if (nBoinc > 1 && pindexLast->nVersion <= 10) { std::string sTotalSubsidy = RoundToString(CoinToDouble(nTotalSubsidy)+.00000123,8); if (sTotalSubsidy.length() > 7) From 9443c0de018ee705de4960c970b5e0802281cf51 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 12 Jul 2019 13:07:22 -0500 Subject: [PATCH 073/115] Port VARINT encoding from Bitcoin --- src/Makefile.test.include | 1 + src/serialize.h | 140 ++++++++++++++++++++++++++++++++++- src/test/serialize_tests.cpp | 57 ++++++++++++++ src/util.h | 3 +- 4 files changed, 197 insertions(+), 4 deletions(-) create mode 100644 src/test/serialize_tests.cpp diff --git a/src/Makefile.test.include b/src/Makefile.test.include index d828eb44b7..9c824572cc 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -46,6 +46,7 @@ GRIDCOIN_TESTS =\ test/rpc_tests.cpp \ test/script_P2SH_tests.cpp \ test/script_tests.cpp \ + test/serialize_tests.cpp \ test/sigopcount_tests.cpp \ test/test_gridcoin.cpp \ test/transaction_tests.cpp \ diff --git a/src/serialize.h b/src/serialize.h index beb2703665..82409b736c 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -242,8 +242,139 @@ uint64_t ReadCompactSize(Stream& is) return nSizeRet; } +class CSizeComputer; + +/** + * Variable-length integers: bytes are a MSB base-128 encoding of the number. + * The high bit in each byte signifies whether another digit follows. To make + * sure the encoding is one-to-one, one is subtracted from all but the last digit. + * Thus, the byte sequence a[] with length len, where all but the last byte + * has bit 128 set, encodes the number: + * + * (a[len-1] & 0x7F) + sum(i=1..len-1, 128^i*((a[len-i-1] & 0x7F)+1)) + * + * Properties: + * * Very small (0-127: 1 byte, 128-16511: 2 bytes, 16512-2113663: 3 bytes) + * * Every integer has exactly one encoding + * * Encoding does not depend on size of original integer type + * * No redundancy: every (infinite) byte sequence corresponds to a list + * of encoded integers. + * + * 0: [0x00] 256: [0x81 0x00] + * 1: [0x01] 16383: [0xFE 0x7F] + * 127: [0x7F] 16384: [0xFF 0x00] + * 128: [0x80 0x00] 16511: [0xFF 0x7F] + * 255: [0x80 0x7F] 65535: [0x82 0xFE 0x7F] + * 2^32: [0x8E 0xFE 0xFE 0xFF 0x00] + */ + +/** + * Mode for encoding VarInts. + * + * Currently there is no support for signed encodings. The default mode will not + * compile with signed values, and the legacy "nonnegative signed" mode will + * accept signed values, but improperly encode and decode them if they are + * negative. In the future, the DEFAULT mode could be extended to support + * negative numbers in a backwards compatible way, and additional modes could be + * added to support different varint formats (e.g. zigzag encoding). + */ +enum class VarIntMode { DEFAULT, NONNEGATIVE_SIGNED }; + +template +struct CheckVarIntMode { + constexpr CheckVarIntMode() + { + static_assert(Mode != VarIntMode::DEFAULT || std::is_unsigned::value, "Unsigned type required with mode DEFAULT."); + static_assert(Mode != VarIntMode::NONNEGATIVE_SIGNED || std::is_signed::value, "Signed type required with mode NONNEGATIVE_SIGNED."); + } +}; + +template +inline unsigned int GetSizeOfVarInt(I n) +{ + CheckVarIntMode(); + int nRet = 0; + while(true) { + nRet++; + if (n <= 0x7F) + break; + n = (n >> 7) - 1; + } + return nRet; +} + +template +inline void WriteVarInt(CSizeComputer& os, I n); + +template +void WriteVarInt(Stream& os, I n) +{ + CheckVarIntMode(); + unsigned char tmp[(sizeof(n)*8+6)/7]; + int len=0; + while(true) { + tmp[len] = (n & 0x7F) | (len ? 0x80 : 0x00); + if (n <= 0x7F) + break; + n = (n >> 7) - 1; + len++; + } + do { + Serialize(os, tmp[len], SER_NETWORK, 1); + } while(len--); +} + +template +I ReadVarInt(Stream& is) +{ + CheckVarIntMode(); + I n = 0; + while(true) { + unsigned char chData; + Unserialize(is, chData, SER_NETWORK, 1); + if (n > (std::numeric_limits::max() >> 7)) { + throw std::ios_base::failure("ReadVarInt(): size too large"); + } + n = (n << 7) | (chData & 0x7F); + if (chData & 0x80) { + if (n == std::numeric_limits::max()) { + throw std::ios_base::failure("ReadVarInt(): size too large"); + } + n++; + } else { + return n; + } + } +} +template +class CVarInt +{ +protected: + I &n; +public: + explicit CVarInt(I& nIn) : n(nIn) { } + unsigned int GetSerializeSize(int nType = 0, int nVersion = 0) const + { + return GetSizeOfVarInt(n); + } + + template + void Serialize(Stream &s, int nType = 0, int nVersion = 0) const { + WriteVarInt(s, n); + } + + template + void Unserialize(Stream& s, int nType = 0, int nVersion = 0) { + n = ReadVarInt(s); + } +}; + +template +CVarInt WrapVarInt(I& n) { return CVarInt{n}; } + +#define VARINT(obj, ...) WrapVarInt<__VA_ARGS__>(REF(obj)) #define FLATDATA(obj) REF(CFlatData((char*)&(obj), (char*)&(obj) + sizeof(obj))) /** Wrapper for serializing arrays and POD. @@ -356,7 +487,7 @@ inline void Serialize(Stream& os, const T& a, long nType, int nVersion) } template -inline void Unserialize(Stream& is, T& a, long nType, int nVersion) +inline void Unserialize(Stream& is, T&& a, long nType, int nVersion) { a.Unserialize(is, (int)nType, nVersion); } @@ -724,7 +855,7 @@ inline unsigned int SerReadWrite(Stream& s, const T& obj, int nType, int nVersio } template -inline unsigned int SerReadWrite(Stream& s, T& obj, int nType, int nVersion, CSerActionUnserialize ser_action) +inline unsigned int SerReadWrite(Stream& s, T&& obj, int nType, int nVersion, CSerActionUnserialize ser_action) { ::Unserialize(s, obj, nType, nVersion); return 0; @@ -908,7 +1039,7 @@ class CReaderStream } template - CReaderStream& operator>>(T& obj) + CReaderStream& operator>>(T&& obj) { // Unserialize from this stream ::Unserialize(*this, obj, nType, nVersion); @@ -932,6 +1063,7 @@ class CDataStream typedef vector_type::allocator_type allocator_type; typedef vector_type::reference reference; typedef vector_type::iterator iterator; + typedef vector_type::const_iterator const_iterator; typedef vector_type::reverse_iterator reverse_iterator; explicit CDataStream(int nTypeIn, int nVersionIn) @@ -976,7 +1108,9 @@ class CDataStream // Vector subset // iterator begin() { return vch.begin() + nReadPos; } + const_iterator begin() const { return vch.begin() + nReadPos; } iterator end() { return vch.end(); } + const_iterator end() const { return vch.end(); } void resize(size_type n, value_type c=0) { vch.resize(n + nReadPos, c); } void reserve(size_type n) { vch.reserve(n + nReadPos); } const_reference operator[](size_type pos) const { return vch[pos + nReadPos]; } diff --git a/src/test/serialize_tests.cpp b/src/test/serialize_tests.cpp new file mode 100644 index 0000000000..a04e759c64 --- /dev/null +++ b/src/test/serialize_tests.cpp @@ -0,0 +1,57 @@ +#include "serialize.h" +#include "util.h" + +#include + +BOOST_AUTO_TEST_CASE(varints) +{ + // encode + + CDataStream ss(SER_DISK, 0); + CDataStream::size_type size = 0; + for (int i = 0; i < 100000; i++) { + ss << VARINT(i, VarIntMode::NONNEGATIVE_SIGNED); + size += ::GetSerializeSize(VARINT(i, VarIntMode::NONNEGATIVE_SIGNED), 0, 0); + BOOST_CHECK(size == ss.size()); + } + + for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { + ss << VARINT(i); + size += ::GetSerializeSize(VARINT(i), 0, 0); + BOOST_CHECK(size == ss.size()); + } + + // decode + for (int i = 0; i < 100000; i++) { + int j = -1; + ss >> VARINT(j, VarIntMode::NONNEGATIVE_SIGNED); + BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); + } + + for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { + uint64_t j = std::numeric_limits::max(); + ss >> VARINT(j); + BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); + } +} + +BOOST_AUTO_TEST_CASE(varints_bitpatterns) +{ + CDataStream ss(SER_DISK, 0); + ss << VARINT(0, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "00"); ss.clear(); + ss << VARINT(0x7f, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "7f"); ss.clear(); + ss << VARINT((int8_t)0x7f, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "7f"); ss.clear(); + ss << VARINT(0x80, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "8000"); ss.clear(); + ss << VARINT((uint8_t)0x80); BOOST_CHECK_EQUAL(HexStr(ss), "8000"); ss.clear(); + ss << VARINT(0x1234, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "a334"); ss.clear(); + ss << VARINT((int16_t)0x1234, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "a334"); ss.clear(); + ss << VARINT(0xffff, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "82fe7f"); ss.clear(); + ss << VARINT((uint16_t)0xffff); BOOST_CHECK_EQUAL(HexStr(ss), "82fe7f"); ss.clear(); + ss << VARINT(0x123456, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "c7e756"); ss.clear(); + ss << VARINT((int32_t)0x123456, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "c7e756"); ss.clear(); + ss << VARINT(0x80123456U); BOOST_CHECK_EQUAL(HexStr(ss), "86ffc7e756"); ss.clear(); + ss << VARINT((uint32_t)0x80123456U); BOOST_CHECK_EQUAL(HexStr(ss), "86ffc7e756"); ss.clear(); + ss << VARINT(0xffffffff); BOOST_CHECK_EQUAL(HexStr(ss), "8efefefe7f"); ss.clear(); + ss << VARINT(0x7fffffffffffffffLL, VarIntMode::NONNEGATIVE_SIGNED); BOOST_CHECK_EQUAL(HexStr(ss), "fefefefefefefefe7f"); ss.clear(); + ss << VARINT(0xffffffffffffffffULL); BOOST_CHECK_EQUAL(HexStr(ss), "80fefefefefefefefe7f"); ss.clear(); +} diff --git a/src/util.h b/src/util.h index 0c913aebac..54549c560a 100644 --- a/src/util.h +++ b/src/util.h @@ -349,7 +349,8 @@ std::string HexStr(const T itbegin, const T itend, bool fSpaces=false) return rv; } -inline std::string HexStr(const std::vector& vch, bool fSpaces=false) +template +inline std::string HexStr(const T& vch, bool fSpaces=false) { return HexStr(vch.begin(), vch.end(), fSpaces); } From 2186d6c5e113590a20bafc03f86d6affb4140b92 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 12 Jul 2019 17:55:49 -0500 Subject: [PATCH 074/115] Remove legacy Proof-of-Work functions --- src/main.cpp | 113 ++--------------------------------------- src/main.h | 4 +- src/miner.cpp | 2 +- src/test/DoS_tests.cpp | 52 ------------------- 4 files changed, 7 insertions(+), 164 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6f5f150657..ed8226e5a5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1679,20 +1679,6 @@ double CalculatedMagnitude2(std::string cpid, int64_t locktime,bool bUseLederstr return bUseLederstrumpf ? LederstrumpfMagnitude2(stDPOR.Magnitude,locktime) : stDPOR.Magnitude; } -int64_t GetProofOfWorkMaxReward(int64_t nFees, int64_t locktime, int64_t height) -{ - int64_t nSubsidy = (GetMaximumBoincSubsidy(locktime)+1) * COIN; - if (height==10) - { - //R.Halford: 10-11-2014: Gridcoin Foundation Block: - //Note: Gridcoin Classic emitted these coins. So we had to add them to block 10. The coins were burned then given back to the owners that mined them in classic (as research coins). - nSubsidy = nGenesisSupply * COIN; - } - - if (fTestNet) nSubsidy += 1000*COIN; - return nSubsidy + nFees; -} - //Survey Results: Start inflation rate: 9%, end=1%, 30 day steps, 9 steps, mag multiplier start: 2, mag end .3, 9 steps int64_t GetMaximumBoincSubsidy(int64_t nTime) { @@ -1900,44 +1886,6 @@ int64_t GetProofOfStakeReward(uint64_t nCoinAge, int64_t nFees, std::string cpid static const int64_t nTargetTimespan = 16 * 60; // 16 mins -// -// maximum nBits value could possible be required nTime after -// -unsigned int ComputeMaxBits(CBigNum bnTargetLimit, unsigned int nBase, int64_t nTime) -{ - CBigNum bnResult; - bnResult.SetCompact(nBase); - bnResult *= 2; - while (nTime > 0 && bnResult < bnTargetLimit) - { - // Maximum 200% adjustment per day... - bnResult *= 2; - nTime -= 24 * 60 * 60; - } - if (bnResult > bnTargetLimit) - bnResult = bnTargetLimit; - return bnResult.GetCompact(); -} - -// -// minimum amount of work that could possibly be required nTime after -// minimum proof-of-work required was nBase -// -unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime) -{ - return ComputeMaxBits(bnProofOfWorkLimit, nBase, nTime); -} - -// -// minimum amount of stake that could possibly be required nTime after -// minimum proof-of-stake required was nBase -// -unsigned int ComputeMinStake(unsigned int nBase, int64_t nTime, unsigned int nBlockTime) -{ - return ComputeMaxBits(bnProofOfStakeLimit, nBase, nTime); -} - - // ppcoin: find last block index up to pindex const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake) { @@ -1946,49 +1894,17 @@ const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfSta return pindex; } - -static unsigned int GetNextTargetRequiredV1(const CBlockIndex* pindexLast, bool fProofOfStake) +unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast) { - CBigNum bnTargetLimit = fProofOfStake ? bnProofOfStakeLimit : bnProofOfWorkLimit; + CBigNum bnTargetLimit = GetProofOfStakeLimit(pindexLast->nHeight); if (pindexLast == NULL) return bnTargetLimit.GetCompact(); // genesis block - const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, fProofOfStake); + const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, true); if (pindexPrev->pprev == NULL) return bnTargetLimit.GetCompact(); // first block - const CBlockIndex* pindexPrevPrev = GetLastBlockIndex(pindexPrev->pprev, fProofOfStake); - if (pindexPrevPrev->pprev == NULL) - return bnTargetLimit.GetCompact(); // second block - - int64_t nTargetSpacing = GetTargetSpacing(pindexLast->nHeight); - int64_t nActualSpacing = pindexPrev->GetBlockTime() - pindexPrevPrev->GetBlockTime(); - - // ppcoin: target change every block - // ppcoin: retarget with exponential moving toward target spacing - CBigNum bnNew; - bnNew.SetCompact(pindexPrev->nBits); - int64_t nInterval = nTargetTimespan / nTargetSpacing; - bnNew *= ((nInterval - 1) * nTargetSpacing + nActualSpacing + nActualSpacing); - bnNew /= ((nInterval + 1) * nTargetSpacing); - - if (bnNew > bnTargetLimit) - bnNew = bnTargetLimit; - - return bnNew.GetCompact(); -} - -static unsigned int GetNextTargetRequiredV2(const CBlockIndex* pindexLast, bool fProofOfStake) -{ - CBigNum bnTargetLimit = fProofOfStake ? GetProofOfStakeLimit(pindexLast->nHeight) : bnProofOfWorkLimit; - - if (pindexLast == NULL) - return bnTargetLimit.GetCompact(); // genesis block - - const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, fProofOfStake); - if (pindexPrev->pprev == NULL) - return bnTargetLimit.GetCompact(); // first block - const CBlockIndex* pindexPrevPrev = GetLastBlockIndex(pindexPrev->pprev, fProofOfStake); + const CBlockIndex* pindexPrevPrev = GetLastBlockIndex(pindexPrev->pprev, true); if (pindexPrevPrev->pprev == NULL) return bnTargetLimit.GetCompact(); // second block @@ -2030,15 +1946,6 @@ static unsigned int GetNextTargetRequiredV2(const CBlockIndex* pindexLast, bool return bnNew.GetCompact(); } -unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake) -{ - //After block 89600, new diff algorithm is used - if (pindexLast->nHeight < 89600) - return GetNextTargetRequiredV1(pindexLast, fProofOfStake); - else - return GetNextTargetRequiredV2(pindexLast, fProofOfStake); -} - bool CheckProofOfWork(uint256 hash, unsigned int nBits) { CBigNum bnTarget; @@ -2782,16 +2689,6 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck, boo mapQueuedChanges[hashTx] = CTxIndex(posThisTx, tx.vout.size()); } - if (IsProofOfWork() && pindex->nHeight > nGrandfather) - { - int64_t nReward = GetProofOfWorkMaxReward(nFees,nTime,pindex->nHeight); - // Check coinbase reward - if (vtx[0].GetValueOut() > nReward) - return DoS(50, error("ConnectBlock[] : coinbase reward exceeded (actual=%" PRId64 " vs calculated=%" PRId64 ")", - vtx[0].GetValueOut(), - nReward)); - } - MiningCPID bb = DeserializeBoincBlock(vtx[0].hashBoinc,nVersion); uint64_t nCoinAge = 0; double dStakeReward = CoinToDouble(nStakeReward); @@ -3905,7 +3802,7 @@ bool CBlock::AcceptBlock(bool generated_by_me) if (GetBlockTime() <= pindexPrev->GetPastTimeLimit() || FutureDrift(GetBlockTime(), nHeight) < pindexPrev->GetBlockTime()) return DoS(60, error("AcceptBlock() : block's timestamp is too early")); // Check proof-of-work or proof-of-stake - if (nBits != GetNextTargetRequired(pindexPrev, IsProofOfStake())) + if (nBits != GetNextTargetRequired(pindexPrev)) return DoS(100, error("AcceptBlock() : incorrect %s", IsProofOfWork() ? "proof-of-work" : "proof-of-stake")); } diff --git a/src/main.h b/src/main.h index 5d6ab63ac4..e31a66362f 100644 --- a/src/main.h +++ b/src/main.h @@ -258,7 +258,7 @@ bool CheckProofOfResearch( const CBlockIndex* pindexPrev, //previous block in chain index const CBlock &block); //block to check -unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake); +unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast); int64_t GetConstantBlockReward(const CBlockIndex* index); int64_t ComputeResearchAccrual(int64_t nTime, std::string cpid, std::string operation, CBlockIndex* pindexLast, bool bVerifyingBlock, int VerificationPhase, double& dAccrualAge, double& dMagnitudeUnit, double& AvgMagnitude); int64_t GetProofOfStakeReward(uint64_t nCoinAge, int64_t nFees, std::string cpid, @@ -288,8 +288,6 @@ double GetEstimatedTimetoStake(double dDiff = 0.0, double dConfidence = 0.8); void AddRARewardBlock(const CBlockIndex* pIndex); MiningCPID GetBoincBlockByIndex(CBlockIndex* pblockindex); -unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime); -unsigned int ComputeMinStake(unsigned int nBase, int64_t nTime, unsigned int nBlockTime); int GetNumBlocksOfPeers(); bool IsInitialBlockDownload(); std::string GetWarnings(std::string strFor); diff --git a/src/miner.cpp b/src/miner.cpp index 447bd0522c..305ba219db 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1228,7 +1228,7 @@ void StakeMiner(CWallet *pwallet) // * Create a bare block StakeBlock.nTime= GetAdjustedTime(); StakeBlock.nNonce= 0; - StakeBlock.nBits = GetNextTargetRequired(pindexPrev, true); + StakeBlock.nBits = GetNextTargetRequired(pindexPrev); StakeBlock.vtx.resize(2); //tx 0 is coin_base CTransaction &StakeTX= StakeBlock.vtx[1]; //tx 1 is coin_stake diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp index 87bafe947c..3b3a2d60ad 100755 --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -3,10 +3,8 @@ // #include -#include // for 'map_list_of()' #include #include -#include #include "main.h" #include "wallet.h" @@ -82,56 +80,6 @@ BOOST_AUTO_TEST_CASE(DoS_bantime) BOOST_CHECK(!CNode::IsBanned(addr)); } -static bool CheckNBits(unsigned int nbits1, int64_t time1, unsigned int nbits2, int64_t time2)\ -{ - if (time1 > time2) - return CheckNBits(nbits2, time2, nbits1, time1); - int64_t deltaTime = time2-time1; - - CBigNum required; - required.SetCompact(ComputeMinWork(nbits1, deltaTime)); - CBigNum have; - have.SetCompact(nbits2); - return (have <= required); -} - -BOOST_AUTO_TEST_CASE(DoS_checknbits) -{ - using namespace boost::assign; // for 'map_list_of()' - - // Timestamps,nBits from the bitcoin blockchain. - // These are the block-chain checkpoint blocks - typedef std::map BlockData; - BlockData chainData = - map_list_of(1239852051,486604799)(1262749024,486594666) - (1279305360,469854461)(1280200847,469830746)(1281678674,469809688) - (1296207707,453179945)(1302624061,453036989)(1309640330,437004818) - (1313172719,436789733); - - // Make sure CheckNBits considers every combination of block-chain-lock-in-points - // "sane": - BOOST_FOREACH(const BlockData::value_type& i, chainData) - { - BOOST_FOREACH(const BlockData::value_type& j, chainData) - { - BOOST_CHECK(CheckNBits(i.second, i.first, j.second, j.first)); - } - } - - // Test a couple of insane combinations: - BlockData::value_type firstcheck = *(chainData.begin()); - BlockData::value_type lastcheck = *(chainData.rbegin()); - - // First checkpoint difficulty at or a while after the last checkpoint time should fail when - // compared to last checkpoint - BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*10, lastcheck.second, lastcheck.first)); - BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*60*24*14, lastcheck.second, lastcheck.first)); - - // ... but OK if enough time passed for difficulty to adjust downward: - BOOST_CHECK(CheckNBits(firstcheck.second, lastcheck.first+60*60*24*365*4, lastcheck.second, lastcheck.first)); - -} - CTransaction RandomOrphan() { auto it = mapOrphanTransactions.lower_bound(GetRandHash()); From c0661f217e1f3a0480e9ed490f2d5afc52e2d833 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Wed, 3 Jul 2019 21:07:58 -0500 Subject: [PATCH 075/115] Remove unused filecopy() and fileopen_and_copy() functions --- src/rpcblockchain.cpp | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 682297fad3..569fab3e2c 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -434,31 +434,6 @@ UniValue getblockbynumber(const UniValue& params, bool fHelp) return blockToJSON(block, pblockindex, params.size() > 1 ? params[1].get_bool() : false); } -void filecopy(FILE *dest, FILE *src) -{ - const int size = 16384; - char buffer[size]; - - while (!feof(src)) - { - int n = fread(buffer, 1, size, src); - fwrite(buffer, 1, n, dest); - } - - fflush(dest); -} - -void fileopen_and_copy(std::string src, std::string dest) -{ - FILE * infile = fopen(src.c_str(), "rb"); - FILE * outfile = fopen(dest.c_str(), "wb"); - - filecopy(outfile, infile); - - fclose(infile); - fclose(outfile); -} - std::string ExtractValue(std::string data, std::string delimiter, int pos) { std::vector vKeys = split(data.c_str(),delimiter); From 059cbe1548d11e7d1b2552b27f635d059b71b603 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Wed, 3 Jul 2019 21:38:30 -0500 Subject: [PATCH 076/115] Remove unused ServicesIncludesNN() function --- src/main.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ed8226e5a5..19794cca72 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3929,11 +3929,6 @@ bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, uns return (nFound >= nRequired); } -bool ServicesIncludesNN(CNode* pNode) -{ - return (Contains(pNode->strSubVer,"1999")) ? true : false; -} - bool VerifySuperblock(const std::string& superblock, const CBlockIndex* parent) { // Pre-condition checks. From 5a0248c628e67599850c316dc082126f346fd5dc Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Wed, 3 Jul 2019 21:40:32 -0500 Subject: [PATCH 077/115] Remove unused IsSuperMajority() function --- src/main.cpp | 12 ------------ src/main.h | 8 -------- 2 files changed, 20 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 19794cca72..b7c038e422 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3917,18 +3917,6 @@ uint256 CBlockIndex::GetBlockTrust() const return chaintrust; } -bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired, unsigned int nToCheck) -{ - unsigned int nFound = 0; - for (unsigned int i = 0; i < nToCheck && nFound < nRequired && pstart != NULL; i++) - { - if (pstart->nVersion >= minVersion) - ++nFound; - pstart = pstart->pprev; - } - return (nFound >= nRequired); -} - bool VerifySuperblock(const std::string& superblock, const CBlockIndex* parent) { // Pre-condition checks. diff --git a/src/main.h b/src/main.h index e31a66362f..5c7147611d 100644 --- a/src/main.h +++ b/src/main.h @@ -1457,14 +1457,6 @@ class CBlockIndex return pbegin[(pend - pbegin)/2]; } - /** - * Returns true if there are nRequired or more blocks of minVersion or above - * in the last nToCheck blocks, starting at pstart and going backwards. - */ - static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, - unsigned int nRequired, unsigned int nToCheck); - - bool IsProofOfWork() const { return !(nFlags & BLOCK_PROOF_OF_STAKE); From 3e55189b621bc8cabf59209c7c0a269c0b4ad41a Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 12 Jul 2019 18:24:10 -0500 Subject: [PATCH 078/115] Remove unused CoinFromValue() function --- src/wallet.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/wallet.cpp b/src/wallet.cpp index 8ed55333e3..ccb2517370 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -33,17 +33,6 @@ int64_t GetMaximumBoincSubsidy(int64_t nTime); bool fConfChange; unsigned int nDerivationMethodIndex; -namespace -{ - int64_t CoinFromValue(double dAmount) - { - if (dAmount <= 0.0 || dAmount > MAX_MONEY) throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount"); - int64_t nAmount = roundint64(dAmount * COIN); - if (!MoneyRange(nAmount)) throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount"); - return nAmount; - } -} - ////////////////////////////////////////////////////////////////////////////// // // mapWallet From 25f83b63342e82fc3bece6fdb8b350813900cd27 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 12 Jul 2019 23:25:40 -0500 Subject: [PATCH 079/115] Remove unused GetNeuralNetworkReport() function --- src/main.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b7c038e422..2e0ea6f597 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -78,7 +78,6 @@ extern double GetOutstandingAmountOwed(StructCPID &mag, std::string cpid, int64_ extern double GetOwedAmount(std::string cpid); bool TallyMagnitudesInSuperblock(); -extern std::string GetNeuralNetworkReport(); std::string GetCommandNonce(std::string command); extern double GRCMagnitudeUnit(int64_t locktime); @@ -7155,24 +7154,6 @@ std::string GetCurrentNeuralNetworkSupermajorityHash(double& out_popularity) return neural_hash; } -std::string GetNeuralNetworkReport() -{ - //Returns a report of the networks neural hashes in order of popularity - std::string neural_hash = ""; - std::string report = "Neural_hash, Popularity\n"; - std::string row = ""; - - // Copy to a sorted map. - std::map sorted_hashes( - mvNeuralNetworkHash.begin(), - mvNeuralNetworkHash.end()); - - for(auto& entry : sorted_hashes) - report += entry.first + "," + RoundToString(entry.second, 0) + "\n"; - - return report; -} - bool MemorizeMessage(const CTransaction &tx, double dAmount, std::string sRecipient) { const std::string &msg = tx.hashBoinc; From 1fcbf7b9e5a675ed311133349e9cb4b705ce357b Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 13 Jul 2019 00:09:35 -0500 Subject: [PATCH 080/115] Remove unused GetTotalOwedAmount() function --- src/main.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 2e0ea6f597..16331720ad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4685,12 +4685,6 @@ bool IsCPIDValidv2(MiningCPID& mc, int height) return result; } -double GetTotalOwedAmount(std::string cpid) -{ - StructCPID& o = GetInitializedStructCPID2(cpid,mvMagnitudes); - return o.totalowed; -} - double GetOwedAmount(std::string cpid) { if (mvMagnitudes.size() > 1) From 47335b9aca144531914ccdf8a597a8f867aaaeaf Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 13 Jul 2019 00:27:11 -0500 Subject: [PATCH 081/115] Remove unused KeyEnabled() function --- src/main.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 16331720ad..bca4a35f98 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2252,17 +2252,6 @@ bool LessVerbose(int iMax1000) return false; } - -bool KeyEnabled(std::string key) -{ - if (mapArgs.count("-" + key)) - { - std::string sBool = GetArg("-" + key, "false"); - if (sBool == "true") return true; - } - return false; -} - unsigned int CTransaction::GetP2SHSigOpCount(const MapPrevTx& inputs) const { if (IsCoinBase()) From ae1f813835c1d6eb7338ed6a0379f6e6a7c109a4 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sat, 13 Jul 2019 00:31:36 -0500 Subject: [PATCH 082/115] Remove unused CBlock::UpdateTime() method --- src/main.cpp | 8 -------- src/main.h | 2 -- 2 files changed, 10 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index bca4a35f98..7a94591ceb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2077,14 +2077,6 @@ void static InvalidChainFound(CBlockIndex* pindexNew) DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime())); } - -void CBlock::UpdateTime(const CBlockIndex* pindexPrev) -{ - nTime = max(GetBlockTime(), GetAdjustedTime()); -} - - - bool CTransaction::DisconnectInputs(CTxDB& txdb) { // Relinquish previous transactions' spent pointers diff --git a/src/main.h b/src/main.h index 5c7147611d..8bfdec58c3 100644 --- a/src/main.h +++ b/src/main.h @@ -1110,8 +1110,6 @@ class CBlock return (int64_t)nTime; } - void UpdateTime(const CBlockIndex* pindexPrev); - // entropy bit for stake modifier if chosen by modifier unsigned int GetStakeEntropyBit() const { From 450bf1690badcf81f57bb67f3db4652f8aeca6de Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Thu, 4 Jul 2019 17:38:43 -0500 Subject: [PATCH 083/115] Flesh out Superblock draft into full class --- src/neuralnet/cpid.cpp | 6 + src/neuralnet/cpid.h | 6 + src/neuralnet/superblock.cpp | 669 +++++++++++++++++++++++++++++++---- src/neuralnet/superblock.h | 613 +++++++++++++++++++++++++++++--- src/scraper/scraper.cpp | 60 +--- 5 files changed, 1191 insertions(+), 163 deletions(-) diff --git a/src/neuralnet/cpid.cpp b/src/neuralnet/cpid.cpp index 30e22ca703..141cb2ae70 100644 --- a/src/neuralnet/cpid.cpp +++ b/src/neuralnet/cpid.cpp @@ -84,11 +84,17 @@ bool Cpid::operator!=(const Cpid& other) const bool Cpid::operator<(const Cpid& other) const { + // CONSENSUS: Changing the behavior of this comparison operator will affect + // the sort order of protocol-sensitive maps (for example, superblocks). + // return m_bytes < other.m_bytes; } bool Cpid::operator>(const Cpid& other) const { + // CONSENSUS: Changing the behavior of this comparison operator will affect + // the sort order of protocol-sensitive maps (for example, superblocks). + // return m_bytes > other.m_bytes; } diff --git a/src/neuralnet/cpid.h b/src/neuralnet/cpid.h index 3826b7ee6c..28ddb993f8 100644 --- a/src/neuralnet/cpid.h +++ b/src/neuralnet/cpid.h @@ -82,6 +82,9 @@ class Cpid //! The comparison checks from left to right with the most significant byte //! on the left (byte order equivalent to the hex string representation). //! + //! CONSENSUS: Changing the behavior of this comparison operator will affect + //! the sort order of protocol-sensitive maps (for example, superblocks). + //! //! \param other A CPID value to check whether current is less than. //! //! \return \c true if the supplied CPID's bytes represent a greater number. @@ -94,6 +97,9 @@ class Cpid //! The comparison checks from left to right with the most significant byte //! on the left (byte order equivalent to the hex string representation). //! + //! CONSENSUS: Changing the behavior of this comparison operator will affect + //! the sort order of protocol-sensitive maps (for example, superblocks). + //! //! \param other A CPID value to check whether current is greater than. //! //! \return \c true if the supplied CPID's bytes represent a lesser number. diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index 2ed939eb2c..1f9e571708 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -1,28 +1,230 @@ +#include "compat/endian.h" #include "neuralnet/superblock.h" -#include "uint256.h" #include "util.h" -#include "main.h" -#include "compat/endian.h" + +#include +#include using namespace NN; +std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); std::string ExtractValue(std::string data, std::string delimiter, int pos); -namespace +namespace { +//! +//! \brief Parses and unpacks superblock data from legacy superblock contracts. +//! +//! Legacy superblock string contracts contain the following XML-like elements +//! with records delimited by semicolons and fields delimited by commas: +//! +//! EXTERNAL_CPID,MAGNITUDE;... +//! PROJECT_NAME,AVERAGE_RAC,RAC;... +//! CURRENCY_CODE,PRICE;... +//! +//! The application no longer supports the vestigial price quotes so these are +//! not parsed by this class. +//! +//! Newer, binary-packed legacy contracts replace ... +//! elements with these sections to conserve space: +//! +//! COUNT +//! PACKED_DATA... +//! +//! ...where PACKED_DATA are the binary representations of alternating 16-byte +//! external CPID values and 2-byte (16-bit) magnitudes. The COUNT placeholder +//! tallies the number of zero-magnitude CPIDs omitted from the contract. +//! +class LegacySuperblockParser { - struct BinaryResearcher +public: + std::string m_magnitudes; //!< Mapping of CPIDs to magnitudes. + std::string m_binary_magnitudes; //!< Packed mapping of CPIDs to magnitudes. + std::string m_averages; //!< Project RACs and average RACs. + int32_t m_zero_mags; //!< Count of CPIDs with zero magnitude. + + //! + //! \brief Initialize a parser from a legacy superblock contract. + //! + //! \param packed Legacy superblock contract to extract data from. The CPID + //! magnitude records may exist as text or in a packed binary format. + //! + LegacySuperblockParser(const std::string& packed) + : m_magnitudes(ExtractXML(packed, "", "")) + , m_binary_magnitudes(ExtractXML(packed, "", "")) + , m_averages(ExtractXML(packed, "", "")) + , m_zero_mags(0) + { + try { + m_zero_mags = std::stoi(ExtractXML(packed, "", "")); + } catch (...) { + LogPrintf("LegacySuperblock: Failed to parse zero mag CPIDs"); + } + } + + //! + //! \brief Parse project recent average credit and average RAC from the + //! legacy superblock data. + //! + //! \return Superblock project statistics to set on a superblock instance. + //! + Superblock::ProjectIndex ExtractProjects() const { - std::array cpid; - int16_t magnitude; - }; - - // Ensure that the compiler does not add padding between the cpid and the - // magnitude. If it does it does it to align the data, at which point the - // pointer cast in UnpackBinarySuperblock will be illegal. In such a - // case we will have to resort to a slower unpack. - static_assert(offsetof(struct BinaryResearcher, magnitude) == - sizeof(struct BinaryResearcher) - sizeof(int16_t), - "Unexpected padding in BinaryResearcher"); + Superblock::ProjectIndex projects; + size_t start = 0; + size_t end = m_averages.find(";"); + + while (end != std::string::npos) { + std::string project_record = m_averages.substr(start, end - start); + std::vector parts = split(project_record, ","); + + start = end + 1; + end = m_averages.find(";", start); + + if (parts.size() < 2 + || parts[0].empty() + || parts[0] == "NeuralNetwork") // Ignore network stats + { + continue; + } + + try { + projects.Add(std::move(parts[0]), Superblock::ProjectStats( + std::stoi(parts[1]), // average RAC + parts.size() > 2 ? std::stoi(parts[2]) : 0)); // RAC + + } catch (...) { + LogPrintf("ExtractProjects(): Failed to parse project RAC."); + } + } + + return projects; + } + + //! + //! \brief Parse CPID magnitudes from the legacy superblock data. + //! + //! \return Superblock CPID map to set on a superblock instance. + //! + Superblock::CpidIndex ExtractMagnitudes() const + { + if (!m_binary_magnitudes.empty()) { + return ExtractBinaryMagnitudes(); + } + + return ExtractTextMagnitudes(); + } + +private: + //! + //! \brief Unpack CPID magnitudes stored in binary format. + //! + //! \return Superblock CPID map to set on a superblock instance. + //! + Superblock::CpidIndex ExtractBinaryMagnitudes() const + { + Superblock::CpidIndex magnitudes(m_zero_mags); + + const char* const byte_ptr = m_binary_magnitudes.data(); + const size_t binary_size = m_binary_magnitudes.size(); + + for (size_t x = 0; x < binary_size && binary_size - x >= 18; x += 18) { + magnitudes.Add( + *reinterpret_cast(byte_ptr + x), + be16toh(*reinterpret_cast(byte_ptr + x + 16))); + } + + return magnitudes; + } + + //! + //! \brief Parse CPID magnitudes stored as text. + //! + //! \return Superblock CPID map to set on a superblock instance. + //! + Superblock::CpidIndex ExtractTextMagnitudes() const + { + Superblock::CpidIndex magnitudes(m_zero_mags); + + size_t start = 0; + size_t end = m_magnitudes.find(";"); + + while (end != std::string::npos) { + std::string cpid_record = m_magnitudes.substr(start, end - start); + std::vector parts = split(cpid_record, ","); + + start = end + 1; + end = m_magnitudes.find(";", start); + + if (parts.size() != 2 || parts[0].empty()) { + continue; + } + + try { + magnitudes.Add(MiningId::Parse(parts[0]), std::stoi(parts[1])); + } catch(...) { + LogPrintf("ExtractTextMagnitude(): Failed to parse magnitude."); + } + } + + return magnitudes; + } +}; // LegacySuperblockParser + +//! +//! \brief Gets the string representation of a quorum hash object. +//! +struct QuorumHashToStringVisitor : boost::static_visitor +{ + //! + //! \brief Get the string representation of an invalid or empty quorum hash. + //! + //! \param invalid The object to create a string for. + //! + //! \return An empty string. + //! + std::string operator()(const QuorumHash::Invalid invalid) const + { + return std::string(); + } + + //! + //! \brief Get the string representation of a SHA256 quorum hash. + //! + //! \param hash The object to create a string for. + //! + //! \return 64-character hex-encoded representation of bytes in the hash. + //! + std::string operator()(const uint256& hash) const + { + return hash.ToString(); + } + + //! + //! \brief Get the string representation of a legacy MD5 quorum hash. + //! + //! \param legacy_hash The object to create a string for. + //! + //! \return 32-character hex-encoded representation of bytes in the hash. + //! + std::string operator()(const QuorumHash::Md5Sum& legacy_hash) const + { + return HexStr(legacy_hash.begin(), legacy_hash.end()); + } +}; + +struct BinaryResearcher +{ + std::array cpid; + int16_t magnitude; +}; + +// Ensure that the compiler does not add padding between the cpid and the +// magnitude. If it does it does it to align the data, at which point the +// pointer cast in UnpackBinarySuperblock will be illegal. In such a +// case we will have to resort to a slower unpack. +static_assert(offsetof(struct BinaryResearcher, magnitude) == + sizeof(struct BinaryResearcher) - sizeof(int16_t), + "Unexpected padding in BinaryResearcher"); } // anonymous namespace // ----------------------------------------------------------------------------- @@ -109,74 +311,228 @@ std::string PackBinarySuperblock(std::string sBlock) // Class: Superblock // ----------------------------------------------------------------------------- -void Superblock::LoadStats(const ScraperStats& stats) +Superblock::Superblock() + : m_version(Superblock::CURRENT_VERSION) + , m_height(0) + , m_timestamp(0) +{ +} + +Superblock::Superblock(uint32_t version) + : m_version(version) + , m_height(0) + , m_timestamp(0) +{ +} + +Superblock Superblock::FromStats(const ScraperStats& stats) { - // TODO: this routine depends entirely on the order of items in the scraper - // stats map. Need to verify that it isn't too fragile... - for (const auto& entry: stats) { + // The loop below depends on the relative value of these enum types: + static_assert(statsobjecttype::NetworkWide < statsobjecttype::byCPID); + static_assert(statsobjecttype::byCPID < statsobjecttype::byCPIDbyProject); + static_assert(statsobjecttype::byProject < statsobjecttype::byCPIDbyProject); + + Superblock superblock; + + for (const auto& entry : stats) { + // A CPID, project name, or project name/CPID pair that identifies the + // current statistics record: + const std::string& object_id = entry.first.objectID; + switch (entry.first.objecttype) { + case statsobjecttype::NetworkWide: + // This map starts with a single, network-wide statistics entry. + // Skip it because superblock objects will recalculate the stats + // as needed after deserialization. + // + continue; + case statsobjecttype::byCPID: - { - uint16_t mag = std::round(entry.second.statsvalue.dMag); - - if (mag > 0) { - m_cpids.emplace(NN::Cpid::Parse(entry.first.objectID), mag); - } else { - m_network.m_zero_mag_cpid_count++; - } - } + superblock.m_cpids.Add( + Cpid::Parse(object_id), + std::nearbyint(entry.second.statsvalue.dMag)); + break; case statsobjecttype::byProject: - m_projects.emplace(entry.first.objectID, ProjectStats( - std::round(entry.second.statsvalue.dAvgRAC), - std::round(entry.second.statsvalue.dRAC))); + superblock.m_projects.Add(object_id, ProjectStats( + std::nearbyint(entry.second.statsvalue.dAvgRAC), + std::nearbyint(entry.second.statsvalue.dRAC))); break; - case statsobjecttype::byCPIDbyProject: - { - std::vector vObjectID = split(entry.first.objectID, ","); - Cpid cpid = NN::Cpid::Parse(vObjectID[1]); - - m_projects[vObjectID[0]].m_cpids.emplace( - std::distance(m_cpids.begin(), m_cpids.find(cpid)), - CpidStats( - std::round(entry.second.statsvalue.dTC), - std::round(entry.second.statsvalue.dRAC), - std::round(entry.second.statsvalue.dMag))); - } - break; + default: + // The scraper statistics map orders the entries by "objecttype" + // starting with "byCPID" and "byProject". After importing these + // sections into the superblock, we can exit this loop. + // + return superblock; + } + } - case statsobjecttype::NetworkWide: - m_network.m_average_rac = entry.second.statsvalue.dAvgRAC; - m_network.m_rac = entry.second.statsvalue.dRAC; - m_network.m_magnitude = std::round(entry.second.statsvalue.dMag); + return superblock; +} - break; - } +Superblock Superblock::UnpackLegacy(const std::string& packed) +{ + // Legacy-packed superblocks always initialize to version 1: + Superblock superblock(1); + LegacySuperblockParser legacy(packed); + + superblock.m_cpids = legacy.ExtractMagnitudes(); + superblock.m_projects = legacy.ExtractProjects(); + + return superblock; +} + +std::string Superblock::PackLegacy() const +{ + std::stringstream out; + + out << "" << m_cpids.Zeros() << "" + << ""; + + for (const auto& cpid_pair : m_cpids) { + uint16_t mag = htobe16( + // Allowed magnitude range is 0 to 65535: + std::max(0, std::min(cpid_pair.second, 65535))); + + out.write(reinterpret_cast(cpid_pair.first.Raw().data()), 16); + out.write(reinterpret_cast(&mag), sizeof(uint16_t)); + } + + out << "" + << ""; + + for (const auto& project_pair : m_projects) { + out << project_pair.first << "," + << project_pair.second.m_average_rac << "," + << project_pair.second.m_rac << ";"; } + + out << "" + << ""; + + return out.str(); +} + +int64_t Superblock::Age() const +{ + return GetAdjustedTime() - m_timestamp; } // ----------------------------------------------------------------------------- -// Class: Superblock::CpidStats +// Class: Superblock::CpidIndex // ----------------------------------------------------------------------------- -Superblock::CpidStats::CpidStats() - : m_total_credit(0) - , m_rac(0) - , m_magnitude(0) +Superblock::CpidIndex::CpidIndex() + : m_zero_magnitude_count(0) + , m_total_magnitude(0) + , m_legacy(false) +{ +} + +Superblock::CpidIndex::CpidIndex(uint32_t zero_magnitude_count) + : m_zero_magnitude_count(zero_magnitude_count) + , m_total_magnitude(0) + , m_legacy(true) +{ +} + +Superblock::CpidIndex::const_iterator Superblock::CpidIndex::begin() const +{ + return m_magnitudes.begin(); +} + +Superblock::CpidIndex::const_iterator Superblock::CpidIndex::end() const +{ + return m_magnitudes.end(); +} + +Superblock::CpidIndex::size_type Superblock::CpidIndex::size() const +{ + return m_magnitudes.size(); +} + +bool Superblock::CpidIndex::empty() const +{ + return m_magnitudes.empty(); +} + +uint32_t Superblock::CpidIndex::Zeros() const +{ + return m_zero_magnitude_count; +} + +size_t Superblock::CpidIndex::TotalCount() const +{ + return m_magnitudes.size() + m_zero_magnitude_count; +} + +uint64_t Superblock::CpidIndex::TotalMagnitude() const +{ + return m_total_magnitude; +} + +double Superblock::CpidIndex::AverageMagnitude() const { + if (m_magnitudes.empty()) { + return 0; + } + + return static_cast(m_total_magnitude) / m_magnitudes.size(); } -Superblock::CpidStats::CpidStats( - uint64_t total_credit, - uint64_t rac, - uint16_t magnitude) - : m_total_credit(total_credit) - , m_rac(rac) - , m_magnitude(magnitude) +uint16_t Superblock::CpidIndex::MagnitudeOf(const Cpid& cpid) const { + const auto iter = m_magnitudes.find(cpid); + + if (iter == m_magnitudes.end()) { + return 0; + } + + return iter->second; +} + +size_t Superblock::CpidIndex::OffsetOf(const Cpid& cpid) const +{ + const auto iter = m_magnitudes.find(cpid); + + if (iter == m_magnitudes.end()) { + return m_magnitudes.size(); + } + + // Not very efficient--we can optimize this if needed: + return std::distance(m_magnitudes.begin(), iter); +} + +Superblock::CpidIndex::const_iterator +Superblock::CpidIndex::At(const size_t offset) const +{ + // Not very efficient--we can optimize this if needed: + return std::next(m_magnitudes.begin(), offset); +} + +void Superblock::CpidIndex::Add(const Cpid cpid, const uint16_t magnitude) +{ + if (magnitude > 0 || m_legacy) { + // Only increment the total magnitude if the CPID does not already + // exist in the index: + if (m_magnitudes.emplace(cpid, magnitude).second == true) { + m_total_magnitude += magnitude; + } + } else { + m_zero_magnitude_count++; + } +} + +void Superblock::CpidIndex::Add(const MiningId id, const uint16_t magnitude) +{ + if (const CpidOption cpid = id.TryCpid()) { + Add(*cpid, magnitude); + } else if (!m_legacy) { + m_zero_magnitude_count++; + } } // ----------------------------------------------------------------------------- @@ -191,3 +547,190 @@ Superblock::ProjectStats::ProjectStats(uint64_t average_rac, uint64_t rac) : m_average_rac(average_rac), m_rac(rac) { } + +// ----------------------------------------------------------------------------- +// Class: Superblock::ProjectIndex +// ----------------------------------------------------------------------------- + +Superblock::ProjectIndex::ProjectIndex() : m_total_rac(0) +{ +} + +Superblock::ProjectIndex::const_iterator Superblock::ProjectIndex::begin() const +{ + return m_projects.begin(); +} + +Superblock::ProjectIndex::const_iterator Superblock::ProjectIndex::end() const +{ + return m_projects.end(); +} + +Superblock::ProjectIndex::size_type Superblock::ProjectIndex::size() const +{ + return m_projects.size(); +} + +bool Superblock::ProjectIndex::empty() const +{ + return m_projects.empty(); +} + +uint64_t Superblock::ProjectIndex::TotalRac() const +{ + return m_total_rac; +} + +double Superblock::ProjectIndex::AverageRac() const +{ + if (m_projects.empty()) { + return 0; + } + + return static_cast(m_total_rac) / m_projects.size(); +} + +Superblock::ProjectStatsOption +Superblock::ProjectIndex::Try(const std::string& name) const +{ + const auto iter = m_projects.find(name); + + if (iter == m_projects.end()) { + return boost::none; + } + + return iter->second; +} + +void Superblock::ProjectIndex::Add(std::string name, const ProjectStats& stats) +{ + if (name.empty()) { + return; + } + + // Only increment the total RAC if the project does not already exist in + // the index: + if (m_projects.emplace(std::move(name), stats).second == true) { + m_total_rac += stats.m_rac; + } +} + +// ----------------------------------------------------------------------------- +// Class: QuorumHash +// ----------------------------------------------------------------------------- + +QuorumHash::QuorumHash() : m_hash(Invalid()) +{ +} + +QuorumHash::QuorumHash(uint256 hash) : m_hash(hash) +{ +} + +QuorumHash::QuorumHash(Md5Sum legacy_hash) : m_hash(legacy_hash) +{ +} + +QuorumHash QuorumHash::Hash(const Superblock& superblock) +{ + if (superblock.m_version > 1) { + return QuorumHash(SerializeHash(superblock)); + } + + std::string input; + input.reserve(superblock.m_cpids.size() * (32 + 1 + 5 + 5)); + + for (const auto& cpid_pair : superblock.m_cpids) { + double dMagLength = RoundToString(cpid_pair.second, 0).length(); + double dExponent = pow(dMagLength, 5); + + input += cpid_pair.first.ToString(); + input += RoundToString(cpid_pair.second / (dExponent + .01), 0); + input += RoundToString(dMagLength * dExponent, 0); + input += ""; + } + + Md5Sum output; + MD5((const unsigned char*)input.data(), input.size(), output.data()); + + return QuorumHash(output); +} + +bool QuorumHash::operator==(const QuorumHash& other) const +{ + if (m_hash.which() != other.m_hash.which()) { + return false; + } + + switch (Which()) { + case Kind::INVALID: + return true; + + case Kind::SHA256: + return boost::get(m_hash) + == boost::get(other.m_hash); + + case Kind::MD5: + return boost::get(m_hash) + == boost::get(other.m_hash); + } + + return false; +} + +bool QuorumHash::operator!=(const QuorumHash& other) const +{ + return !(*this == other); +} + +bool QuorumHash::operator==(const uint256& other) const +{ + return Which() == Kind::SHA256 + && boost::get(m_hash) == other; +} + +bool QuorumHash::operator!=(const uint256& other) const +{ + return !(*this == other); +} + +bool QuorumHash::operator==(const std::string& other) const +{ + switch (Which()) { + case Kind::INVALID: + return other.empty(); + + case Kind::SHA256: + return other.size() == 64 + && boost::get(m_hash) == uint256(other); + + case Kind::MD5: + return other.size() == 32 + && std::equal( + boost::get(m_hash).begin(), + boost::get(m_hash).end(), + ParseHex(other).begin()); + } + + return false; +} + +bool QuorumHash::operator!=(const std::string&other) const +{ + return !(*this == other); +} + +QuorumHash::Kind QuorumHash::Which() const +{ + return static_cast(m_hash.which()); +} + +bool QuorumHash::Valid() const +{ + return Which() != Kind::INVALID; +} + +std::string QuorumHash::ToString() const +{ + return boost::apply_visitor(QuorumHashToStringVisitor(), m_hash); +} diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index a17fb2288f..78745109d3 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -1,9 +1,13 @@ #pragma once +#include "neuralnet/cpid.h" +#include "serialize.h" #include "scraper/fwd.h" +#include "uint256.h" + +#include +#include #include -#include "key.h" -#include "neuralnet/cpid.h" std::string UnpackBinarySuperblock(std::string block); std::string PackBinarySuperblock(std::string sBlock); @@ -145,74 +149,440 @@ struct Compact } }; +class QuorumHash; // Forward for Superblock + +//! +//! \brief A snapshot of BOINC statistics used to calculate and verify research +//! rewards. +//! +//! About once per day, the Gridcoin network produces a superblock that contains +//! the magnitudes of active CPIDs. The superblocks embed into the block chain a +//! subset of data contained in the converged statistics emitted via the scraper +//! nodes. Regular nodes then use the statistics to calculate and verify rewards +//! claimed for BOINC computing work in generated blocks following a superblock. +//! class Superblock { public: - struct CpidStats + //! + //! \brief Version number of the current format for a serialized superblock. + //! + //! CONSENSUS: Increment this value when introducing a breaking change and + //! ensure that the serialization/deserialization routines also handle all + //! of the previous versions. + //! + static constexpr uint32_t CURRENT_VERSION = 2; + + //! + //! \brief Contains the CPID statistics aggregated for all projects. + //! + //! To conserve space in a serialized superblock, other sections refer to + //! CPIDs by numeric offsets of the items stored in this index instead of + //! storing the CPID values themselves. + //! + struct CpidIndex { - CpidStats(); + typedef std::map::size_type size_type; + typedef std::map::iterator iterator; + typedef std::map::const_iterator const_iterator; + + //! + //! \brief Initialize an empty CPID index. + //! + CpidIndex(); + + //! + //! \brief Initialize an empty CPID index for a legacy superblock with + //! the number of zero-magnitude CPIDs. + //! + //! This initializes the object in legacy mode for superblock contract + //! strings that contain the number of zero-magnitude CPIDs. The index + //! will not imilicitly count and filter inserted zero-magnitude CPIDs + //! so that a legacy quorum hash matches that of the string contract. + //! + //! \param zero_magnitude_count Number of zero-magnitude CPIDs omitted + //! from the superblock. + //! + CpidIndex(uint32_t zero_magnitude_count); + + //! + //! \brief Returns an iterator to the beginning. + //! + const_iterator begin() const; + + //! + //! \brief Returns an iterator to the end. + //! + const_iterator end() const; + + //! + //! \brief Get the number of unique CPIDs contained in the superblock + //! that have a magnitude greater than zero. + //! + size_type size() const; + + //! + //! \brief Determine whether the index contains any active CPIDs with a + //! magnitude greater than zero. + //! + bool empty() const; + + //! + //! \brief Get the number of zero-magnitude CPIDs. + //! + //! \return Number of CPIDs with beacons not included in the superblock + //! because they exhibit zero magnitude. + //! + uint32_t Zeros() const; + + //! + //! \brief Get the number of valid CPIDs present at the time that the + //! superblock formed. + //! + //! \return The number of CPIDs, including zero-magnitude CPIDs. + //! + size_t TotalCount() const; + + //! + //! \brief Get the sum of the magnitudes of all the CPIDs in the index. + //! + //! \return Total magnitude at the time of the superblock. + //! + uint64_t TotalMagnitude() const; + + //! + //! \brief Get the average magnitude of all the CPIDs in the index. + //! + //! \return Average magnitude at the time of the superblock. + //! + double AverageMagnitude() const; + + //! + //! \brief Get the network-wide magnitude of the provided CPID. + //! + //! \param cpid The CPID to look-up the magnitude for. + //! + //! \return A magnitude in the range of 0 to 65535. Returns zero if the + //! CPID doesn't exist in the index. + //! + uint16_t MagnitudeOf(const Cpid& cpid) const; + + //! + //! \brief Get the offset of the provided CPID in the index. + //! + //! \param cpid The CPID to look-up the offset for. + //! + //! \return The CPID's zero-based offset if it exists in the index, or + //! the offset after the last element in the index (the index size) if + //! it doesn't. + //! + size_t OffsetOf(const Cpid& cpid) const; + + //! + //! \brief Get the CPID indexed at the specified offset. + //! + //! \param offset Zero-based offset of the CPID to fetch. + //! + //! \return Iterator to the specified CPID if it exists or an iterator + //! to the end of the index if it does not. The iterator points to the + //! CPID/magnitude pair. + //! + const_iterator At(const size_t offset) const; + + //! + //! \brief Add the supplied CPID to the index. + //! + //! This method ignores an attempt to add a duplicate entry if a CPID + //! already exists. + //! + //! \param cpid The CPID to add. + //! \param magnitude Total magnitude to associate with the CPID. + //! + void Add(const Cpid cpid, const uint16_t magnitude); + + //! + //! \brief Add the supplied mining ID to the index if it represents a + //! valid CPID. + //! + //! This method ignores an attempt to add a duplicate entry if a CPID + //! already exists. + //! + //! \param id May contain a CPID. + //! \param magnitude Total magnitude to associate with the CPID. + //! + void Add(const MiningId id, const uint16_t magnitude); + + //! + //! \brief Get the size of the data to serialize. + //! + //! \param nType Target protocol type (network, disk, etc.). + //! \param nVersion Protocol version. + //! + //! \return Size of the data in bytes. + //! + unsigned int GetSerializeSize(int nType, int nVersion) const + { + unsigned int size = GetSizeOfCompactSize(m_magnitudes.size()) + + m_magnitudes.size() * sizeof(Cpid) + + VARINT(m_zero_magnitude_count).GetSerializeSize(); + + for (const auto& cpid_pair : m_magnitudes) { + // Compact size encoding provides better compression for the + // magnitude values than VARINT because most CPIDs have mags + // less than 253: + // + // Note: This encoding imposes an upper limit of MAX_SIZE on + // the encoded value. Magnitudes fall well within the limit. + // + size += GetSizeOfCompactSize(cpid_pair.second); + } - CpidStats(uint64_t total_credit, uint64_t rac, uint16_t magnitude); + return size; + } - Compact m_total_credit; - Compact m_rac; - Compact m_magnitude; + //! + //! \brief Serialize the object to the provided stream. + //! + //! \param stream The output stream. + //! \param nType Target protocol type (network, disk, etc.). + //! \param nVersion Protocol version. + //! + template + void Serialize(Stream& stream, int nType, int nVersion) const + { + WriteCompactSize(stream, m_magnitudes.size()); + + for (const auto& cpid_pair : m_magnitudes) { + cpid_pair.first.Serialize(stream, nType, nVersion); + + // Write magnitude using compact-size encoding: + WriteCompactSize(stream, cpid_pair.second); + } - IMPLEMENT_SERIALIZE - ( - READWRITE(m_total_credit); - READWRITE(m_rac); - READWRITE(m_magnitude); - ) - }; + VARINT(m_zero_magnitude_count).Serialize(stream); + } + + //! + //! \brief Deserialize the object from the provided stream. + //! + //! \param stream The input stream. + //! \param nType Target protocol type (network, disk, etc.). + //! \param nVersion Protocol version. + //! + template + void Unserialize(Stream& stream, int nType, int nVersion) + { + m_magnitudes.clear(); + m_total_magnitude = 0; + + unsigned int size = ReadCompactSize(stream); + + for (size_t i = 0; i < size; i++) { + Cpid cpid; + cpid.Unserialize(stream, nType, nVersion); + + // Read magnitude using compact-size encoding: + uint16_t magnitude = ReadCompactSize(stream); + + m_magnitudes.emplace(cpid, magnitude); + m_total_magnitude += magnitude; + } + VARINT(m_zero_magnitude_count).Unserialize(stream); + } + + private: + //! + //! \brief Maps external CPIDs to their aggregated statistics. + //! + std::map m_magnitudes; + + //! + //! \brief Contains the number of CPIDs with beacons not included in + //! the superblock because they exhibit zero magnitude. + //! + //! Omitting zero-magnitude CPIDs from superblocks conserves space. + //! + uint32_t m_zero_magnitude_count; + + //! + //! \brief Tally of the sum of the magnitudes of all the CPIDs present + //! in the superblock. + //! + uint64_t m_total_magnitude; + + //! + //! \brief Flag that indicates whether to enable legacy behavior. + //! + //! This flag initializes to \c true when constructing a superblock + //! with a preset zero-magnitude CPID count. + //! + //! Some legacy superblocks contain CPIDs with zero magnitudes. The + //! quorum hash includes these CPIDs, so we load them into the CPID + //! collection instead of incrementing the zero-magnitude counter. + //! + bool m_legacy; + }; // CpidIndex + + //! + //! \brief Contains the statistics associated with a BOINC project. + //! struct ProjectStats { + //! + //! \brief Initialize an empty (zero) statistics object. + //! ProjectStats(); + //! + //! \brief Initialize an object with the provided statistics. + //! + //! \param average_rac Average recent average credit of the project. + //! \param rac Sum of the RAC of all the project CPIDs. + //! ProjectStats(uint64_t average_rac, uint64_t rac); - Compact m_average_rac; - Compact m_rac; - std::map, CpidStats> m_cpids; + uint64_t m_average_rac; //!< Average project recent average credit. + uint64_t m_rac; //!< Sum of the RAC of all the project CPIDs. IMPLEMENT_SERIALIZE ( - READWRITE(m_average_rac); - READWRITE(m_rac); - - // Omit full project stats to compare old content size: - // TODO: remove the condition? - if (nVersion > 1) { - READWRITE(m_cpids); - } + READWRITE(VARINT(m_average_rac)); + READWRITE(VARINT(m_rac)); ) }; - struct NetworkStats + //! + //! \brief An optional type that either contains some project statistics or + //! does not. + //! + typedef boost::optional ProjectStatsOption; + + //! + //! \brief Contains aggregated project statistics. + //! + class ProjectIndex { - Compact m_average_rac; - Compact m_rac; - Compact m_magnitude; - Compact m_zero_mag_cpid_count; + public: + typedef std::map::size_type size_type; + typedef std::map::iterator iterator; + typedef std::map::const_iterator const_iterator; + + //! + //! \brief Initialize an empty project index. + //! + ProjectIndex(); + + //! + //! \brief Returns an iterator to the beginning. + //! + const_iterator begin() const; + + //! + //! \brief Returns an iterator to the end. + //! + const_iterator end() const; + + //! + //! \brief Get the number of projects contained in the superblock. + //! + size_type size() const; + + //! + //! \brief Determine whether the index contains any projects. + //! + bool empty() const; + + //! + //! \brief Get the sum of the recent average credit of all the projects + //! on the whitelist. + //! + //! \return Total project RAC at the time of the superblock. + //! + uint64_t TotalRac() const; + + //! + //! \brief Get the average recent average credit of all the projects on + //! the whitelist. + //! + //! \return Average project RAC at the time of the superblock. + //! + double AverageRac() const; + + //! + //! \brief Try to get the project statistics for a project with the + //! specified name. + //! + //! \param name As it exists in the current whitelist. + //! + //! \return An object that contains the matching project statistics if + //! it exists. + //! + ProjectStatsOption Try(const std::string& name) const; + + //! + //! \brief Add the supplied project statistics to the index. + //! + //! This method ignores an attempt to add a duplicate entry if a project + //! already exists with the same name. + //! + //! \param name As it exists in the current whitelist. + //! \param stats Contains project RAC data. + //! + void Add(std::string name, const ProjectStats& stats); IMPLEMENT_SERIALIZE ( - READWRITE(m_average_rac); - READWRITE(m_rac); - READWRITE(m_magnitude); - READWRITE(m_zero_mag_cpid_count); + READWRITE(m_projects); + + // Tally up the recent average credit after deserializing. + // + if (fRead) { + REF(m_total_rac) = 0; + + for (const auto& project_pair : m_projects) { + REF(m_total_rac) += project_pair.second.m_rac; + } + } ) - }; - uint32_t m_version; - std::map> m_cpids; - std::map m_projects; - NetworkStats m_network; + private: + //! + //! \brief Maps project names to their aggregated statistics. + //! + //! The map is keyed by project names as they exist in administrative + //! project contracts present at the time that the superblock forms. + //! + std::map m_projects; + + //! + //! \brief Tally of the sum of the recent average credit of all the + //! projects present in the superblock. + //! + uint64_t m_total_rac; + }; // ProjectIndex + + //! + //! \brief Version number of the serialized superblock format. + //! + //! Defaults to the most recent version for a new superblock instance. + //! + //! Version 1: Legacy packed superblock contract stored as a record in the + //! transaction's hashBoinc field. Contains only top-level CPID magnitudes + //! and the credit averages for each project. + //! + //! Version 2: Superblock data serializable using the built-in serialize.h + //! facilities. Stored in the superblock field of a block rather than in a + //! transaction to provide for a greater size. + //! + uint32_t m_version = CURRENT_VERSION; + + CpidIndex m_cpids; //!< Maps superblock CPIDs to magntudes. + ProjectIndex m_projects; //!< Whitelisted projects statistics. //std::vector m_verified_beacons; - int64_t nTime; - int64_t nHeight; + int64_t m_height; //!< Height of the block that contains the contract. + int64_t m_timestamp; //!< Timestamp of the block that contains the contract. IMPLEMENT_SERIALIZE ( @@ -224,25 +594,158 @@ class Superblock READWRITE(m_cpids); READWRITE(m_projects); - READWRITE(m_network); //READWRITE(m_verified_beacons); ) -public: /* public methods */ - - void LoadStats(const ScraperStats& stats); - - /* - + //! + //! \brief Initialize an empty superblock object. + //! Superblock(); - int64_t Age() const; - static Superblock UnpackLegacy(const std::string& binary); + //! + //! \brief Initialize an empty superblock object of the specified version. + //! + //! \param version Version number of the serialized superblock format. + //! + Superblock(uint32_t version); + + //! + //! \brief Initialize a superblock from the provided scraper statistics. + //! + //! \param stats Converged statistics containing CPID and project credit + //! data. + //! + //! \return A new superblock instance that contains the imported scraper + //! statistics. + //! + static Superblock FromStats(const ScraperStats& stats); + + //! + //! \brief Initialize a superblock from a legacy superblock contract. + //! + //! \param packed Legacy superblock contract as a string of XML-like text + //! data and binary-packed CPID/magnitude data. + //! + //! \return A new superblock instance that contains the imported contract + //! statistics. + //! + static Superblock UnpackLegacy(const std::string& packed); + + //! + //! \brief Pack the superblock data into a legacy superblock contract. + //! + //! CONSENSUS: Although this method produces a legacy contract compatible + //! with older protocols, it does not guarantee that the contract matches + //! exactly to legacy input contract versions imported by UnpackLegacy(). + //! Use this method to produce new contracts from a superblock object. Do + //! not reproduce existing superblock contracts with this routine if they + //! will be retransmitted to other nodes. + //! + //! \return Legacy superblock contract as a string of XML-like text data + //! and binary-packed CPID/magnitude data. + //! std::string PackLegacy() const; - QuorumHash ComputeQuorumHash() const; - double ComputeAverageMagnitude() const; + //! + //! \brief Get the current age of the superblock. + //! + //! \return Superblock age in seconds. + //! + int64_t Age() const; +}; // Superblock - */ -}; +//! +//! \brief Hashes and stores the digest of a superblock. +//! +class QuorumHash +{ +public: + //! + //! \brief Internal representation of the result of a legacy MD5-based + //! superblock hash. + //! + typedef std::array Md5Sum; + + //! + //! \brief Describes the kind of hash contained in a \c QuorumHash object. + //! + enum class Kind + { + INVALID, //!< An empty or invalid quorum hash. + SHA256, //!< Hash created for superblocks version 2 and greater. + MD5, //!< Legacy hash created for superblocks before version 2. + }; + + //! + //! \brief A tag type that describes an empty or invalid quorum hash. + //! + struct Invalid { }; + + //! + //! \brief Initialize an invalid quorum hash object. + //! + QuorumHash(); + + //! + //! \brief Initialize a SHA256 quorum hash object variant. + //! + //! \param hash Contains the bytes of the superblock digest produced by + //! applying a SHA256 hashing algorithm to the significant data. + //! + QuorumHash(uint256 hash); + + //! + //! \brief Initialize an MD5 quorum hash object variant. + //! + //! \param hash Contains the bytes of the superblock digest produced by the + //! legacy MD5-based superblock hashing algorithm ("neural hash"). + //! + QuorumHash(Md5Sum legacy_hash); + + //! + //! \brief Hash the provided superblock. + //! + //! \param superblock Superblock object containing the data to hash. + //! + //! \return The appropriate quorum hash variant digest depending on the + //! version number of the superblock. + //! + static QuorumHash Hash(const Superblock& superblock); + + bool operator==(const QuorumHash& other) const; + bool operator!=(const QuorumHash& other) const; + bool operator==(const uint256& other) const; + bool operator!=(const uint256& other) const; + bool operator==(const std::string& other) const; + bool operator!=(const std::string& other) const; + + //! + //! \brief Describe the type of hash contained. + //! + //! \return A value enumerated on \c QuorumHash::Kind . + //! + Kind Which() const; + + //! + //! \brief Determine whether the object contains a valid superblock hash. + //! + //! \return \c true if the object contains a SHA256 or legacy MD5 hash. + //! + bool Valid() const; + + //! + //! \brief Get the string representation of the hash. + //! + //! \return A 64-character hex-encoded string for a SHA256 hash, or a + //! 32-character hex-encoded string for a legacy MD5 hash. Returns an + //! empty string for an invalid hash. + //! + std::string ToString() const; + +private: + //! + //! \brief Contains the bytes of a SHA256 or MD5 digest. + //! + boost::variant m_hash; +}; // QuorumHash } diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 3ba986044f..cf8cf9680b 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4653,35 +4653,21 @@ UniValue testnewsb(const UniValue& params, bool fHelp) NN::Superblock NewFormatSuperblock; NN::Superblock NewFormatSuperblock_out; CDataStream ss(SER_NETWORK, 1); - CDataStream ss2(SER_NETWORK, 1); uint64_t nNewFormatSuperblockSerSize; uint64_t nNewFormatSuperblock_outSerSize; uint256 nNewFormatSuperblockHash; uint256 nNewFormatSuperblock_outHash; - NewFormatSuperblock.m_version = 1; - NewFormatSuperblock.nTime = ConvergedScraperStatsCache.nTime; - - NewFormatSuperblock.LoadStats(ConvergedScraperStatsCache.mScraperConvergedStats); + NewFormatSuperblock = NN::Superblock::FromStats(ConvergedScraperStatsCache.mScraperConvergedStats); + NewFormatSuperblock.m_timestamp = ConvergedScraperStatsCache.nTime; _log(logattribute::INFO, "testnewsb", "m_projects size = " + std::to_string(NewFormatSuperblock.m_projects.size())); res.pushKV("m_projects size", (uint64_t) NewFormatSuperblock.m_projects.size()); _log(logattribute::INFO, "testnewsb", "m_cpids size = " + std::to_string(NewFormatSuperblock.m_cpids.size())); res.pushKV("m_cpids size", (uint64_t) NewFormatSuperblock.m_cpids.size()); + _log(logattribute::INFO, "testnewsb", "zero-mag count = " + std::to_string(NewFormatSuperblock.m_cpids.Zeros())); + res.pushKV("zero-mag count", (uint64_t) NewFormatSuperblock.m_cpids.Zeros()); - uint64_t nmProjectCPIDStatsTotalSize = 0; - for (auto const& entry : NewFormatSuperblock.m_projects) - { - _log(logattribute::INFO, "testnewsb", "m_projects ProjID " + entry.first - + ", CPID size " + std::to_string(entry.second.m_cpids.size())); - nmProjectCPIDStatsTotalSize += entry.second.m_cpids.size(); - } - - _log(logattribute::INFO, "testnewsb", "m_projects.m_cpids total size = " + std::to_string(nmProjectCPIDStatsTotalSize)); - res.pushKV("m_projects.m_cpids total size", nmProjectCPIDStatsTotalSize); - - // Version 1: compare serialization without full project stats: - // nNewFormatSuperblockSerSize = NewFormatSuperblock.GetSerializeSize(SER_NETWORK, 1); nNewFormatSuperblockHash = SerializeHash(NewFormatSuperblock); @@ -4708,35 +4694,19 @@ UniValue testnewsb(const UniValue& params, bool fHelp) res.pushKV("NewFormatSuperblock serialization", "FAILED"); } + NewFormatSuperblock = NN::Superblock::UnpackLegacy(sSBCoreData_out); + NN::QuorumHash new_legacy_hash = NN::QuorumHash::Hash(NewFormatSuperblock); + std::string old_legacy_hash = GetQuorumHash(sSBCoreData_out); - // Version 2: compare serialization with full project stats: - // - NewFormatSuperblock.m_version = 2; - - nNewFormatSuperblockSerSize = NewFormatSuperblock.GetSerializeSize(SER_NETWORK, 1); - nNewFormatSuperblockHash = SerializeHash(NewFormatSuperblock); - - _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblockSerSize2 = " + std::to_string(nNewFormatSuperblockSerSize)); - res.pushKV("nNewFormatSuperblockSerSize2", nNewFormatSuperblockSerSize); - - ss2 << NewFormatSuperblock; - ss2 >> NewFormatSuperblock_out; + res.pushKV("new_legacy_hash", new_legacy_hash.ToString()); + res.pushKV("old_legacy_hash", old_legacy_hash); - nNewFormatSuperblock_outSerSize = NewFormatSuperblock_out.GetSerializeSize(SER_NETWORK, 1); - nNewFormatSuperblock_outHash = SerializeHash(NewFormatSuperblock_out); - - _log(logattribute::INFO, "testnewsb", "nNewFormatSuperblock_outSerSize2 = " + std::to_string(nNewFormatSuperblock_outSerSize)); - res.pushKV("nNewFormatSuperblock_outSerSize2", nNewFormatSuperblock_outSerSize); - - if (nNewFormatSuperblockHash == nNewFormatSuperblock_outHash) - { - _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock2 serialization passed."); - res.pushKV("NewFormatSuperblock2 serialization", "passed"); - } - else - { - _log(logattribute::ERR, "testnewsb", "NewFormatSuperblock2 serialization FAILED."); - res.pushKV("NewFormatSuperblock2 serialization", "FAILED"); + if (new_legacy_hash == old_legacy_hash) { + _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock legacy hash passed."); + res.pushKV("NewFormatSuperblock legacy hash", "passed"); + } else { + _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock legacy hash FAILED."); + res.pushKV("NewFormatSuperblock legacy hash", "FAILED"); } return res; From 64c8ec7d9f771bad84faff4addddc5ee87651e06 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Thu, 4 Jul 2019 17:39:41 -0500 Subject: [PATCH 084/115] Add tests for superblock classes --- src/Makefile.test.include | 1 + src/test/gridcoin_tests.cpp | 35 - src/test/neuralnet/superblock_tests.cpp | 1404 +++++++++++++++++++++++ 3 files changed, 1405 insertions(+), 35 deletions(-) create mode 100644 src/test/neuralnet/superblock_tests.cpp diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 9c824572cc..2915a61b7b 100755 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -43,6 +43,7 @@ GRIDCOIN_TESTS =\ test/neuralnet/cpid_tests.cpp \ test/neuralnet/project_tests.cpp \ test/neuralnet/researcher_tests.cpp \ + test/neuralnet/superblock_tests.cpp \ test/rpc_tests.cpp \ test/script_P2SH_tests.cpp \ test/script_tests.cpp \ diff --git a/src/test/gridcoin_tests.cpp b/src/test/gridcoin_tests.cpp index 52b12a77c3..db17c9f64a 100755 --- a/src/test/gridcoin_tests.cpp +++ b/src/test/gridcoin_tests.cpp @@ -3,11 +3,6 @@ #include "main.h" #include "global_objects_noui.hpp" #include "appcache.h" -#include "neuralnet/superblock.h" - -#include "data/superblock.txt.h" -#include "data/superblock_packed.bin.h" -#include "data/superblock_unpacked.txt.h" #include #include @@ -16,7 +11,6 @@ extern double GetOutstandingAmountOwed(StructCPID &mag, std::string cpid, int64_t locktime, double& total_owed, double block_magnitude); extern std::map mvDPOR; -extern std::string GetQuorumHash(const std::string& data); extern bool fTestNet; double RoundFromString(std::string s, int place); @@ -72,35 +66,6 @@ BOOST_AUTO_TEST_CASE(gridcoin_GetOutstandingAmountOwedShouldReturnCorrectSum) BOOST_CHECK_CLOSE(outstanding, total_owed - cpid.payments, 0.000001); } -BOOST_AUTO_TEST_CASE(gridcoin_VerifyGetQuorumHash) -{ - const std::string contract = "0390450eff5f5cd6d7a7d95a6d898d8d,1480;1878ecb566ac8e62beb7d141e1922460,6.25;1963a6f109ea770c195a0e1afacd2eba,70;285ff8d5014ef73cc83580338a9c0345,820;46f64d69eb8c5ee9cd24178b589af83f,12.5;0,15;4f0fecd04be3a74c46aa9678f780d028,750;55cd02be28521073d367f7ca38615682,720;58e565221db80d168621187c36c26c3e,12.5;59900fe7ef44fe33aa2afdf98301ec1c,530;5a094d7d93f6d6370e78a2ac8c008407,1400;0,15;7d0d73fe026d66fd4ab8d5d8da32a611,84000;8cfe9864e18db32a334b7de997f5a4f2,35;8f2a530cf6f73647af4c680c3471ea65,90;96c18bb4a02d15c90224a7138a540cf7,4520;9b67756a05f76842de1e88226b79deb9,0;9ce6f19e20f69790601c9bf9c0b03928,3.75;9ff2b091f67327b7d8e5b75fb5337514,310;a7a537ff8ad4d8fff4b3dad444e681ef,0;a914eba952be5dfcf73d926b508fd5fa,6720;d5924e4750f0f1c1c97b9635914afb9e,0;db250f4451dc39632e52e157f034316d,5;e7f90818e3e87c0bbefe83ad3cfe27e1,13500;btc,0;grc,0;amicable numbers,536000,5900000;asteroids@home,158666.67,793333.33;citizen science grid,575333.33,2881428.57;collatz conjecture,4027142.86,36286380;cosmology@home,47000,282666.67;einstein@home,435333.33,5661428.57;gpugrid,1804285.71,9035714.29;leiden classical,2080,10500;lhc@home classic,26166.67,210000;milkyway@home,2094285.71,8395714.29;moowrap,996666.67,7981428.57;nfs@home,96000,385333.33;numberfields@home,89333.33,626666.67;primegrid,248000,1735714.29;seti@home,52333.33,367333.33;srbase,89666.67,896666.67;sztaki desktop grid,8320,41666.67;theskynet pogs,45500,409333.33;tn-grid,39500,514666.67;universe@home,47833.33,335333.33;vgtu project@home,20666.67,124000;world community grid,29166.67,263333.33;yafu,93000,838666.67;yoyo@home,7040,56333.33;NeuralNetwork,2000000,20000000;"; - BOOST_CHECK_EQUAL(GetQuorumHash(contract), "0f099cab261bb562ff553f3b9c7bf942"); -} - -BOOST_AUTO_TEST_CASE(gridcoin_QuorumHashShouldBeCorrectAfterPackingAndUnpackingBinarySuperblock) -{ - const std::string contract(superblock_txt, superblock_txt + superblock_txt_len); - const std::string packed = PackBinarySuperblock(contract); - const std::string unpacked = UnpackBinarySuperblock(packed); - //BOOST_CHECK_EQUAL(unpacked, contract); - BOOST_CHECK_EQUAL(GetQuorumHash(contract), GetQuorumHash(unpacked)); -} - -BOOST_AUTO_TEST_CASE(gridcoin_ValidatePackBinarySuperblock) -{ - const std::string contract(superblock_txt, superblock_txt + superblock_txt_len); - const std::string expected(superblock_packed_bin, superblock_packed_bin + superblock_packed_bin_len); - BOOST_CHECK_EQUAL(PackBinarySuperblock(contract), expected); -} - -BOOST_AUTO_TEST_CASE(gridcoin_ValidateUnpackBinarySuperblock) -{ - const std::string packed(superblock_packed_bin, superblock_packed_bin + superblock_packed_bin_len); - const std::string expected(superblock_unpacked_txt, superblock_unpacked_txt + superblock_unpacked_txt_len); - BOOST_CHECK_EQUAL(UnpackBinarySuperblock(packed), expected); -} - BOOST_AUTO_TEST_CASE(gridcoin_V8ShouldBeEnabledOnBlock1010000InProduction) { bool was_testnet = fTestNet; diff --git a/src/test/neuralnet/superblock_tests.cpp b/src/test/neuralnet/superblock_tests.cpp new file mode 100644 index 0000000000..1854332462 --- /dev/null +++ b/src/test/neuralnet/superblock_tests.cpp @@ -0,0 +1,1404 @@ +#include "compat/endian.h" +#include "neuralnet/superblock.h" + +#include +#include +#include +#include +#include + +#include "test/data/superblock.txt.h" +#include "test/data/superblock_packed.bin.h" +#include "test/data/superblock_unpacked.txt.h" + +std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); +std::string ExtractValue(std::string data, std::string delimiter, int pos); + +namespace { +//! +//! \brief Legacy functions used to test backward compatibility with the old +//! superblock contract format. +//! +//! We may eventually remove these functions, so we'll redefine them here for +//! the test cases that check legacy support. +//! +struct Legacy +{ + struct BinaryResearcher + { + std::array cpid; + int16_t magnitude; + }; + + static std::string UnpackBinarySuperblock(std::string sBlock) + { + // 12-21-2015: R HALFORD: If the block is not binary, return the legacy format for backward compatibility + std::string sBinary = ExtractXML(sBlock,"",""); + if (sBinary.empty()) return sBlock; + + std::ostringstream stream; + stream << "" << ExtractXML(sBlock,"","") << "" + << "" << ExtractXML(sBlock,"","") << "" + << ""; + + // Binary data support structure: + // Each CPID consumes 16 bytes and 2 bytes for magnitude: (Except CPIDs + // with zero magnitude - the count of those is stored in XML node + // to save space) + // 1234567890123456MM + // MM = Magnitude stored as 2 bytes + // No delimiter between CPIDs, Step Rate = 18. + // CPID and magnitude are stored in big endian. + for (unsigned int x = 0; x < sBinary.length(); x += 18) + { + if(sBinary.length() - x < 18) + break; + + const BinaryResearcher* researcher = reinterpret_cast(sBinary.data() + x); + stream << HexStr(researcher->cpid.begin(), researcher->cpid.end()) << "," + << be16toh(researcher->magnitude) << ";"; + } + + // Append zero magnitude researchers so the beacon count matches + int num_zero_mag = atoi(ExtractXML(sBlock,"","")); + const std::string zero_entry("0,15;"); + for(int i=0; i"; + return stream.str(); + } + + static std::string PackBinarySuperblock(std::string sBlock) + { + std::string sMagnitudes = ExtractXML(sBlock,"",""); + + // For each CPID in the superblock, convert data to binary + std::stringstream stream; + int64_t num_zero_mag = 0; + for (auto& entry : split(sMagnitudes.c_str(), ";")) + { + if (entry.length() < 1) + continue; + + const std::vector& binary_cpid = ParseHex(entry); + if(binary_cpid.size() < 16) + { + ++num_zero_mag; + continue; + } + + BinaryResearcher researcher; + std::copy_n(binary_cpid.begin(), researcher.cpid.size(), researcher.cpid.begin()); + + // Ensure we do not blow out the binary space (technically we can handle 0-65535) + double magnitude_d = strtod(ExtractValue(entry, ",", 1).c_str(), NULL); + // Changed to 65535 for the new NN. This will still be able to be successfully unpacked by any node. + magnitude_d = std::max(0.0, std::min(magnitude_d, 65535.0)); + researcher.magnitude = htobe16(roundint(magnitude_d)); + + stream.write((const char*) &researcher, sizeof(BinaryResearcher)); + } + + std::stringstream block_stream; + block_stream << "" << num_zero_mag << "" + "" << stream.rdbuf() << "" + "" << ExtractXML(sBlock,"","") << "" + "" << ExtractXML(sBlock,"","") << ""; + return block_stream.str(); + } + + static std::string RetrieveMd5(std::string s1) + { + try + { + const char* chIn = s1.c_str(); + unsigned char digest2[16]; + MD5((unsigned char*)chIn, strlen(chIn), (unsigned char*)&digest2); + char mdString2[33]; + for(int i = 0; i < 16; i++) { + sprintf(&mdString2[i*2], "%02x", (unsigned int)digest2[i]); + } + std::string xmd5(mdString2); + return xmd5; + } + catch (std::exception &e) + { + LogPrintf("MD5 INVALID!"); + return ""; + } + } + + static std::string CPIDHash(double dMagIn, std::string sCPID) + { + std::string sMag = RoundToString(dMagIn,0); + double dMagLength = (double)sMag.length(); + double dExponent = pow(dMagLength,5); + std::string sMagComponent1 = RoundToString(dMagIn/(dExponent+.01),0); + std::string sSuffix = RoundToString(dMagLength * dExponent, 0); + std::string sHash = sCPID + sMagComponent1 + sSuffix; + return sHash; + } + + static std::string GetQuorumHash(const std::string& data) + { + //Data includes the Magnitudes, and the Projects: + std::string sMags = ExtractXML(data,"",""); + std::vector vMags = split(sMags.c_str(),";"); + std::string sHashIn = ""; + + for (unsigned int x = 0; x < vMags.size(); x++) + { + std::vector vRow = split(vMags[x].c_str(),","); + + // Each row should consist of two fields, CPID and magnitude. + if(vRow.size() < 2) + continue; + + // First row (CPID) must be exactly 32 bytes. + const std::string& sCPID = vRow[0]; + if(sCPID.size() != 32) + continue; + + double dMag = RoundFromString(vRow[1],0); + sHashIn += CPIDHash(dMag, sCPID) + ""; + } + + return RetrieveMd5(sHashIn); + } +}; // Legacy + +ScraperStats GetTestScraperStats() +{ + ScraperStats stats; + std::string cpid1 = "00010203040506070809101112131415"; + std::string cpid2 = "15141312111009080706050403020100"; + std::string project1 = "project_1"; + std::string project2 = "project_2"; + + ScraperObjectStats p1c1; + p1c1.statskey.objecttype = statsobjecttype::byCPIDbyProject; + p1c1.statskey.objectID = project1 + "," + cpid1; + p1c1.statsvalue.dTC = 1000; + p1c1.statsvalue.dRAC = 101; + p1c1.statsvalue.dAvgRAC = 1003; + p1c1.statsvalue.dMag = 1004; + stats.emplace(p1c1.statskey, p1c1); + + ScraperObjectStats p1c2; + p1c2.statskey.objecttype = statsobjecttype::byCPIDbyProject; + p1c2.statskey.objectID = project1 + "," + cpid2; + p1c2.statsvalue.dTC = 2000; + p1c2.statsvalue.dRAC = 102; + p1c2.statsvalue.dAvgRAC = 2003; + p1c2.statsvalue.dMag = 2004; + stats.emplace(p1c2.statskey, p1c2); + + ScraperObjectStats p2c1; + p2c1.statskey.objecttype = statsobjecttype::byCPIDbyProject; + p2c1.statskey.objectID = project2 + "," + cpid1; + p2c1.statsvalue.dTC = 3000; + p2c1.statsvalue.dRAC = 103; + p2c1.statsvalue.dAvgRAC = 3003; + p2c1.statsvalue.dMag = 3004; + stats.emplace(p2c1.statskey, p2c1); + + ScraperObjectStats p2c2; + p2c2.statskey.objecttype = statsobjecttype::byCPIDbyProject; + p2c2.statskey.objectID = project2 + "," + cpid2; + p2c2.statsvalue.dTC = 4000; + p2c2.statsvalue.dRAC = 104; + p2c2.statsvalue.dAvgRAC = 4003; + p2c2.statsvalue.dMag = 4004; + stats.emplace(p2c2.statskey, p2c2); + + ScraperObjectStats c1; + c1.statskey.objecttype = statsobjecttype::byCPID; + c1.statskey.objectID = cpid1; + c1.statsvalue.dTC = p1c1.statsvalue.dTC + p2c1.statsvalue.dTC; + c1.statsvalue.dRAC = p1c1.statsvalue.dRAC + p2c1.statsvalue.dRAC; + c1.statsvalue.dAvgRAC = c1.statsvalue.dRAC; + c1.statsvalue.dMag = p1c1.statsvalue.dMag + p2c1.statsvalue.dMag; + stats.emplace(c1.statskey, c1); + + ScraperObjectStats c2; + c2.statskey.objecttype = statsobjecttype::byCPID; + c2.statskey.objectID = cpid2; + c2.statsvalue.dTC = p1c2.statsvalue.dTC + p2c2.statsvalue.dTC; + c2.statsvalue.dRAC = p1c2.statsvalue.dRAC + p2c2.statsvalue.dRAC; + c2.statsvalue.dAvgRAC = c2.statsvalue.dRAC; + c2.statsvalue.dMag = p1c2.statsvalue.dMag + p2c2.statsvalue.dMag; + stats.emplace(c2.statskey, c2); + + ScraperObjectStats p1; + p1.statskey.objecttype = statsobjecttype::byProject; + p1.statskey.objectID = project1; + p1.statsvalue.dTC = p1c1.statsvalue.dTC + p1c2.statsvalue.dTC; + p1.statsvalue.dRAC = p1c1.statsvalue.dRAC + p1c2.statsvalue.dRAC; + p1.statsvalue.dAvgRAC = p1.statsvalue.dRAC / 2; + p1.statsvalue.dMag = p1c1.statsvalue.dMag + p1c2.statsvalue.dMag; + stats.emplace(p1.statskey, p1); + + ScraperObjectStats p2; + p2.statskey.objecttype = statsobjecttype::byProject; + p2.statskey.objectID = project2; + p2.statsvalue.dTC = p2c1.statsvalue.dTC + p2c2.statsvalue.dTC; + p2.statsvalue.dRAC = p2c1.statsvalue.dRAC + p2c2.statsvalue.dRAC; + p2.statsvalue.dAvgRAC = p2.statsvalue.dRAC / 2; + p2.statsvalue.dMag = p2c1.statsvalue.dMag + p2c2.statsvalue.dMag; + stats.emplace(p2.statskey, p2); + + return stats; +} +} // anonymous namespace + +// ----------------------------------------------------------------------------- +// Legacy Superblock Test Cases +// ----------------------------------------------------------------------------- + +extern std::string GetQuorumHash(const std::string& data); + +BOOST_AUTO_TEST_CASE(gridcoin_VerifyGetQuorumHash) +{ + const std::string contract = + "" + "0390450eff5f5cd6d7a7d95a6d898d8d,1480;" + "1878ecb566ac8e62beb7d141e1922460,6.25;" + "1963a6f109ea770c195a0e1afacd2eba,70;" + "285ff8d5014ef73cc83580338a9c0345,820;" + "46f64d69eb8c5ee9cd24178b589af83f,12.5;" + "0,15;" + "4f0fecd04be3a74c46aa9678f780d028,750;" + "55cd02be28521073d367f7ca38615682,720;" + "58e565221db80d168621187c36c26c3e,12.5;" + "59900fe7ef44fe33aa2afdf98301ec1c,530;" + "5a094d7d93f6d6370e78a2ac8c008407,1400;" + "0,15;" + "7d0d73fe026d66fd4ab8d5d8da32a611,84000;" + "8cfe9864e18db32a334b7de997f5a4f2,35;" + "8f2a530cf6f73647af4c680c3471ea65,90;" + "96c18bb4a02d15c90224a7138a540cf7,4520;" + "9b67756a05f76842de1e88226b79deb9,0;" + "9ce6f19e20f69790601c9bf9c0b03928,3.75;" + "9ff2b091f67327b7d8e5b75fb5337514,310;" + "a7a537ff8ad4d8fff4b3dad444e681ef,0;" + "a914eba952be5dfcf73d926b508fd5fa,6720;" + "d5924e4750f0f1c1c97b9635914afb9e,0;" + "db250f4451dc39632e52e157f034316d,5;" + "e7f90818e3e87c0bbefe83ad3cfe27e1,13500;" + "" + "btc,0;grc,0;" + "" + "amicable numbers,536000,5900000;" + "asteroids@home,158666.67,793333.33;" + "citizen science grid,575333.33,2881428.57;" + "collatz conjecture,4027142.86,36286380;" + "cosmology@home,47000,282666.67;" + "einstein@home,435333.33,5661428.57;" + "gpugrid,1804285.71,9035714.29;" + "leiden classical,2080,10500;" + "lhc@home classic,26166.67,210000;" + "milkyway@home,2094285.71,8395714.29;" + "moowrap,996666.67,7981428.57;" + "nfs@home,96000,385333.33;" + "numberfields@home,89333.33,626666.67;" + "primegrid,248000,1735714.29;" + "seti@home,52333.33,367333.33;" + "srbase,89666.67,896666.67;" + "sztaki desktop grid,8320,41666.67;" + "theskynet pogs,45500,409333.33;" + "tn-grid,39500,514666.67;" + "universe@home,47833.33,335333.33;" + "vgtu project@home,20666.67,124000;" + "world community grid,29166.67,263333.33;" + "yafu,93000,838666.67;" + "yoyo@home,7040,56333.33;" + "NeuralNetwork,2000000,20000000;" + ""; + + BOOST_CHECK_EQUAL(GetQuorumHash(contract), "0f099cab261bb562ff553f3b9c7bf942"); +} + +BOOST_AUTO_TEST_CASE(gridcoin_QuorumHashShouldBeCorrectAfterPackingAndUnpackingBinarySuperblock) +{ + const std::string contract(superblock_txt, superblock_txt + superblock_txt_len); + const std::string packed = PackBinarySuperblock(contract); + const std::string unpacked = UnpackBinarySuperblock(packed); + //BOOST_CHECK_EQUAL(unpacked, contract); + BOOST_CHECK_EQUAL(GetQuorumHash(contract), GetQuorumHash(unpacked)); +} + +BOOST_AUTO_TEST_CASE(gridcoin_ValidatePackBinarySuperblock) +{ + const std::string contract(superblock_txt, superblock_txt + superblock_txt_len); + const std::string expected(superblock_packed_bin, superblock_packed_bin + superblock_packed_bin_len); + BOOST_CHECK_EQUAL(PackBinarySuperblock(contract), expected); +} + +BOOST_AUTO_TEST_CASE(gridcoin_ValidateUnpackBinarySuperblock) +{ + const std::string packed(superblock_packed_bin, superblock_packed_bin + superblock_packed_bin_len); + const std::string expected(superblock_unpacked_txt, superblock_unpacked_txt + superblock_unpacked_txt_len); + BOOST_CHECK_EQUAL(UnpackBinarySuperblock(packed), expected); +} + +// ----------------------------------------------------------------------------- +// Superblock +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(Superblock) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_empty_superblock) +{ + NN::Superblock superblock; + + BOOST_CHECK(superblock.m_version == NN::Superblock::CURRENT_VERSION); + + BOOST_CHECK(superblock.m_cpids.empty() == true); + BOOST_CHECK(superblock.m_cpids.TotalMagnitude() == 0); + BOOST_CHECK(superblock.m_cpids.AverageMagnitude() == 0); + + BOOST_CHECK(superblock.m_projects.empty() == true); + BOOST_CHECK(superblock.m_projects.TotalRac() == 0); + BOOST_CHECK(superblock.m_projects.AverageRac() == 0); + + BOOST_CHECK(superblock.m_height == 0); + BOOST_CHECK(superblock.m_timestamp == 0); +} + +BOOST_AUTO_TEST_CASE(it_initializes_to_the_specified_version) +{ + NN::Superblock superblock(1); + + BOOST_CHECK(superblock.m_version == 1); + + BOOST_CHECK(superblock.m_cpids.empty() == true); + BOOST_CHECK(superblock.m_cpids.TotalMagnitude() == 0); + BOOST_CHECK(superblock.m_cpids.AverageMagnitude() == 0); + + BOOST_CHECK(superblock.m_projects.empty() == true); + BOOST_CHECK(superblock.m_projects.TotalRac() == 0); + BOOST_CHECK(superblock.m_projects.AverageRac() == 0); + + BOOST_CHECK(superblock.m_height == 0); + BOOST_CHECK(superblock.m_timestamp == 0); +} + +BOOST_AUTO_TEST_CASE(it_initializes_from_a_provided_set_of_scraper_statistics) +{ + NN::Superblock superblock = NN::Superblock::FromStats(GetTestScraperStats()); + + auto& cpids = superblock.m_cpids; + BOOST_CHECK(cpids.size() == 2); + BOOST_CHECK(cpids.TotalMagnitude() == 10016); + BOOST_CHECK(cpids.AverageMagnitude() == 5008); + BOOST_CHECK(cpids.At(0)->first.ToString() == "00010203040506070809101112131415"); + BOOST_CHECK(cpids.At(0)->second == 4008); + BOOST_CHECK(cpids.At(1)->first.ToString() == "15141312111009080706050403020100"); + BOOST_CHECK(cpids.At(1)->second == 6008); + + auto& projects = superblock.m_projects; + BOOST_CHECK(projects.size() == 2); + BOOST_CHECK(projects.TotalRac() == 410); + BOOST_CHECK(projects.AverageRac() == 205.0); + + if (const auto project_1 = projects.Try("project_1")) { + BOOST_CHECK(project_1->m_average_rac == 102); + BOOST_CHECK(project_1->m_rac == 203); + } else { + BOOST_FAIL("Project 1 not found in superblock."); + } + + if (const auto project_2 = projects.Try("project_2")) { + BOOST_CHECK(project_2->m_average_rac == 104); + BOOST_CHECK(project_2->m_rac == 207); + } else { + BOOST_FAIL("Project 2 not found in superblock."); + } +} + +BOOST_AUTO_TEST_CASE(it_initializes_by_unpacking_a_legacy_binary_contract) +{ + std::string cpid1 = "00000000000000000000000000000000"; + std::string cpid2 = "00010203040506070809101112131415"; + std::string cpid3 = "15141312111009080706050403020100"; + + NN::Superblock superblock = NN::Superblock::UnpackLegacy( + Legacy::PackBinarySuperblock( + "" + + cpid1 + ",0;" // Include valid CPID with zero mag + + cpid2 + ",100;" // Include valid CPID with non-zero mag + + cpid3 + ",200;" // Include valid CPID with non-zero mag + "15,0;" // Add placeholder to zero-mag CPID count + "15,0;" // Add placeholder to zero-mag CPID count + "invalid,123;" // Add invalid CPID to zero-mag CPID count + "invalid,;" // Add missing mag to zero-mag CPID count + ",123;" // Add missing CPID to zero-mag CPID count + ";" // Drop empty record + "" + "" + "project_1,123,456;" + "project_2,234,567;" + "NeuralNetwork,1000,2000;" + "" + "btc,0;grc,0;" + ) + ); + + // Legacy string-packed superblocks unpack to version 1: + BOOST_CHECK(superblock.m_version == 1); + + BOOST_CHECK(superblock.m_cpids.size() == 3); + BOOST_CHECK(superblock.m_cpids.Zeros() == 5); + BOOST_CHECK(superblock.m_cpids.At(0)->first.ToString() == cpid1); + BOOST_CHECK(superblock.m_cpids.At(0)->second == 0); + BOOST_CHECK(superblock.m_cpids.At(1)->first.ToString() == cpid2); + BOOST_CHECK(superblock.m_cpids.At(1)->second == 100); + BOOST_CHECK(superblock.m_cpids.At(2)->first.ToString() == cpid3); + BOOST_CHECK(superblock.m_cpids.At(2)->second == 200); + + BOOST_CHECK(superblock.m_projects.size() == 2); + BOOST_CHECK(superblock.m_projects.TotalRac() == 1023); + BOOST_CHECK(superblock.m_projects.AverageRac() == 511.5); + + if (const auto project_1 = superblock.m_projects.Try("project_1")) { + BOOST_CHECK(project_1->m_average_rac == 123); + BOOST_CHECK(project_1->m_rac == 456); + } else { + BOOST_FAIL("Project 1 not found in superblock."); + } + + if (const auto project_2 = superblock.m_projects.Try("project_2")) { + BOOST_CHECK(project_2->m_average_rac == 234); + BOOST_CHECK(project_2->m_rac == 567); + } else { + BOOST_FAIL("Project 2 not found in superblock."); + } +} + +BOOST_AUTO_TEST_CASE(it_initializes_by_unpacking_a_legacy_text_contract) +{ + std::string cpid1 = "00000000000000000000000000000000"; + std::string cpid2 = "00010203040506070809101112131415"; + std::string cpid3 = "15141312111009080706050403020100"; + + NN::Superblock superblock = NN::Superblock::UnpackLegacy( + "" + + cpid1 + ",0;" // Include valid CPID with zero mag + + cpid2 + ",100;" // Include valid CPID with non-zero mag + + cpid3 + ",200;" // Include valid CPID with non-zero mag + "15,0;" // Drop placeholder + "15,0;" // Drop placeholder + "invalid,123;" // Drop invalid CPID + "invalid,;" // Drop missing mag + ",123;" // Drop missing CPID + ";" // Drop empty record + "" + "" + "project_1,123,456;" + "project_2,234,567;" + "NeuralNetwork,1000,2000;" + "" + "btc,0;grc,0;" + ); + + // Legacy string-packed superblocks unpack to version 1: + BOOST_CHECK(superblock.m_version == 1); + + BOOST_CHECK(superblock.m_cpids.size() == 3); + BOOST_CHECK(superblock.m_cpids.Zeros() == 0); + BOOST_CHECK(superblock.m_cpids.At(0)->first.ToString() == cpid1); + BOOST_CHECK(superblock.m_cpids.At(0)->second == 0); + BOOST_CHECK(superblock.m_cpids.At(1)->first.ToString() == cpid2); + BOOST_CHECK(superblock.m_cpids.At(1)->second == 100); + BOOST_CHECK(superblock.m_cpids.At(2)->first.ToString() == cpid3); + BOOST_CHECK(superblock.m_cpids.At(2)->second == 200); + + BOOST_CHECK(superblock.m_projects.size() == 2); + BOOST_CHECK(superblock.m_projects.TotalRac() == 1023); + BOOST_CHECK(superblock.m_projects.AverageRac() == 511.5); + + if (const auto project_1 = superblock.m_projects.Try("project_1")) { + BOOST_CHECK(project_1->m_average_rac == 123); + BOOST_CHECK(project_1->m_rac == 456); + } else { + BOOST_FAIL("Project 1 not found in superblock."); + } + + if (const auto project_2 = superblock.m_projects.Try("project_2")) { + BOOST_CHECK(project_2->m_average_rac == 234); + BOOST_CHECK(project_2->m_rac == 567); + } else { + BOOST_FAIL("Project 2 not found in superblock."); + } +} + +BOOST_AUTO_TEST_CASE(it_provides_backward_compatibility_for_legacy_contracts) +{ + const std::string legacy_contract( + superblock_txt, + superblock_txt + superblock_txt_len); + + const std::string legacy_packed = Legacy::PackBinarySuperblock(legacy_contract); + const std::string legacy_unpacked = Legacy::UnpackBinarySuperblock(legacy_packed); + const std::string expected_hash = Legacy::GetQuorumHash(legacy_contract); + + NN::Superblock superblock = NN::Superblock::UnpackLegacy(legacy_packed); + + BOOST_CHECK(superblock.m_version == 1); + BOOST_CHECK(NN::QuorumHash::Hash(superblock).ToString() == expected_hash); + + // Check the first few CPIDs: + auto& cpids = superblock.m_cpids; + BOOST_CHECK(cpids.size() == 1906); + BOOST_CHECK(cpids.At(0)->first.ToString() == "002a9d6f3832d0b0028606d907e09d97"); + BOOST_CHECK(cpids.At(0)->second == 1); + BOOST_CHECK(cpids.At(1)->first.ToString() == "002d383a19b63d698a3201793e7e3750"); + BOOST_CHECK(cpids.At(1)->second == 24); + + const std::string expected_packed( + superblock_packed_bin, + superblock_packed_bin + superblock_packed_bin_len); + + const std::string packed = superblock.PackLegacy(); + const std::string unpacked = Legacy::UnpackBinarySuperblock(packed); + + // Note: Superblock::PackLegacy is not guaranteed to pack a legacy contract + // exactly as passed to Superblock::UnpackLegacy even though this test data + // exists in a format that permits it to. The quorum hash must always match. + // + BOOST_CHECK(packed == expected_packed); + BOOST_CHECK(unpacked == legacy_unpacked); + BOOST_CHECK(Legacy::GetQuorumHash(unpacked) == expected_hash); +} + +BOOST_AUTO_TEST_CASE(it_calculates_its_age) +{ + NN::Superblock superblock; + + superblock.m_timestamp = GetAdjustedTime() - 1; + + BOOST_CHECK(superblock.Age() > 0); + BOOST_CHECK(superblock.Age() < GetAdjustedTime()); +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) +{ + std::vector expected { + 0x02, 0x00, 0x00, 0x00, // Version + 0x02, // CPIDs size + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // CPID 1 + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, // ... + 0xfd, 0xa8, 0x0f, // Magnitude + 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x09, 0x08, // CPID 2 + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, // ... + 0xfd, 0x78, 0x17, // Magnitude + 0x00, // Zero count (VARINT) + 0x02, // Projects size + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key + 0x5f, 0x31, // ... + 0x66, // Average RAC (VARINT) + 0x80, 0x4b, // Total RAC (VARINT) + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key + 0x5f, 0x32, // ... + 0x68, // Average RAC (VARINT) + 0x80, 0x4f, // Total RAC (VARINT) + }; + + NN::Superblock superblock = NN::Superblock::FromStats(GetTestScraperStats()); + + BOOST_CHECK(superblock.GetSerializeSize(SER_NETWORK, 1) == expected.size()); + + CDataStream stream(SER_NETWORK, 1); + stream << superblock; + std::vector output(stream.begin(), stream.end()); + + BOOST_CHECK(output == expected); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) +{ + std::vector bytes { + 0x02, 0x00, 0x00, 0x00, // Version + 0x02, // CPIDs size + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // CPID 1 + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, // ... + 0xfd, 0xa8, 0x0f, // Magnitude + 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x09, 0x08, // CPID 2 + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, // ... + 0xfd, 0x78, 0x17, // Magnitude + 0x00, // Zero count (VARINT) + 0x02, // Projects size + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key + 0x5f, 0x31, // ... + 0x66, // Average RAC (VARINT) + 0x80, 0x4b, // Total RAC (VARINT) + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key + 0x5f, 0x32, // ... + 0x68, // Average RAC (VARINT) + 0x80, 0x4f, // Total RAC (VARINT) + }; + + NN::Superblock superblock; + + CDataStream stream(bytes, SER_NETWORK, 1); + stream >> superblock; + + BOOST_CHECK(superblock.m_version == 2); + + const auto& cpids = superblock.m_cpids; + BOOST_CHECK(cpids.size() == 2); + BOOST_CHECK(cpids.Zeros() == 0); + BOOST_CHECK(cpids.TotalMagnitude() == 10016); + BOOST_CHECK(cpids.AverageMagnitude() == 5008.0); + BOOST_CHECK(cpids.At(0)->first.ToString() == "00010203040506070809101112131415"); + BOOST_CHECK(cpids.At(0)->second == 4008); + BOOST_CHECK(cpids.At(1)->first.ToString() == "15141312111009080706050403020100"); + BOOST_CHECK(cpids.At(1)->second == 6008); + + const auto& projects = superblock.m_projects; + BOOST_CHECK(projects.size() == 2); + BOOST_CHECK(projects.TotalRac() == 410); + BOOST_CHECK(projects.AverageRac() == 205.0); + + if (const auto project1 = projects.Try("project_1")) { + BOOST_CHECK(project1->m_average_rac == 102); + BOOST_CHECK(project1->m_rac == 203); + } else { + BOOST_FAIL("Project 1 not found in index."); + } + + if (const auto project2 = projects.Try("project_2")) { + BOOST_CHECK(project2->m_average_rac == 104); + BOOST_CHECK(project2->m_rac == 207); + } else { + BOOST_FAIL("Project 2 not found in index."); + } +} + +BOOST_AUTO_TEST_SUITE_END() + +// ----------------------------------------------------------------------------- +// Superblock::CpidIndex +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(Superblock__CpidIndex) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_empty_index) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.size() == 0); + BOOST_CHECK(cpids.Zeros() == 0); +} + +BOOST_AUTO_TEST_CASE(it_initializes_with_a_zero_magnitude_cpid_count) +{ + // Used to initialize the index for a legacy superblock: + NN::Superblock::CpidIndex cpids(123); + + BOOST_CHECK(cpids.size() == 0); + BOOST_CHECK(cpids.Zeros() == 123); +} + +BOOST_AUTO_TEST_CASE(it_adds_a_cpid_magnitude_to_the_index) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.size() == 0); + + cpids.Add(NN::Cpid(), 123); + + BOOST_CHECK(cpids.size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_ignores_insertion_of_a_duplicate_cpid) +{ + NN::Superblock::CpidIndex cpids; + NN::Cpid cpid = NN::Cpid::Parse("00010203040506070809101112131415"); + + cpids.Add(cpid, 123); + cpids.Add(cpid, 456); + + BOOST_CHECK(cpids.size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_fetches_a_cpid_pair_by_offset) +{ + NN::Superblock::CpidIndex cpids; + + NN::Cpid cpid1 = NN::Cpid::Parse("00010203040506070809101112131415"); + NN::Cpid cpid2 = NN::Cpid::Parse("15141312111009080706050403020100"); + + cpids.Add(cpid1, 123); + cpids.Add(cpid2, 456); + + BOOST_CHECK(cpids.At(0)->first == cpid1); + BOOST_CHECK(cpids.At(0)->second == 123); + BOOST_CHECK(cpids.At(1)->first == cpid2); + BOOST_CHECK(cpids.At(1)->second == 456); +} + +BOOST_AUTO_TEST_CASE(it_fetches_the_magnitude_of_a_specific_cpid) +{ + NN::Superblock::CpidIndex cpids; + NN::Cpid cpid = NN::Cpid::Parse("00010203040506070809101112131415"); + + cpids.Add(cpid, 123); + + BOOST_CHECK(cpids.MagnitudeOf(cpid) == 123); +} + +BOOST_AUTO_TEST_CASE(it_assumes_zero_magnitude_for_a_nonexistent_cpid) +{ + NN::Superblock::CpidIndex cpids; + NN::Cpid cpid = NN::Cpid::Parse("00010203040506070809101112131415"); + + BOOST_CHECK(cpids.MagnitudeOf(cpid) == 0); +} + +BOOST_AUTO_TEST_CASE(it_stores_cpids_in_lexicographical_order) +{ + // The order is important to ensure consistent ordering of CPID records in + // superblocks for consensus and to access CPIDs by offset. + + NN::Superblock::CpidIndex cpids; + + NN::Cpid cpid1 = NN::Cpid::Parse("99999999999999999999999999999999"); + NN::Cpid cpid2 = NN::Cpid::Parse("ffffffffffffffffffffffffffffffff"); + NN::Cpid cpid3 = NN::Cpid::Parse("00000000000000000000000000000000"); + + cpids.Add(cpid1, 123); + cpids.Add(cpid2, 456); + cpids.Add(cpid3, 789); + + BOOST_CHECK(cpids.At(0)->first == cpid3); + BOOST_CHECK(cpids.At(0)->second == 789); + BOOST_CHECK(cpids.At(1)->first == cpid1); + BOOST_CHECK(cpids.At(1)->second == 123); + BOOST_CHECK(cpids.At(2)->first == cpid2); + BOOST_CHECK(cpids.At(2)->second == 456); +} + +BOOST_AUTO_TEST_CASE(it_counts_the_number_of_active_cpids) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.size() == 0); + + cpids.Add(NN::Cpid(), 123); + + BOOST_CHECK(cpids.size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_determines_whether_it_contains_any_active_cpids) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.empty() == true); + + cpids.Add(NN::Cpid(), 123); + + BOOST_CHECK(cpids.empty() == false); +} + +BOOST_AUTO_TEST_CASE(it_tallies_the_number_of_zero_magnitude_cpids) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.Zeros() == 0); + + // Add only one zero-magnitude CPID: + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 0); + cpids.Add(NN::Cpid::Parse("15141312111009080706050403020100"), 123); + + BOOST_CHECK(cpids.Zeros() == 1); +} + +BOOST_AUTO_TEST_CASE(it_skips_tallying_zero_magnitudes_for_legacy_superblocks) +{ + // Legacy superblocks embed the number of zero-magnitude CPIDs in the + // contract, so we won't count them upon insertion if explicitly set. + + NN::Superblock::CpidIndex cpids(123); + + BOOST_CHECK(cpids.Zeros() == 123); + + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 0); + + BOOST_CHECK(cpids.Zeros() == 123); +} + +BOOST_AUTO_TEST_CASE(it_sums_the_count_of_both_active_and_zero_magnitude_cpids) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.TotalCount() == 0); + + // Add only one zero-magnitude CPID: + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 0); + cpids.Add(NN::Cpid::Parse("15141312111009080706050403020100"), 123); + + BOOST_CHECK(cpids.TotalCount() == 2); +} + +BOOST_AUTO_TEST_CASE(it_tallies_the_sum_of_the_magnitudes_of_active_cpids) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.TotalMagnitude() == 0); + + cpids.Add(NN::Cpid(), 0); + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 123); + cpids.Add(NN::Cpid::Parse("15141312111009080706050403020100"), 456); + + BOOST_CHECK(cpids.TotalMagnitude() == 579); +} + +BOOST_AUTO_TEST_CASE(it_skips_tallying_the_magnitudes_of_duplicate_cpids) +{ + NN::Superblock::CpidIndex cpids; + + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 123); + + BOOST_CHECK(cpids.TotalMagnitude() == 123); + + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 456); + + BOOST_CHECK(cpids.TotalMagnitude() == 123); +} + +BOOST_AUTO_TEST_CASE(it_calculates_the_average_magnitude_of_active_cpids) +{ + NN::Superblock::CpidIndex cpids; + + BOOST_CHECK(cpids.AverageMagnitude() == 0); + + cpids.Add(NN::Cpid(), 0); + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 123); + cpids.Add(NN::Cpid::Parse("15141312111009080706050403020100"), 456); + + BOOST_CHECK(cpids.AverageMagnitude() == 289.5); +} + +BOOST_AUTO_TEST_CASE(it_is_iterable) +{ + NN::Superblock::CpidIndex cpids; + + const NN::Cpid cpid1 = NN::Cpid::Parse("00010203040506070809101112131415"); + const NN::Cpid cpid2 = NN::Cpid::Parse("15141312111009080706050403020100"); + + cpids.Add(cpid1, 123); + cpids.Add(cpid2, 123); + + size_t counter = 0; + + for (auto const& cpid : cpids) { + BOOST_CHECK(cpid.first == cpid1 || cpid.first == cpid2); + counter++; + } + + BOOST_CHECK(counter == 2); +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) +{ + const std::vector expected { + 0x01, // Active CPID size + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // CPID + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, // ... + 0x7b, // Magnitude (123) + 0x01, // Zero count (VARINT) + }; + + NN::Superblock::CpidIndex cpids; + + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 123); + cpids.Add(NN::Cpid(), 0); + + BOOST_CHECK(cpids.GetSerializeSize(SER_NETWORK, 1) == expected.size()); + + CDataStream stream(SER_NETWORK, 1); + stream << cpids; + std::vector output(stream.begin(), stream.end()); + + BOOST_CHECK(output == expected); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) +{ + const std::vector bytes { + 0x01, // Active CPID size + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // CPID + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, // ... + 0x7b, // Magnitude (123) + 0x01, // Zero count (VARINT) + }; + + NN::Superblock::CpidIndex cpids; + + CDataStream stream(bytes, SER_NETWORK, 1); + stream >> cpids; + + const NN::Cpid cpid = NN::Cpid::Parse("00010203040506070809101112131415"); + + BOOST_CHECK(cpids.size() == 1); + BOOST_CHECK(cpids.Zeros() == 1); + BOOST_CHECK(cpids.At(0)->first == cpid); + BOOST_CHECK(cpids.MagnitudeOf(cpid) == 123); + BOOST_CHECK(cpids.TotalMagnitude() == 123); + BOOST_CHECK(cpids.AverageMagnitude() == 123); +} + +BOOST_AUTO_TEST_SUITE_END() + +// ----------------------------------------------------------------------------- +// Superblock::ProjectStats +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(Superblock__ProjectStats) + +BOOST_AUTO_TEST_CASE(it_initializes_to_a_zero_statistics_object) +{ + NN::Superblock::ProjectStats stats; + + BOOST_CHECK(stats.m_average_rac == 0); + BOOST_CHECK(stats.m_rac == 0); +} + +BOOST_AUTO_TEST_CASE(it_initializes_to_the_supplied_statistics) +{ + NN::Superblock::ProjectStats stats(123, 456); + + BOOST_CHECK(stats.m_average_rac == 123); + BOOST_CHECK(stats.m_rac == 456); +} + +BOOST_AUTO_TEST_SUITE_END() + +// ----------------------------------------------------------------------------- +// Superblock::ProjectIndex +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(Superblock__ProjectIndex) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_empty_index) +{ + NN::Superblock::ProjectIndex projects; + + BOOST_CHECK(projects.size() == 0); +} + +BOOST_AUTO_TEST_CASE(it_adds_a_project_statistics_entry_to_the_index) +{ + NN::Superblock::ProjectIndex projects; + + BOOST_CHECK(projects.size() == 0); + + projects.Add("project_name", NN::Superblock::ProjectStats()); + + BOOST_CHECK(projects.size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_ignores_insertion_of_a_duplicate_project) +{ + NN::Superblock::ProjectIndex projects; + + projects.Add("project_1", NN::Superblock::ProjectStats(123, 123)); + projects.Add("project_1", NN::Superblock::ProjectStats(456, 456)); + + BOOST_CHECK(projects.size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_ignores_insertion_of_a_project_with_an_empty_name) +{ + NN::Superblock::ProjectIndex projects; + + projects.Add("", NN::Superblock::ProjectStats(123, 123)); + + BOOST_CHECK(projects.size() == 0); +} + +BOOST_AUTO_TEST_CASE(it_fetches_the_statistics_of_a_specific_project) +{ + NN::Superblock::ProjectIndex projects; + + projects.Add("project_name", NN::Superblock::ProjectStats(123, 456)); + + if (const auto project = projects.Try("project_name")) { + BOOST_CHECK(project->m_average_rac == 123); + BOOST_CHECK(project->m_rac == 456); + } else { + BOOST_FAIL("Project not found in index."); + } +} + +BOOST_AUTO_TEST_CASE(it_stores_projects_in_lexicographical_order_by_name) +{ + // The order is important to ensure consistent ordering of project records + // in superblocks for consensus. + + NN::Superblock::ProjectIndex projects; + + projects.Add("project_3", NN::Superblock::ProjectStats(123, 123)); + projects.Add("project_1", NN::Superblock::ProjectStats(456, 456)); + projects.Add("project_2", NN::Superblock::ProjectStats(789, 789)); + + // The project index doesn't provide an offset accessor yet, so we'll + // check the order by looping: + size_t offset = 0; + for (const auto& project_pair : projects) { + switch (offset) { + case 0: + BOOST_CHECK(project_pair.first == "project_1"); + BOOST_CHECK(project_pair.second.m_rac == 456); + break; + case 1: + BOOST_CHECK(project_pair.first == "project_2"); + BOOST_CHECK(project_pair.second.m_rac == 789); + break; + case 2: + BOOST_CHECK(project_pair.first == "project_3"); + BOOST_CHECK(project_pair.second.m_rac == 123); + break; + default: + BOOST_FAIL("Unexpected project at offset."); + break; + } + + offset++; + } + + BOOST_CHECK(offset == projects.size()); +} + +BOOST_AUTO_TEST_CASE(it_counts_the_number_of_projects) +{ + NN::Superblock::ProjectIndex projects; + + BOOST_CHECK(projects.size() == 0); + + projects.Add("project_name", NN::Superblock::ProjectStats()); + + BOOST_CHECK(projects.size() == 1); +} + +BOOST_AUTO_TEST_CASE(it_determines_whether_it_contains_any_projects) +{ + NN::Superblock::ProjectIndex projects; + + BOOST_CHECK(projects.empty() == true); + + projects.Add("project_name", NN::Superblock::ProjectStats()); + + BOOST_CHECK(projects.empty() == false); +} + +BOOST_AUTO_TEST_CASE(it_tallies_the_sum_of_the_rac_for_all_projects) +{ + NN::Superblock::ProjectIndex projects; + + BOOST_CHECK(projects.TotalRac() == 0); + + projects.Add("project_1", NN::Superblock::ProjectStats(123, 123)); + projects.Add("project_2", NN::Superblock::ProjectStats(456, 456)); + projects.Add("project_3", NN::Superblock::ProjectStats(789, 789)); + + BOOST_CHECK(projects.TotalRac() == 1368); +} + +BOOST_AUTO_TEST_CASE(it_skips_tallying_the_rac_of_duplicate_projects) +{ + NN::Superblock::ProjectIndex projects; + + projects.Add("project_1", NN::Superblock::ProjectStats(123, 123)); + + BOOST_CHECK(projects.TotalRac() == 123); + + projects.Add("project_1", NN::Superblock::ProjectStats(456, 456)); + + BOOST_CHECK(projects.TotalRac() == 123); +} + +BOOST_AUTO_TEST_CASE(it_skips_tallying_the_rac_of_projects_with_empty_names) +{ + NN::Superblock::ProjectIndex projects; + + projects.Add("", NN::Superblock::ProjectStats(123, 123)); + + BOOST_CHECK(projects.TotalRac() == 0); +} + +BOOST_AUTO_TEST_CASE(it_calculates_the_average_rac_of_all_projects) +{ + NN::Superblock::ProjectIndex projects; + + BOOST_CHECK(projects.AverageRac() == 0); + + projects.Add("project_1", NN::Superblock::ProjectStats(123, 123)); + projects.Add("project_2", NN::Superblock::ProjectStats(456, 456)); + projects.Add("project_3", NN::Superblock::ProjectStats(789, 789)); + + BOOST_CHECK(projects.AverageRac() == 456.0); +} + +BOOST_AUTO_TEST_CASE(it_is_iterable) +{ + NN::Superblock::ProjectIndex projects; + + projects.Add("project_1", NN::Superblock::ProjectStats()); + projects.Add("project_2", NN::Superblock::ProjectStats()); + + size_t counter = 0; + + for (auto const& project : projects) { + BOOST_CHECK(boost::starts_with(project.first, "project_") == true); + counter++; + } + + BOOST_CHECK(counter == 2); +} + +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) +{ + const std::vector expected { + 0x02, // Projects size + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key + 0x5f, 0x31, // ... + 0x01, // Average RAC (VARINT) + 0x02, // Total RAC (VARINT) + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key + 0x5f, 0x32, // ... + 0x01, // Average RAC (VARINT) + 0x02, // Total RAC (VARINT) + }; + + NN::Superblock::ProjectIndex projects; + + projects.Add("project_1", NN::Superblock::ProjectStats(1, 2)); + projects.Add("project_2", NN::Superblock::ProjectStats(1, 2)); + + BOOST_CHECK(projects.GetSerializeSize(SER_NETWORK, 1) == expected.size()); + + CDataStream stream(SER_NETWORK, 1); + stream << projects; + std::vector output(stream.begin(), stream.end()); + + BOOST_CHECK(output == expected); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) +{ + const std::vector bytes { + 0x02, // Projects size + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key + 0x5f, 0x31, // ... + 0x01, // Average RAC (VARINT) + 0x02, // Total RAC (VARINT) + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key + 0x5f, 0x32, // ... + 0x01, // Average RAC (VARINT) + 0x02, // Total RAC (VARINT) + }; + + NN::Superblock::ProjectIndex projects; + + CDataStream stream(bytes, SER_NETWORK, 1); + stream >> projects; + + BOOST_CHECK(projects.size() == 2); + + if (const auto project1 = projects.Try("project_1")) { + BOOST_CHECK(project1->m_average_rac == 1); + BOOST_CHECK(project1->m_rac == 2); + } else { + BOOST_FAIL("Project 1 not found in index."); + } + + if (const auto project2 = projects.Try("project_2")) { + BOOST_CHECK(project2->m_average_rac == 1); + BOOST_CHECK(project2->m_rac == 2); + } else { + BOOST_FAIL("Project 2 not found in index."); + } + + BOOST_CHECK(projects.TotalRac() == 4); + BOOST_CHECK(projects.AverageRac() == 2); +} + +BOOST_AUTO_TEST_SUITE_END(); + +// ----------------------------------------------------------------------------- +// QuorumHash +// ----------------------------------------------------------------------------- + +BOOST_AUTO_TEST_SUITE(QuorumHash) + +BOOST_AUTO_TEST_CASE(it_initializes_to_an_invalid_hash) +{ + NN::QuorumHash hash; + + BOOST_CHECK(hash.Valid() == false); + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::INVALID); +} + +BOOST_AUTO_TEST_CASE(it_initializes_with_a_sha256_hash) +{ + NN::QuorumHash hash(uint256(0)); + + BOOST_CHECK(hash.Valid() == true); + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::SHA256); +} + +BOOST_AUTO_TEST_CASE(it_initializes_with_a_legacy_md5_hash) +{ + NN::QuorumHash hash(std::array { }); + + BOOST_CHECK(hash.Valid() == true); + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::MD5); +} + +BOOST_AUTO_TEST_CASE(it_hashes_a_superblock) +{ + NN::Superblock superblock; + + auto& cpids = superblock.m_cpids; + cpids.Add(NN::Cpid::Parse("00010203040506070809101112131415"), 1); + cpids.Add(NN::Cpid::Parse("15141312111009080706050403020100"), 1); + + auto& projects = superblock.m_projects; + projects.Add("project_1", NN::Superblock::ProjectStats(0, 0)); + projects.Add("project_2", NN::Superblock::ProjectStats(0, 0)); + + std::vector input { + 0x02, // CPIDs size + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // CPID 1 + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, // ... + 0x01, // Magnitude + 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x09, 0x08, // CPID 2 + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, // ... + 0x01, // Magnitude + 0x00, // Zero-mag count + 0x02, // Projects size + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key + 0x5f, 0x31, // ... + 0x00, // Average RAC + 0x00, // Total RAC + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key + 0x5f, 0x32, // ... + 0x00, // Average RAC + 0x00, // Total RAC + }; + + uint256 expected = Hash(input.begin(), input.end()); + NN::QuorumHash hash = NN::QuorumHash::Hash(superblock); + + BOOST_CHECK(hash.Valid() == true); + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::SHA256); + BOOST_CHECK(hash == expected); + BOOST_CHECK(hash.ToString() + == "3982613952361133c39baa28ec85cbe3cb35ec6f5bf4418538fae7f7420fd77c"); +} + +BOOST_AUTO_TEST_CASE(it_hashes_cpid_magnitudes_from_a_legacy_superblock) +{ + // Version 1 superblocks hash with the legacy MD5-based algorithm: + NN::Superblock superblock(1); + + std::string cpid1 = "00010203040506070809101112131415"; + std::string cpid2 = "15141312111009080706050403020100"; + + superblock.m_cpids.Add(NN::Cpid::Parse(cpid1), 100); + superblock.m_cpids.Add(NN::Cpid::Parse(cpid2), 200); + + NN::QuorumHash hash = NN::QuorumHash::Hash(superblock); + + BOOST_CHECK(hash.Valid() == true); + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::MD5); + BOOST_CHECK(hash.ToString() == "939715690b64b53edb2a79755eca4ae1"); + + BOOST_CHECK(hash.ToString() == Legacy::GetQuorumHash( + "" + + cpid1 + ",100;" + + cpid2 + ",200;" + "" + )); +} + +BOOST_AUTO_TEST_CASE(it_compares_another_quorum_hash_for_equality) +{ + NN::Superblock superblock; + NN::Superblock legacy_superblock(1); + + NN::QuorumHash invalid; + NN::QuorumHash sha256 = NN::QuorumHash::Hash(superblock); + NN::QuorumHash md5 = NN::QuorumHash::Hash(legacy_superblock); + + BOOST_CHECK(invalid == NN::QuorumHash()); + BOOST_CHECK(sha256 == NN::QuorumHash::Hash(superblock)); + BOOST_CHECK(md5 == NN::QuorumHash::Hash(legacy_superblock)); + + BOOST_CHECK(sha256 != invalid); + BOOST_CHECK(md5 != invalid); + BOOST_CHECK(sha256 != md5); +} + +BOOST_AUTO_TEST_CASE(it_compares_a_sha256_hash_for_equality) +{ + NN::Superblock superblock; + + // Hashed byte content of an empty superblock: + std::vector input { + 0x00, // CPIDs size + 0x00, // Zero-mag CPID count + 0x00, // Projects size + }; + + NN::QuorumHash hash = NN::QuorumHash::Hash(superblock); + uint256 expected = Hash(input.begin(), input.end()); + + BOOST_CHECK(hash == expected); + BOOST_CHECK(hash != uint256(0)); + BOOST_CHECK(NN::QuorumHash() != expected); +} + +BOOST_AUTO_TEST_CASE(it_compares_a_string_for_equality) +{ + NN::Superblock superblock; + NN::QuorumHash hash = NN::QuorumHash::Hash(superblock); + + BOOST_CHECK(hash == "27736f6456ba3805750faebf98bff6a5d0919230ede9bb70c29f0127f637e478"); + BOOST_CHECK(hash != "invalid"); + BOOST_CHECK(hash != ""); + + NN::Superblock legacy_superblock(1); + hash = NN::QuorumHash::Hash(legacy_superblock); + + BOOST_CHECK(hash == Legacy::GetQuorumHash("")); + BOOST_CHECK(hash != "invalid"); + BOOST_CHECK(hash != ""); + + hash = NN::QuorumHash(); // Invalid + + BOOST_CHECK(hash == ""); + BOOST_CHECK(hash != "27736f6456ba3805750faebf98bff6a5d0919230ede9bb70c29f0127f637e478"); + BOOST_CHECK(hash != Legacy::GetQuorumHash("")); +} + +BOOST_AUTO_TEST_CASE(it_represents_itself_as_a_string) +{ + NN::QuorumHash hash; + + BOOST_CHECK(hash.ToString() == ""); + + hash = NN::QuorumHash(uint256(0)); + + BOOST_CHECK(hash.ToString() + == "0000000000000000000000000000000000000000000000000000000000000000"); + + hash = NN::QuorumHash(NN::QuorumHash::Md5Sum { }); + + BOOST_CHECK(hash.ToString() == "00000000000000000000000000000000"); +} + +BOOST_AUTO_TEST_SUITE_END() From 05cd455d91c3da61ccd754ecd37390c97058be02 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 12 Jul 2019 15:45:36 -0500 Subject: [PATCH 085/115] Remove Compact class used for serialization experiments --- src/neuralnet/superblock.h | 136 ------------------------------------- 1 file changed, 136 deletions(-) diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index 78745109d3..7bad96a4ff 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -13,142 +13,6 @@ std::string UnpackBinarySuperblock(std::string block); std::string PackBinarySuperblock(std::string sBlock); namespace NN { - -// TODO: move this out into a common location...? -template -struct Compact -{ - Compact() : m_value(0) - { - } - - Compact(integer_t value) : m_value(value) - { - } - - integer_t m_value; - - // TODO: implement the other general-purpose operators... - - integer_t operator*() const - { - return m_value; - } - - bool operator<(Compact other) const - { - return m_value < other.m_value; - } - - bool operator<(integer_t other) const - { - return m_value < other; - } - - void operator=(integer_t value) - { - m_value = value; - } - - Compact& operator++() - { - m_value++; - - return *this; - } - - Compact operator++(int) - { - Compact original = *this; - ++*this; - - return original; - } - - unsigned int GetSerializeSize(int nType, int nVersion) const - { - if (m_value < 253) { - return sizeof(unsigned char); - } - - if (m_value <= std::numeric_limits::max()) { - return sizeof(unsigned char) + sizeof(unsigned short); - } - - if (m_value <= std::numeric_limits::max()) { - return sizeof(unsigned char) + sizeof(unsigned int); - } - - return sizeof(unsigned char) + sizeof(uint64_t); - } - - template - void Serialize(Stream& s, int nType, int nVersion) const - { - if (m_value < 253) { - unsigned char chSize = m_value; - WRITEDATA(s, chSize); - } else if (m_value <= std::numeric_limits::max()) { - unsigned char chSize = 253; - unsigned short xSize = m_value; - WRITEDATA(s, chSize); - WRITEDATA(s, xSize); - } else if (m_value <= std::numeric_limits::max()) { - unsigned char chSize = 254; - unsigned int xSize = m_value; - WRITEDATA(s, chSize); - WRITEDATA(s, xSize); - } else { - unsigned char chSize = 255; - uint64_t xSize = m_value; - WRITEDATA(s, chSize); - WRITEDATA(s, xSize); - } - } - - template - void Unserialize(Stream& s, int nType, int nVersion) - { - unsigned char chSize; - - // TODO: constrain max value to the size of the integer type in the - // template parameter. - uint64_t nSizeRet = 0; - - READDATA(s, chSize); - - if (chSize < 253) { - nSizeRet = chSize; - } else if (chSize == 253) { - unsigned short xSize; - READDATA(s, xSize); - nSizeRet = xSize; - - if (nSizeRet < 253) { - throw std::ios_base::failure("non-canonical Compact::Unserialize()"); - } - } else if (chSize == 254) { - unsigned int xSize; - READDATA(s, xSize); - nSizeRet = xSize; - - if (nSizeRet < 0x10000u) { - throw std::ios_base::failure("non-canonical Compact::Unserialize()"); - } - } else { - uint64_t xSize; - READDATA(s, xSize); - nSizeRet = xSize; - - if (nSizeRet < 0x100000000LLu) { - throw std::ios_base::failure("non-canonical Compact::Unserialize()"); - } - } - - m_value = nSizeRet; - } -}; - class QuorumHash; // Forward for Superblock //! From b09e21dc771ce0892aa2bd2a485f08a68b40d2c6 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Fri, 12 Jul 2019 17:11:37 -0500 Subject: [PATCH 086/115] Remove redundant magnitude bounds in Superblock::PackLegacy --- src/neuralnet/superblock.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index 1f9e571708..fe958c309d 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -393,9 +393,7 @@ std::string Superblock::PackLegacy() const << ""; for (const auto& cpid_pair : m_cpids) { - uint16_t mag = htobe16( - // Allowed magnitude range is 0 to 65535: - std::max(0, std::min(cpid_pair.second, 65535))); + uint16_t mag = htobe16(cpid_pair.second); out.write(reinterpret_cast(cpid_pair.first.Raw().data()), 16); out.write(reinterpret_cast(&mag), sizeof(uint16_t)); From d9481d2777af05d4b723ec1014c205bdab9154b3 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 14 Jul 2019 00:41:34 -0500 Subject: [PATCH 087/115] Switch superblock rounding from half-even to half-away-from-zero --- src/neuralnet/superblock.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index fe958c309d..95fb3059d0 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -350,14 +350,14 @@ Superblock Superblock::FromStats(const ScraperStats& stats) case statsobjecttype::byCPID: superblock.m_cpids.Add( Cpid::Parse(object_id), - std::nearbyint(entry.second.statsvalue.dMag)); + std::round(entry.second.statsvalue.dMag)); break; case statsobjecttype::byProject: superblock.m_projects.Add(object_id, ProjectStats( - std::nearbyint(entry.second.statsvalue.dAvgRAC), - std::nearbyint(entry.second.statsvalue.dRAC))); + std::round(entry.second.statsvalue.dAvgRAC), + std::round(entry.second.statsvalue.dRAC))); break; From 301a66ffff8edc5220bf849434be9e0c0990070a Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 14 Jul 2019 01:21:11 -0500 Subject: [PATCH 088/115] Add total credit to superblock project stats --- src/neuralnet/superblock.cpp | 20 ++++- src/neuralnet/superblock.h | 19 +++- src/test/neuralnet/superblock_tests.cpp | 113 +++++++++++++++++++----- 3 files changed, 125 insertions(+), 27 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index 95fb3059d0..3b2d736c12 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -356,6 +356,7 @@ Superblock Superblock::FromStats(const ScraperStats& stats) case statsobjecttype::byProject: superblock.m_projects.Add(object_id, ProjectStats( + std::round(entry.second.statsvalue.dTC), std::round(entry.second.statsvalue.dAvgRAC), std::round(entry.second.statsvalue.dRAC))); @@ -537,12 +538,27 @@ void Superblock::CpidIndex::Add(const MiningId id, const uint16_t magnitude) // Class: Superblock::ProjectStats // ----------------------------------------------------------------------------- -Superblock::ProjectStats::ProjectStats() : m_average_rac(0) , m_rac(0) +Superblock::ProjectStats::ProjectStats() + : m_total_credit(0) + , m_average_rac(0) + , m_rac(0) +{ +} + +Superblock::ProjectStats::ProjectStats( + uint64_t total_credit, + uint64_t average_rac, + uint64_t rac) + : m_total_credit(total_credit) + , m_average_rac(average_rac) + , m_rac(rac) { } Superblock::ProjectStats::ProjectStats(uint64_t average_rac, uint64_t rac) - : m_average_rac(average_rac), m_rac(rac) + : m_total_credit(0) + , m_average_rac(average_rac) + , m_rac(rac) { } diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index 7bad96a4ff..88659d70ec 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -301,16 +301,28 @@ class Superblock //! //! \brief Initialize an object with the provided statistics. //! + //! \param total_credit All-time credit produced by the project. + //! \param average_rac Average recent average credit of the project. + //! \param rac Sum of the RAC of all the project CPIDs. + //! + ProjectStats(uint64_t total_credit, uint64_t average_rac, uint64_t rac); + + //! + //! \brief Initialize an object with the provided statistics available + //! in a legacy superblock. + //! //! \param average_rac Average recent average credit of the project. //! \param rac Sum of the RAC of all the project CPIDs. //! ProjectStats(uint64_t average_rac, uint64_t rac); - uint64_t m_average_rac; //!< Average project recent average credit. - uint64_t m_rac; //!< Sum of the RAC of all the project CPIDs. + uint64_t m_total_credit; //!< All-time credit produced by the project. + uint64_t m_average_rac; //!< Average project recent average credit. + uint64_t m_rac; //!< Sum of the RAC of all the project CPIDs. IMPLEMENT_SERIALIZE ( + READWRITE(VARINT(m_total_credit)); READWRITE(VARINT(m_average_rac)); READWRITE(VARINT(m_rac)); ) @@ -437,7 +449,8 @@ class Superblock //! //! Version 2: Superblock data serializable using the built-in serialize.h //! facilities. Stored in the superblock field of a block rather than in a - //! transaction to provide for a greater size. + //! transaction to provide for a greater size. It includes total credit of + //! each project to facilitate automated greylisting. //! uint32_t m_version = CURRENT_VERSION; diff --git a/src/test/neuralnet/superblock_tests.cpp b/src/test/neuralnet/superblock_tests.cpp index 1854332462..cc07b90818 100644 --- a/src/test/neuralnet/superblock_tests.cpp +++ b/src/test/neuralnet/superblock_tests.cpp @@ -403,6 +403,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_from_a_provided_set_of_scraper_statistics) BOOST_CHECK(projects.AverageRac() == 205.0); if (const auto project_1 = projects.Try("project_1")) { + BOOST_CHECK(project_1->m_total_credit == 3000); BOOST_CHECK(project_1->m_average_rac == 102); BOOST_CHECK(project_1->m_rac == 203); } else { @@ -410,6 +411,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_from_a_provided_set_of_scraper_statistics) } if (const auto project_2 = projects.Try("project_2")) { + BOOST_CHECK(project_2->m_total_credit == 7000); BOOST_CHECK(project_2->m_average_rac == 104); BOOST_CHECK(project_2->m_rac == 207); } else { @@ -462,6 +464,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_by_unpacking_a_legacy_binary_contract) BOOST_CHECK(superblock.m_projects.AverageRac() == 511.5); if (const auto project_1 = superblock.m_projects.Try("project_1")) { + BOOST_CHECK(project_1->m_total_credit == 0); BOOST_CHECK(project_1->m_average_rac == 123); BOOST_CHECK(project_1->m_rac == 456); } else { @@ -469,6 +472,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_by_unpacking_a_legacy_binary_contract) } if (const auto project_2 = superblock.m_projects.Try("project_2")) { + BOOST_CHECK(project_2->m_total_credit == 0); BOOST_CHECK(project_2->m_average_rac == 234); BOOST_CHECK(project_2->m_rac == 567); } else { @@ -519,6 +523,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_by_unpacking_a_legacy_text_contract) BOOST_CHECK(superblock.m_projects.AverageRac() == 511.5); if (const auto project_1 = superblock.m_projects.Try("project_1")) { + BOOST_CHECK(project_1->m_total_credit == 0); BOOST_CHECK(project_1->m_average_rac == 123); BOOST_CHECK(project_1->m_rac == 456); } else { @@ -526,6 +531,7 @@ BOOST_AUTO_TEST_CASE(it_initializes_by_unpacking_a_legacy_text_contract) } if (const auto project_2 = superblock.m_projects.Try("project_2")) { + BOOST_CHECK(project_2->m_total_credit == 0); BOOST_CHECK(project_2->m_average_rac == 234); BOOST_CHECK(project_2->m_rac == 567); } else { @@ -597,10 +603,12 @@ BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) 0x02, // Projects size 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key 0x5f, 0x31, // ... + 0x96, 0x38, // Total credit (VARINT) 0x66, // Average RAC (VARINT) 0x80, 0x4b, // Total RAC (VARINT) 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key 0x5f, 0x32, // ... + 0xb5, 0x58, // Total credit (VARINT) 0x68, // Average RAC (VARINT) 0x80, 0x4f, // Total RAC (VARINT) }; @@ -631,10 +639,12 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) 0x02, // Projects size 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key 0x5f, 0x31, // ... + 0x96, 0x38, // Total credit (VARINT) 0x66, // Average RAC (VARINT) 0x80, 0x4b, // Total RAC (VARINT) 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key 0x5f, 0x32, // ... + 0xb5, 0x58, // Total credit (VARINT) 0x68, // Average RAC (VARINT) 0x80, 0x4f, // Total RAC (VARINT) }; @@ -662,6 +672,7 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) BOOST_CHECK(projects.AverageRac() == 205.0); if (const auto project1 = projects.Try("project_1")) { + BOOST_CHECK(project1->m_total_credit == 3000); BOOST_CHECK(project1->m_average_rac == 102); BOOST_CHECK(project1->m_rac == 203); } else { @@ -669,6 +680,7 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) } if (const auto project2 = projects.Try("project_2")) { + BOOST_CHECK(project2->m_total_credit == 7000); BOOST_CHECK(project2->m_average_rac == 104); BOOST_CHECK(project2->m_rac == 207); } else { @@ -962,18 +974,66 @@ BOOST_AUTO_TEST_CASE(it_initializes_to_a_zero_statistics_object) { NN::Superblock::ProjectStats stats; + BOOST_CHECK(stats.m_total_credit == 0); BOOST_CHECK(stats.m_average_rac == 0); BOOST_CHECK(stats.m_rac == 0); } BOOST_AUTO_TEST_CASE(it_initializes_to_the_supplied_statistics) +{ + NN::Superblock::ProjectStats stats(123, 456, 789); + + BOOST_CHECK(stats.m_total_credit == 123); + BOOST_CHECK(stats.m_average_rac == 456); + BOOST_CHECK(stats.m_rac == 789); +} + +BOOST_AUTO_TEST_CASE(it_initializes_to_supplied_legacy_superblock_statistics) { NN::Superblock::ProjectStats stats(123, 456); + BOOST_CHECK(stats.m_total_credit == 0); BOOST_CHECK(stats.m_average_rac == 123); BOOST_CHECK(stats.m_rac == 456); } +BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) +{ + const std::vector expected { + 0x01, // Total credit (VARINT) + 0x02, // Average RAC (VARINT) + 0x03, // Total RAC (VARINT) + }; + + NN::Superblock::ProjectStats project(1, 2, 3); + + BOOST_CHECK(project.GetSerializeSize(SER_NETWORK, 1) == expected.size()); + + CDataStream stream(SER_NETWORK, 1); + stream << project; + std::vector output(stream.begin(), stream.end()); + + BOOST_CHECK(output == expected); +} + +BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) +{ + const std::vector bytes { + 0x01, // Total credit (VARINT) + 0x02, // Average RAC (VARINT) + 0x03, // Total RAC (VARINT) + }; + + NN::Superblock::ProjectStats project; + + CDataStream stream(bytes, SER_NETWORK, 1); + stream >> project; + + BOOST_CHECK(project.m_total_credit == 1); + BOOST_CHECK(project.m_average_rac == 2); + BOOST_CHECK(project.m_rac == 3); +} + BOOST_AUTO_TEST_SUITE_END() // ----------------------------------------------------------------------------- @@ -1023,11 +1083,12 @@ BOOST_AUTO_TEST_CASE(it_fetches_the_statistics_of_a_specific_project) { NN::Superblock::ProjectIndex projects; - projects.Add("project_name", NN::Superblock::ProjectStats(123, 456)); + projects.Add("project_name", NN::Superblock::ProjectStats(123, 456, 789)); if (const auto project = projects.Try("project_name")) { - BOOST_CHECK(project->m_average_rac == 123); - BOOST_CHECK(project->m_rac == 456); + BOOST_CHECK(project->m_total_credit == 123); + BOOST_CHECK(project->m_average_rac == 456); + BOOST_CHECK(project->m_rac == 789); } else { BOOST_FAIL("Project not found in index."); } @@ -1165,18 +1226,20 @@ BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream) 0x02, // Projects size 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key 0x5f, 0x31, // ... - 0x01, // Average RAC (VARINT) - 0x02, // Total RAC (VARINT) + 0x01, // Total credit (VARINT) + 0x02, // Average RAC (VARINT) + 0x03, // Total RAC (VARINT) 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key 0x5f, 0x32, // ... - 0x01, // Average RAC (VARINT) - 0x02, // Total RAC (VARINT) + 0x01, // Total credit (VARINT) + 0x02, // Average RAC (VARINT) + 0x03, // Total RAC (VARINT) }; NN::Superblock::ProjectIndex projects; - projects.Add("project_1", NN::Superblock::ProjectStats(1, 2)); - projects.Add("project_2", NN::Superblock::ProjectStats(1, 2)); + projects.Add("project_1", NN::Superblock::ProjectStats(1, 2, 3)); + projects.Add("project_2", NN::Superblock::ProjectStats(1, 2, 3)); BOOST_CHECK(projects.GetSerializeSize(SER_NETWORK, 1) == expected.size()); @@ -1193,12 +1256,14 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) 0x02, // Projects size 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key 0x5f, 0x31, // ... - 0x01, // Average RAC (VARINT) - 0x02, // Total RAC (VARINT) + 0x01, // Total credit (VARINT) + 0x02, // Average RAC (VARINT) + 0x03, // Total RAC (VARINT) 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key 0x5f, 0x32, // ... - 0x01, // Average RAC (VARINT) - 0x02, // Total RAC (VARINT) + 0x01, // Total credit (VARINT) + 0x02, // Average RAC (VARINT) + 0x03, // Total RAC (VARINT) }; NN::Superblock::ProjectIndex projects; @@ -1209,21 +1274,23 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream) BOOST_CHECK(projects.size() == 2); if (const auto project1 = projects.Try("project_1")) { - BOOST_CHECK(project1->m_average_rac == 1); - BOOST_CHECK(project1->m_rac == 2); + BOOST_CHECK(project1->m_total_credit == 1); + BOOST_CHECK(project1->m_average_rac == 2); + BOOST_CHECK(project1->m_rac == 3); } else { BOOST_FAIL("Project 1 not found in index."); } if (const auto project2 = projects.Try("project_2")) { - BOOST_CHECK(project2->m_average_rac == 1); - BOOST_CHECK(project2->m_rac == 2); + BOOST_CHECK(project2->m_total_credit == 1); + BOOST_CHECK(project2->m_average_rac == 2); + BOOST_CHECK(project2->m_rac == 3); } else { BOOST_FAIL("Project 2 not found in index."); } - BOOST_CHECK(projects.TotalRac() == 4); - BOOST_CHECK(projects.AverageRac() == 2); + BOOST_CHECK(projects.TotalRac() == 6); + BOOST_CHECK(projects.AverageRac() == 3); } BOOST_AUTO_TEST_SUITE_END(); @@ -1267,8 +1334,8 @@ BOOST_AUTO_TEST_CASE(it_hashes_a_superblock) cpids.Add(NN::Cpid::Parse("15141312111009080706050403020100"), 1); auto& projects = superblock.m_projects; - projects.Add("project_1", NN::Superblock::ProjectStats(0, 0)); - projects.Add("project_2", NN::Superblock::ProjectStats(0, 0)); + projects.Add("project_1", NN::Superblock::ProjectStats(0, 0, 0)); + projects.Add("project_2", NN::Superblock::ProjectStats(0, 0, 0)); std::vector input { 0x02, // CPIDs size @@ -1282,10 +1349,12 @@ BOOST_AUTO_TEST_CASE(it_hashes_a_superblock) 0x02, // Projects size 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_1" key 0x5f, 0x31, // ... + 0x00, // Total credit 0x00, // Average RAC 0x00, // Total RAC 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, // "project_2" key 0x5f, 0x32, // ... + 0x00, // Total credit 0x00, // Average RAC 0x00, // Total RAC }; @@ -1297,7 +1366,7 @@ BOOST_AUTO_TEST_CASE(it_hashes_a_superblock) BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::SHA256); BOOST_CHECK(hash == expected); BOOST_CHECK(hash.ToString() - == "3982613952361133c39baa28ec85cbe3cb35ec6f5bf4418538fae7f7420fd77c"); + == "99b20dca6d76a3ab1b704925535ec08a9d46fbf95ca3036396b628e23db00156"); } BOOST_AUTO_TEST_CASE(it_hashes_cpid_magnitudes_from_a_legacy_superblock) From 24fd0158adcbed568f7afc0a9be0987506f8a895 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 14 Jul 2019 02:03:15 -0500 Subject: [PATCH 089/115] Update testnewsb RPC method --- src/scraper/scraper.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index cf8cf9680b..0af1530bf3 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4694,7 +4694,7 @@ UniValue testnewsb(const UniValue& params, bool fHelp) res.pushKV("NewFormatSuperblock serialization", "FAILED"); } - NewFormatSuperblock = NN::Superblock::UnpackLegacy(sSBCoreData_out); + NewFormatSuperblock = NN::Superblock::UnpackLegacy(sPackedSBCoreData); NN::QuorumHash new_legacy_hash = NN::QuorumHash::Hash(NewFormatSuperblock); std::string old_legacy_hash = GetQuorumHash(sSBCoreData_out); @@ -4709,5 +4709,7 @@ UniValue testnewsb(const UniValue& params, bool fHelp) res.pushKV("NewFormatSuperblock legacy hash", "FAILED"); } + _log(logattribute::INFO, "testnewsb", "NewFormatSuperblock legacy unpack number of zero mags = " + std::to_string(NewFormatSuperblock.m_cpids.Zeros())); + return res; } From 199dfedae652b83f090ecf6c1e677277219c3460 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 15 Jul 2019 00:06:48 -0400 Subject: [PATCH 090/115] Initial pass at wiring up new Superblock class This implements NN functions callable by the ProcessMessage in main and also implements necessary scraper functions as well as extending the ConvergedScraperStats struct for the new Superblock class. --- src/neuralnet/neuralnet.h | 21 ++++ src/neuralnet/neuralnet_native.cpp | 14 +++ src/neuralnet/neuralnet_native.h | 2 + src/neuralnet/neuralnet_stub.cpp | 16 +++ src/neuralnet/neuralnet_stub.h | 2 + src/neuralnet/superblock.h | 32 +++++ src/qt/clientmodel.h | 1 + src/scraper/fwd.h | 14 --- src/scraper/scraper.cpp | 190 ++++++++++++++++++++++++++--- src/scraper/scraper.h | 3 + src/scraper_net.cpp | 1 + src/ui_interface.h | 1 + 12 files changed, 269 insertions(+), 28 deletions(-) diff --git a/src/neuralnet/neuralnet.h b/src/neuralnet/neuralnet.h index 2ea182f22e..e0f1d35ac8 100644 --- a/src/neuralnet/neuralnet.h +++ b/src/neuralnet/neuralnet.h @@ -2,6 +2,7 @@ #include "beacon.h" #include "project.h" +#include "superblock.h" #include #include @@ -52,6 +53,16 @@ namespace NN //! virtual std::string GetNeuralHash() = 0; + //! + //! \brief Get current superblock hash from scraper. + //! + //! \note This is a synchoronous operation. + //! + //! \return Current superblock hash. This might be empty if it has + //! not been calculated yet. + //! + virtual NN::QuorumHash GetSuperblockHash() = 0; + //! //! \brief Get the most recently updated neural network contract. //! @@ -62,6 +73,16 @@ namespace NN //! virtual std::string GetNeuralContract() = 0; + //! + //! \brief Get the most recently updated superblock contract. + //! + //! Synchronously queries the scraper for the current + //! superblock contract. + //! + //! \return Most recent superblock contract if available. + //! + virtual NN::Superblock GetSuperblockContract() = 0; + //! //! \brief Synchronize DPOR data. //! diff --git a/src/neuralnet/neuralnet_native.cpp b/src/neuralnet/neuralnet_native.cpp index 06322dd531..5e15ce1d0b 100644 --- a/src/neuralnet/neuralnet_native.cpp +++ b/src/neuralnet/neuralnet_native.cpp @@ -12,6 +12,9 @@ extern std::string ExplainMagnitude(std::string sCPID); using namespace NN; +extern Superblock ScraperGetSuperblockContract(bool bStoreConvergedStats = false, bool bContractDirectFromStatsUpdate = false); +extern QuorumHash ScraperGetSuperblockHash(); + bool NeuralNetNative::IsEnabled() { return GetArgument("disableneuralnetwork", "false") == "false"; @@ -29,11 +32,21 @@ std::string NeuralNetNative::GetNeuralHash() return ScraperGetNeuralHash(); } +QuorumHash NeuralNetNative::GetSuperblockHash() +{ + return ScraperGetSuperblockHash(); +} + std::string NeuralNetNative::GetNeuralContract() { return ScraperGetNeuralContract(false, false); } +Superblock NeuralNetNative::GetSuperblockContract() +{ + return ScraperGetSuperblockContract(false, false); +} + // Note that the data argument is still used here for compatibility, but I don't think it will // actually be used in the scraper. We will see. bool NeuralNetNative::SynchronizeDPOR(const BeaconConsensus& beacons) @@ -50,5 +63,6 @@ int64_t NeuralNetNative::IsNeuralNet() { // This is the NN version number. TODO: Consider different number for new NN? int64_t nNeuralNetVersion = 1999; + return nNeuralNetVersion; } diff --git a/src/neuralnet/neuralnet_native.h b/src/neuralnet/neuralnet_native.h index fe833b24e3..a5784d4e52 100644 --- a/src/neuralnet/neuralnet_native.h +++ b/src/neuralnet/neuralnet_native.h @@ -16,7 +16,9 @@ namespace NN bool IsEnabled(); std::string GetNeuralVersion(); std::string GetNeuralHash(); + NN::QuorumHash GetSuperblockHash(); std::string GetNeuralContract(); + NN::Superblock GetSuperblockContract(); bool SynchronizeDPOR(const BeaconConsensus& beacons); std::string ExplainMagnitude(const std::string& cpid); int64_t IsNeuralNet(); diff --git a/src/neuralnet/neuralnet_stub.cpp b/src/neuralnet/neuralnet_stub.cpp index ff0a0b8c22..c66c7f5f71 100644 --- a/src/neuralnet/neuralnet_stub.cpp +++ b/src/neuralnet/neuralnet_stub.cpp @@ -19,11 +19,27 @@ std::string NeuralNetStub::GetNeuralHash() return std::string(); } +NN::QuorumHash NeuralNetStub::GetSuperblockHash() +{ + NN::QuorumHash EmptyQuorumHash; + + //Initialize a purposefully empty (invalid) hash. + return EmptyQuorumHash; +} + std::string NeuralNetStub::GetNeuralContract() { return std::string(); } +NN::Superblock NeuralNetStub::GetSuperblockContract() +{ + NN::Superblock EmptySuperblock; + + return EmptySuperblock; +} + + bool NeuralNetStub::SynchronizeDPOR(const BeaconConsensus& beacons) { return false; diff --git a/src/neuralnet/neuralnet_stub.h b/src/neuralnet/neuralnet_stub.h index edc2df2601..c84555fc1d 100644 --- a/src/neuralnet/neuralnet_stub.h +++ b/src/neuralnet/neuralnet_stub.h @@ -16,7 +16,9 @@ namespace NN bool IsEnabled(); std::string GetNeuralVersion(); std::string GetNeuralHash(); + NN::QuorumHash GetSuperblockHash(); std::string GetNeuralContract(); + NN::Superblock GetSuperblockContract(); bool SynchronizeDPOR(const BeaconConsensus& beacons); std::string ExplainMagnitude(const std::string& data); int64_t IsNeuralNet(); diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index 88659d70ec..74130c1f93 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -626,3 +626,35 @@ class QuorumHash boost::variant m_hash; }; // QuorumHash } + + + +// This is part of the scraper but is put here, because it needs the complete NN:Superblock class. +struct ConvergedScraperStats +{ + // Flag to indicate cache is clean or dirty (i.e. state change of underlying statistics has occurred. + // This flag is marked true in ScraperGetNeuralContract and false on receipt or deletion of statistics objects. + bool bClean = false; + + int64_t nTime; + ScraperStats mScraperConvergedStats; + ConvergedManifest Convergence; + + // Legacy superblock contract and hash. + std::string sContractHash; + std::string sContract; + + // New superblock object and hash. + NN::Superblock NewFormatSuperblock; + NN::QuorumHash nNewFormatSuperblockHash; + + uint32_t GetVersion() + { + uint32_t nVersion = 0; + + if (sContractHash.empty() && sContract.empty()) nVersion = NewFormatSuperblock.m_version; + + return nVersion; + } + +}; diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index ada5377e19..3951a6b76c 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -3,6 +3,7 @@ #include #include "scraper/fwd.h" +#include "neuralnet/superblock.h" class OptionsModel; class AddressTableModel; diff --git a/src/scraper/fwd.h b/src/scraper/fwd.h index f2147fef67..fe012c4e7d 100644 --- a/src/scraper/fwd.h +++ b/src/scraper/fwd.h @@ -7,7 +7,6 @@ #include "util.h" - /********************* * Scraper ENUMS * *********************/ @@ -116,17 +115,6 @@ struct ScraperObjectStatsKeyComp typedef std::map ScraperStats; -struct ConvergedScraperStats -{ - bool bClean = false; - int64_t nTime; - ScraperStats mScraperConvergedStats; - std::string sContractHash; - std::string sContract; - - ConvergedManifest Convergence; -}; - // Extended AppCache structures similar to those in AppCache.h, except a deleted flag is provided struct AppCacheEntryExt { @@ -137,6 +125,4 @@ struct AppCacheEntryExt typedef std::unordered_map AppCacheSectionExt; - - #endif // FWD_H diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 0af1530bf3..150604f07d 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -127,6 +127,7 @@ bool ScraperConstructConvergedManifestByProject(const NN::WhitelistSnapshot& pro std::string GenerateSBCoreDataFromScraperStats(ScraperStats& mScraperStats); // Overloaded. See alternative in scraper.h. std::string ScraperGetNeuralHash(std::string sNeuralContract); +NN::QuorumHash ScraperGetSuperblockHash(NN::Superblock& superblock); bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist); bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist); @@ -4459,42 +4460,203 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi return sSBCoreData; } +// This is for SB version 2+ (bv11+). +NN::Superblock ScraperGetSuperblockContract(bool bStoreConvergedStats, bool bContractDirectFromStatsUpdate) +{ + NN::Superblock empty_superblock; + + // NOTE - OutOfSyncByAge calls PreviousBlockAge(), which takes a lock on cs_main. This is likely a deadlock culprit if called from here + // and the scraper or neuralnet loop nearly simultaneously. So we use an atomic flag updated by the scraper or neuralnet loop. + // If not in sync then immediately bail with a empty string. + if (fOutOfSyncByAge) return empty_superblock; + + // Check the age of the ConvergedScraperStats cache. If less than nScraperSleep / 1000 old (for seconds), then simply report back the cache contents. + // This prevents the relatively heavyweight stats computations from running too often. The time here may not exactly align with + // the scraper loop if it is running, but that is ok. The scraper loop updates the time in the cache too. + bool bConvergenceUpdateNeeded = true; + { + LOCK(cs_ConvergedScraperStatsCache); + if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + + // If the cache is less than nScraperSleep in minutes old OR not dirty... + if (GetAdjustedTime() - ConvergedScraperStatsCache.nTime < (nScraperSleep / 1000) || ConvergedScraperStatsCache.bClean) + bConvergenceUpdateNeeded = false; + + // End LOCK(cs_ConvergedScraperStatsCache) + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + } + + ConvergedManifest StructConvergedManifest; + BeaconMap mBeaconMap; + NN::Superblock superblock; + + // if bConvergenceUpdate is needed, and... + // If bContractDirectFromStatsUpdate is set to true, this means that this is being called from + // ScraperSynchronizeDPOR() in fallback mode to force a single shot update of the stats files and + // direct generation of the contract from the single shot run. This will return immediately with a blank if + // IsScraperAuthorized() evaluates to false, because that means that by network policy, no non-scraper + // stats downloads are allowed by unauthorized scraper nodes. + // (If bConvergenceUpdate is not needed, then the scraper is operating by convergence already... + if (bConvergenceUpdateNeeded) + { + if (!bContractDirectFromStatsUpdate) + { + // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then + // you can't make a SB core and you can't make a contract, so return the empty string. + if (ScraperConstructConvergedManifest(StructConvergedManifest)) + { + // This is to display the element count in the beacon map. + LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); + + ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); + + _log(logattribute::INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); + + if (bStoreConvergedStats) + { + if (!StoreStats(pathScraper / "ConvergedStats.csv.gz", mScraperConvergedStats)) + _log(logattribute::ERR, "ScraperGetNeuralContract", "StoreStats error occurred"); + else + _log(logattribute::INFO, "ScraperGetNeuralContract", "Stored converged stats."); + } + + // I know this involves a copy operation, but it minimizes the lock time on the cache... we may want to + // lock before and do a direct assignment, but that will lock the cache for the whole stats computation, + // which is not really necessary. + { + LOCK(cs_ConvergedScraperStatsCache); + if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + + NN::Superblock superblock_Prev = ConvergedScraperStatsCache.NewFormatSuperblock; + + superblock.FromStats(mScraperConvergedStats); + + ConvergedScraperStatsCache.mScraperConvergedStats = mScraperConvergedStats; + ConvergedScraperStatsCache.nTime = GetAdjustedTime(); + ConvergedScraperStatsCache.nNewFormatSuperblockHash = ScraperGetSuperblockHash(superblock); + ConvergedScraperStatsCache.NewFormatSuperblock = superblock; + ConvergedScraperStatsCache.Convergence = StructConvergedManifest; + + // Mark the cache clean, because it was just updated. + ConvergedScraperStatsCache.bClean = true; + + // Signal UI of SBContract status + if (superblock.GetSerializeSize(SER_NETWORK, 1)) + { + if (superblock_Prev.GetSerializeSize(SER_NETWORK, 1)) + { + // If the current is not empty and the previous is not empty and not the same, then there is an updated contract. + if (ScraperGetSuperblockHash(superblock) != ScraperGetSuperblockHash(superblock_Prev)) + uiInterface.NotifyScraperEvent(scrapereventtypes::SBContract, CT_UPDATED, {}); + } + else + // If the previous was empty and the current is not empty, then there is a new contract. + uiInterface.NotifyScraperEvent(scrapereventtypes::SBContract, CT_NEW, {}); + } + else + if (superblock_Prev.GetSerializeSize(SER_NETWORK, 1)) + // If the current is empty and the previous was not empty, then the contract has been deleted. + uiInterface.NotifyScraperEvent(scrapereventtypes::SBContract, CT_DELETED, {}); + + // End LOCK(cs_ConvergedScraperStatsCache) + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + } + + + _log(logattribute::INFO, "ScraperGetNeuralContract", "Superblock object generated from convergence"); + + return superblock; + } + else + return empty_superblock; + } + // If bContractDirectFromStatsUpdate is true, then this is the single shot pass. + else if (IsScraperAuthorized()) + { + // This part is the "second trip through from ScraperSynchronizeDPOR() as a fallback, if + // authorized. + + // Do a single shot through the main scraper function to update all of the files. + ScraperSingleShot(); + + // Notice there is NO update to the ConvergedScraperStatsCache here, as that is not + // appropriate for the single shot. + ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); + superblock.FromStats(mScraperStats); + + // Signal the UI there is a contract. + if(superblock.GetSerializeSize(SER_NETWORK, 1)) + uiInterface.NotifyScraperEvent(scrapereventtypes::SBContract, CT_NEW, {}); + + _log(logattribute::INFO, "ScraperGetNeuralContract", "Superblock object generated from single shot"); + + return superblock; + } + } + else + { + // If we are here, we are using cached information. + + LOCK(cs_ConvergedScraperStatsCache); + if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_ConvergedScraperStatsCache"); + + superblock = ConvergedScraperStatsCache.NewFormatSuperblock; + + // Signal the UI of the "updated" contract. This needs to be sent because the scraper loop could + // have changed the state to something else, even though an update to the contract really hasn't happened, + // because it is cached. + uiInterface.NotifyScraperEvent(scrapereventtypes::SBContract, CT_UPDATED, {}); + + _log(logattribute::INFO, "ScraperGetNeuralContract", "Superblock object from cached converged stats"); -// Note: This is simply a wrapper around GetQuorumHash in main.cpp for compatibility purposes. See the comments below. + // End LOCK(cs_ConvergedScraperStatsCache) + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_ConvergedScraperStatsCache"); + + } + + return superblock; +} + + +// Note: This is simply a wrapper around GetQuorumHash in main.cpp for compatibility purposes. std::string ScraperGetNeuralHash() { std::string sNeuralContract = ScraperGetNeuralContract(false, false); std::string sHash; - //sHash = Hash(sNeuralContract.begin(), sNeuralContract.end()).GetHex(); - - // This is the hash currently used by the old NN. Continue to use it for compatibility purpose until the next mandatory - // after the new NN rollout, when the old NN hash function can be retired in favor of the commented out code above. - // The intent will be to uncomment out the above line, and then reverse the roles of ScraperGetNeuralHash() and - // GetQuorumHash(). sHash = GetQuorumHash(sNeuralContract); return sHash; } -// Note: This is simply a wrapper around GetQuorumHash in main.cpp for compatibility purposes. See the comments below. +// Note: This is simply a wrapper around GetQuorumHash in main.cpp for compatibility purposes. std::string ScraperGetNeuralHash(std::string sNeuralContract) { std::string sHash; - //sHash = Hash(sNeuralContract.begin(), sNeuralContract.end()).GetHex(); - - // This is the hash currently used by the old NN. Continue to use it for compatibility purpose until the next mandatory - // after the new NN rollout, when the old NN hash function can be retired in favor of the commented out code above. - // The intent will be to uncomment out the above line, and then reverse the roles of ScraperGetNeuralHash() and - // GetQuorumHash(). sHash = GetQuorumHash(sNeuralContract); return sHash; } +// Note: This is the native hash for SB ver 2+ (bv11+). +NN::QuorumHash ScraperGetSuperblockHash() +{ + NN::QuorumHash nSuperblockContractHash = NN::QuorumHash::Hash(ScraperGetSuperblockContract(false, false)); + + return nSuperblockContractHash; +} + +// Note: This is the native hash for SB ver 2+ (bv11+). +NN::QuorumHash ScraperGetSuperblockHash(NN::Superblock& superblock) +{ + NN::QuorumHash nSuperblockContractHash = NN::QuorumHash::Hash(superblock); + + return nSuperblockContractHash; +} + bool ScraperSynchronizeDPOR() { diff --git a/src/scraper/scraper.h b/src/scraper/scraper.h index c7dfea0f4f..af42e01274 100644 --- a/src/scraper/scraper.h +++ b/src/scraper/scraper.h @@ -28,6 +28,7 @@ // See fwd.h for certain forward declarations that need to be included in other areas. #include "fwd.h" +#include "neuralnet/superblock.h" /********************* * Scraper Namepsace * @@ -117,7 +118,9 @@ std::string ExplainMagnitude(std::string sCPID); bool IsScraperAuthorized(); bool IsScraperAuthorizedToBroadcastManifests(CBitcoinAddress& AddressOut, CKey& KeyOut); std::string ScraperGetNeuralContract(bool bStoreConvergedStats = false, bool bContractDirectFromStatsUpdate = false); +NN::Superblock ScraperGetSuperblockContract(bool bStoreConvergedStats = false, bool bContractDirectFromStatsUpdate = false); std::string ScraperGetNeuralHash(); +NN::QuorumHash ScraperGetSuperblockHash(); bool ScraperSynchronizeDPOR(); static std::vector vstatsobjecttypestrings = { "NetWorkWide", "byCPID", "byProject", "byCPIDbyProject" }; diff --git a/src/scraper_net.cpp b/src/scraper_net.cpp index 0afb15c79d..528ab8e977 100644 --- a/src/scraper_net.cpp +++ b/src/scraper_net.cpp @@ -14,6 +14,7 @@ #include "scraper_net.h" #include "appcache.h" #include "scraper/fwd.h" +#include "neuralnet/superblock.h" //Globals std::map CSplitBlob::mapParts; diff --git a/src/ui_interface.h b/src/ui_interface.h index bb1a0875b3..c6932f417b 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -16,6 +16,7 @@ #include #include "scraper/fwd.h" +#include "neuralnet/superblock.h" class CBasicKeyStore; class CWallet; From 87c24ea8ddc828630c5a62a990c9f0ad122026a2 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Mon, 15 Jul 2019 14:26:18 -0400 Subject: [PATCH 091/115] Change superblock to variable assignment from FromStats --- src/scraper/scraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 150604f07d..9f1bc2ad99 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4529,7 +4529,7 @@ NN::Superblock ScraperGetSuperblockContract(bool bStoreConvergedStats, bool bCon NN::Superblock superblock_Prev = ConvergedScraperStatsCache.NewFormatSuperblock; - superblock.FromStats(mScraperConvergedStats); + superblock = NN::Superblock::FromStats(mScraperConvergedStats); ConvergedScraperStatsCache.mScraperConvergedStats = mScraperConvergedStats; ConvergedScraperStatsCache.nTime = GetAdjustedTime(); @@ -4582,7 +4582,7 @@ NN::Superblock ScraperGetSuperblockContract(bool bStoreConvergedStats, bool bCon // Notice there is NO update to the ConvergedScraperStatsCache here, as that is not // appropriate for the single shot. ScraperStats mScraperStats = GetScraperStatsByConsensusBeaconList(); - superblock.FromStats(mScraperStats); + superblock = NN::Superblock::FromStats(mScraperStats); // Signal the UI there is a contract. if(superblock.GetSerializeSize(SER_NETWORK, 1)) From 8067e7de6630ac54300d5fbc0fd16c0015103dad Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Tue, 16 Jul 2019 21:57:48 -0500 Subject: [PATCH 092/115] Provide for keying std::unordered_map with NN::QuorumHash objects --- src/neuralnet/superblock.cpp | 12 +++++ src/neuralnet/superblock.h | 58 ++++++++++++++++++++++++- src/test/neuralnet/superblock_tests.cpp | 28 ++++++++++++ src/uint256.h | 10 +++++ 4 files changed, 107 insertions(+), 1 deletion(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index 3b2d736c12..a24db36973 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -744,6 +744,18 @@ bool QuorumHash::Valid() const return Which() != Kind::INVALID; } +const unsigned char* QuorumHash::Raw() const +{ + switch (Which()) { + case Kind::INVALID: + return nullptr; + case Kind::SHA256: + return boost::get(m_hash).begin(); + case Kind::MD5: + return boost::get(m_hash).data(); + } +} + std::string QuorumHash::ToString() const { return boost::apply_visitor(QuorumHashToStringVisitor(), m_hash); diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index 74130c1f93..c99fb0ec5e 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -610,6 +610,14 @@ class QuorumHash //! bool Valid() const; + //! + //! \brief Get a pointer to the bytes in the hash. + //! + //! \return A pointer to the beginning of the bytes in the hash, or a + //! \c nullptr value if the object contains an invalid hash. + //! + const unsigned char* Raw() const; + //! //! \brief Get the string representation of the hash. //! @@ -625,9 +633,57 @@ class QuorumHash //! boost::variant m_hash; }; // QuorumHash -} +} // namespace NN +namespace std { +//! +//! \brief Specializes std::hash for NN::QuorumHash. +//! +//! This enables the use of NN::QuorumHash as a key in a std::unordered_map +//! object. +//! +//! CONSENSUS: Don't use the hash produced by this routine (or by any std::hash +//! specialization) in protocol-specific implementations. It ignores endianness +//! and outputs a value with a chance of collision probably too great for usage +//! besides the intended local look-up functionality. +//! +template<> +struct hash +{ + //! + //! \brief Create a hash of the supplied quorum hash object. + //! + //! \param quorum_hash Contains the bytes to hash. + //! + //! \return A hash as the sum of the two halves of the bytes in a legacy + //! MD5 hash, or the sum of the quarters of a SHA256 hash. Returns 0 for + //! an invalid hash. + //! + size_t operator()(const NN::QuorumHash& quorum_hash) const + { + // Just convert the quorum hash into a value that we can store in a + // size_t object. The hashes are already unique identifiers. + // + size_t out = 0; + const unsigned char* const bytes = quorum_hash.Raw(); + + switch (quorum_hash.Which()) { + case NN::QuorumHash::Kind::INVALID: + break; // 0 represents invalid + case NN::QuorumHash::Kind::SHA256: + out = *reinterpret_cast(bytes + 16) + + *reinterpret_cast(bytes + 24); + // Pass-through case. + case NN::QuorumHash::Kind::MD5: + out += *reinterpret_cast(bytes) + + *reinterpret_cast(bytes + 8); + break; + } + return out; + } +}; +} // namespace std // This is part of the scraper but is put here, because it needs the complete NN:Superblock class. struct ConvergedScraperStats diff --git a/src/test/neuralnet/superblock_tests.cpp b/src/test/neuralnet/superblock_tests.cpp index cc07b90818..0673da8dd9 100644 --- a/src/test/neuralnet/superblock_tests.cpp +++ b/src/test/neuralnet/superblock_tests.cpp @@ -1470,4 +1470,32 @@ BOOST_AUTO_TEST_CASE(it_represents_itself_as_a_string) BOOST_CHECK(hash.ToString() == "00000000000000000000000000000000"); } +BOOST_AUTO_TEST_CASE(it_is_hashable_to_key_a_lookup_map) +{ + std::hash hasher; + + NN::QuorumHash hash_invalid; + + BOOST_CHECK(hasher(hash_invalid) == 0); + + NN::QuorumHash hash_sha256(uint256(std::vector { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + })); + + + // 0x01 + 0x02 + 0x03 + 0x04 (SHA256 quarters, big endian) + BOOST_CHECK(hasher(hash_sha256) == 10); + + NN::QuorumHash hash_md5(std::array { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }); + + // 0x0706050403020100 + 0x1514131211100908 (MD5 halves, little endian) + BOOST_CHECK(hasher(hash_md5) == 2024957465561532936); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/uint256.h b/src/uint256.h index 6fd1fd14ee..fa66d2342f 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -342,11 +342,21 @@ class base_uint return (unsigned char*)&pn[0]; } + const unsigned char* begin() const + { + return (const unsigned char*)&pn[0]; + } + unsigned char* end() { return (unsigned char*)&pn[WIDTH]; } + const unsigned char* end() const + { + return (const unsigned char*)&pn[WIDTH]; + } + unsigned int size() { return sizeof(pn); From abf5bd0bc9272b745aa31f894b5bf3e438d88951 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Wed, 17 Jul 2019 15:05:10 -0500 Subject: [PATCH 093/115] Implement string parsing for NN::QuorumHash --- src/neuralnet/superblock.cpp | 28 +++++- src/neuralnet/superblock.h | 25 ++++++ src/test/neuralnet/superblock_tests.cpp | 110 ++++++++++++++++++++++++ 3 files changed, 161 insertions(+), 2 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index a24db36973..1891af4429 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -633,6 +633,9 @@ void Superblock::ProjectIndex::Add(std::string name, const ProjectStats& stats) // Class: QuorumHash // ----------------------------------------------------------------------------- +static_assert(sizeof(uint256) == 32); +static_assert(sizeof(QuorumHash::Md5Sum) == 16); + QuorumHash::QuorumHash() : m_hash(Invalid()) { } @@ -645,6 +648,16 @@ QuorumHash::QuorumHash(Md5Sum legacy_hash) : m_hash(legacy_hash) { } +QuorumHash::QuorumHash(const std::vector& bytes) : QuorumHash() +{ + if (bytes.size() == sizeof(uint256)) { + m_hash = uint256(bytes); + } else if (bytes.size() == sizeof(Md5Sum)) { + m_hash = Md5Sum(); + std::copy(bytes.begin(), bytes.end(), boost::get(m_hash).begin()); + } +} + QuorumHash QuorumHash::Hash(const Superblock& superblock) { if (superblock.m_version > 1) { @@ -670,6 +683,15 @@ QuorumHash QuorumHash::Hash(const Superblock& superblock) return QuorumHash(output); } +QuorumHash QuorumHash::Parse(const std::string& hex) +{ + if (hex.size() != sizeof(uint256) * 2 && hex.size() != sizeof(Md5Sum) * 2) { + return QuorumHash(); + } + + return QuorumHash(ParseHex(hex)); +} + bool QuorumHash::operator==(const QuorumHash& other) const { if (m_hash.which() != other.m_hash.which()) { @@ -715,11 +737,11 @@ bool QuorumHash::operator==(const std::string& other) const return other.empty(); case Kind::SHA256: - return other.size() == 64 + return other.size() == sizeof(uint256) * 2 && boost::get(m_hash) == uint256(other); case Kind::MD5: - return other.size() == 32 + return other.size() == sizeof(Md5Sum) * 2 && std::equal( boost::get(m_hash).begin(), boost::get(m_hash).end(), @@ -754,6 +776,8 @@ const unsigned char* QuorumHash::Raw() const case Kind::MD5: return boost::get(m_hash).data(); } + + return nullptr; } std::string QuorumHash::ToString() const diff --git a/src/neuralnet/superblock.h b/src/neuralnet/superblock.h index c99fb0ec5e..889bef31ca 100644 --- a/src/neuralnet/superblock.h +++ b/src/neuralnet/superblock.h @@ -579,6 +579,18 @@ class QuorumHash //! QuorumHash(Md5Sum legacy_hash); + //! + //! \brief Initialize the appropriate quorum hash variant from the supplied + //! bytes. + //! + //! Initializes to an invalid hash variant when the bytes do not represent + //! a valid quorum hash. + //! + //! \param bytes 32 bytes for a SHA256 hash or 16 bytes for a legacy MD5 + //! hash. + //! + QuorumHash(const std::vector& bytes); + //! //! \brief Hash the provided superblock. //! @@ -589,6 +601,19 @@ class QuorumHash //! static QuorumHash Hash(const Superblock& superblock); + //! + //! \brief Initialize a quorum hash object by parsing the supplied string + //! representation of a hash. + //! + //! \param hex A 64-character hex-encoded string for a SHA256 hash, or a + //! 32-character hex-encoded string for a legacy MD5 hash. + //! + //! \return A quorum hash object that contains the bytes of the hash value + //! represented by the string or an invalid quorum hash if the string does + //! not contain a well-formed MD5 or SHA256 hash. + //! + static QuorumHash Parse(const std::string& hex); + bool operator==(const QuorumHash& other) const; bool operator!=(const QuorumHash& other) const; bool operator==(const uint256& other) const; diff --git a/src/test/neuralnet/superblock_tests.cpp b/src/test/neuralnet/superblock_tests.cpp index 0673da8dd9..4d29d1c0a7 100644 --- a/src/test/neuralnet/superblock_tests.cpp +++ b/src/test/neuralnet/superblock_tests.cpp @@ -1325,6 +1325,46 @@ BOOST_AUTO_TEST_CASE(it_initializes_with_a_legacy_md5_hash) BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::MD5); } +BOOST_AUTO_TEST_CASE(it_initializes_to_the_supplied_bytes) +{ + NN::QuorumHash hash_invalid(std::vector { 0x00 }); + + BOOST_CHECK(hash_invalid.Valid() == false); + BOOST_CHECK(hash_invalid.Which() == NN::QuorumHash::Kind::INVALID); + + const std::vector sha256_bytes { + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + + NN::QuorumHash hash_sha256(sha256_bytes); + + BOOST_CHECK(hash_sha256.Valid() == true); + BOOST_CHECK(hash_sha256.Which() == NN::QuorumHash::Kind::SHA256); + BOOST_CHECK_EQUAL_COLLECTIONS( + sha256_bytes.begin(), + sha256_bytes.end(), + hash_sha256.Raw(), + hash_sha256.Raw() + 32); + + const std::vector md5_bytes { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + NN::QuorumHash hash_md5(md5_bytes); + + BOOST_CHECK(hash_md5.Valid() == true); + BOOST_CHECK(hash_md5.Which() == NN::QuorumHash::Kind::MD5); + BOOST_CHECK_EQUAL_COLLECTIONS( + md5_bytes.begin(), + md5_bytes.end(), + hash_md5.Raw(), + hash_md5.Raw() + 16); +} + BOOST_AUTO_TEST_CASE(it_hashes_a_superblock) { NN::Superblock superblock; @@ -1369,6 +1409,76 @@ BOOST_AUTO_TEST_CASE(it_hashes_a_superblock) == "99b20dca6d76a3ab1b704925535ec08a9d46fbf95ca3036396b628e23db00156"); } +BOOST_AUTO_TEST_CASE(it_parses_a_sha256_hash_string) +{ + const std::vector expected { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + NN::QuorumHash hash = NN::QuorumHash::Parse(HexStr(expected)); + + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::SHA256); + BOOST_CHECK_EQUAL_COLLECTIONS( + expected.begin(), + expected.end(), + hash.Raw(), + hash.Raw() + 32); +} + +BOOST_AUTO_TEST_CASE(it_parses_a_legacy_md5_hash_string) +{ + const std::vector expected { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + }; + + NN::QuorumHash hash = NN::QuorumHash::Parse(HexStr(expected)); + + BOOST_CHECK(hash.Which() == NN::QuorumHash::Kind::MD5); + BOOST_CHECK_EQUAL_COLLECTIONS( + expected.begin(), + expected.end(), + hash.Raw(), + hash.Raw() + 16); +} + +BOOST_AUTO_TEST_CASE(it_parses_an_invalid_quorum_hash_to_an_invalid_variant) +{ + // Empty: + NN::QuorumHash hash = NN::QuorumHash::Parse(""); + BOOST_CHECK(hash.Valid() == false); + + // Too short MD5: 31 characters + hash = NN::QuorumHash::Parse("0001020304050607080910111213141"); + BOOST_CHECK(hash.Valid() == false); + + // Too long MD5: 33 characters + hash = NN::QuorumHash::Parse("000102030405060708091011121314155"); + BOOST_CHECK(hash.Valid() == false); + + // Non-hex character at the end: + hash = NN::QuorumHash::Parse("0001020304050607080910111213141Z"); + BOOST_CHECK(hash.Valid() == false); + + // Too short SHA256: 63 characters + hash = NN::QuorumHash::Parse( + "000102030405060708091011121314150001020304050607080910111213141"); + BOOST_CHECK(hash.Valid() == false); + + // Too long SHA256: 65 characters + hash = NN::QuorumHash::Parse( + "00010203040506070809101112131415000102030405060708091011121314155"); + BOOST_CHECK(hash.Valid() == false); + + // Non-hex character at the end: + hash = NN::QuorumHash::Parse( + "000102030405060708091011121314150001020304050607080910111213141Z"); + BOOST_CHECK(hash.Valid() == false); +} + BOOST_AUTO_TEST_CASE(it_hashes_cpid_magnitudes_from_a_legacy_superblock) { // Version 1 superblocks hash with the legacy MD5-based algorithm: From 6c6cc8986b19bc14d06e4b0c4d8d80af8cab6269 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Fri, 26 Jul 2019 14:53:24 -0400 Subject: [PATCH 094/115] Change delimiter for team whitelist string and file to pipe from comma --- src/scraper/scraper.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 9f1bc2ad99..733ae4bfd0 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -1419,7 +1419,7 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) // If fExplorer is false, which means we do not need to retain team files, and there is an entry in the TeamIDMap for the project, // and in the submap (team name and team id) there are the correct number of team entries, then skip processing. - if (!fExplorer && iter != TeamIDMap.end() && iter->second.size() == split(TEAM_WHITELIST, ",").size()) + if (!fExplorer && iter != TeamIDMap.end() && iter->second.size() == split(TEAM_WHITELIST, "|").size()) { _log(logattribute::INFO, "DownloadProjectTeamFiles", "Correct team whitelist entries already in the team ID map for " + prjs.m_name + " project. Skipping team file download and processing."); @@ -1564,7 +1564,7 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: _log(logattribute::INFO, "ProcessProjectTeamFile", "Started processing " + file.string()); - std::vector vTeamWhiteList = split(TEAM_WHITELIST, ","); + std::vector vTeamWhiteList = split(TEAM_WHITELIST, "|"); std::string line; stringbuilder builder; @@ -2105,7 +2105,7 @@ bool LoadTeamIDList(const fs::path& file) std::getline(in, line); // This is in the form Project, Gridcoin, ...." - std::vector vTeamNames = split(line, ","); + std::vector vTeamNames = split(line, "|"); if (fDebug3) _log(logattribute::INFO, "LoadTeamIDList", "Size of vTeamNames = " + std::to_string(vTeamNames.size())); while (std::getline(in, line)) @@ -2113,7 +2113,7 @@ bool LoadTeamIDList(const fs::path& file) std::string sProject = {}; std::map mTeamIDsForProject = {}; - std::vector vline = split(line, ","); + std::vector vline = split(line, "|"); unsigned int iTeamName = 0; // Populate team IDs into map. @@ -2248,7 +2248,7 @@ bool StoreTeamIDList(const fs::path& file) // Header stream << "Project"; - std::vector vTeamWhiteList = split(TEAM_WHITELIST, ","); + std::vector vTeamWhiteList = split(TEAM_WHITELIST, "|"); std::set setTeamWhiteList; // Ensure that the team names are in the correct order. @@ -2256,7 +2256,7 @@ bool StoreTeamIDList(const fs::path& file) setTeamWhiteList.insert(iTeam); for (auto const& iTeam: setTeamWhiteList) - stream << "," << iTeam; + stream << "|" << iTeam; stream << std::endl; @@ -2268,7 +2268,7 @@ bool StoreTeamIDList(const fs::path& file) stream << iProject.first; for (auto const& iTeam : iProject.second) - sProjectEntry += "," + std::to_string(iTeam.second); + sProjectEntry += "|" + std::to_string(iTeam.second); stream << sProjectEntry << std::endl; } From 1656f887790806380291131763555feedbadbd96 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 28 Jul 2019 15:21:30 -0500 Subject: [PATCH 095/115] Rewire NN::Researcher for dynamic team requirement and whitelist --- src/neuralnet/researcher.cpp | 195 ++++++---- src/neuralnet/researcher.h | 47 ++- src/test/neuralnet/researcher_tests.cpp | 460 ++++++++++++++++++++++-- 3 files changed, 609 insertions(+), 93 deletions(-) diff --git a/src/neuralnet/researcher.cpp b/src/neuralnet/researcher.cpp index 690c0f22ac..435049190f 100644 --- a/src/neuralnet/researcher.cpp +++ b/src/neuralnet/researcher.cpp @@ -6,7 +6,9 @@ #include "util.h" #include +#include #include +#include using namespace NN; @@ -75,10 +77,10 @@ bool ConfiguredForInvestorMode() boost::optional ReadClientStateXml() { const std::string path = GetBoincDataDir(); - const std::string contents = GetFileContents(path + "client_state.xml"); + std::string contents = GetFileContents(path + "client_state.xml"); if (contents != "-1") { - return contents; + return boost::make_optional(std::move(contents)); } LogPrintf("WARNING: Unable to obtain BOINC CPIDs."); @@ -119,19 +121,15 @@ std::vector FetchProjectsXml() // Drop the first element which never contains a project: // - // We could swap-n-pop the element to avoid shifting the whole sequence. - // However, BOINC sorts the projects in client_state.xml by name, and we - // select the last valid CPID present in this file. To avoid a surprise, - // we'll just erase the first item. This routine doesn't run very often. - // - projects.erase(projects.begin()); + std::swap(projects.front(), projects.back()); + projects.pop_back(); return projects; } //! //! \brief Determine whether BOINC projects should be checked for membership in -//! team Gridcoin before enabling the associated CPID. +//! a whitelisted team before enabling the associated CPID. //! //! \return \c true when the protocol is configured to require team membership //! or when no protocol directive exists. @@ -142,73 +140,87 @@ bool ShouldEnforceTeamMembership() } //! -//! \brief Process the provided project XML from BOINC's client_state.xml file -//! and load it into the supplied researcher context if valid. +//! \brief Fetch the current set of whitelisted teams. //! -//! \param mining_id Updated with the project CPID if eligible. -//! \param projects Projects map to store the loaded project in. -//! \param project_xml As extracted from BOINC's client_state.xml file. +//! \return The set of whitelisted teams configured in the protocol or a set +//! with only team "gridcoin" when no protocol directive exists. Supplies an +//! empty set when the team requirement is not active. //! -void LoadProject( - MiningId& mining_id, - MiningProjectMap& projects, - const std::string& project_xml) +std::set GetTeamWhitelist() { - MiningProject project = MiningProject::Parse(project_xml); + if (!ShouldEnforceTeamMembership()) { + return { }; + } - if (project.m_name.empty()) { - LogPrintf("Skipping invalid BOINC project with empty name."); - return; + const AppCacheEntry entry = ReadCache(Section::PROTOCOL, "TEAM_WHITELIST"); + + if (entry.value.empty()) { + return { "gridcoin" }; } - // TODO: maybe we should support the TEAM_WHITELIST protocol directive: - if (ShouldEnforceTeamMembership() && project.m_team != "gridcoin") { - LogPrintf("Project %s is not joined to team Gridcoin.", project.m_name); - project.m_error = MiningProject::Error::INVALID_TEAM; - projects.Set(std::move(project)); + std::set teams; - return; + for (auto&& team_name : split(entry.value, "|")) { + if (team_name.empty()) { + continue; + } + + boost::to_lower(team_name); + + teams.emplace(std::move(team_name)); } - if (project.m_cpid.IsZero()) { - const std::string external_cpid - = ExtractXML(project_xml, "", ""); + if (teams.empty()) { + return { "gridcoin" }; + } - // For the extremely rare case that a BOINC project assigned a user a - // CPID that contains only zeroes, double check that a CPID parsed to - // zero is actually invalid: - // - if (MiningId::Parse(external_cpid).Which() != MiningId::Kind::CPID) { - LogPrintf("Invalid external CPID for project %s.", project.m_name); - project.m_error = MiningProject::Error::MALFORMED_CPID; - projects.Set(std::move(project)); + return teams; +} +//! +//! \brief Select the provided project's CPID if the project passes the rules +//! for eligibility. +//! +//! \param mining_id Updated with the project CPID if eligible. +//! \param project Project to determine eligibility for. +//! \param team_whitelist The set of whitelisted teams to validate the provided +//! project's team against or an empty container when the +//! protocol team requirement is disabled. +//! +void LoadProject( + MiningId& mining_id, + MiningProject& project, + const std::set& team_whitelist) +{ + switch (project.m_error) { + case MiningProject::Error::MALFORMED_CPID: + LogPrintf("Invalid external CPID for project %s.", project.m_name); return; - } + case MiningProject::Error::MISMATCHED_CPID: + LogPrintf("CPID mismatch. Check email for %s.", project.m_name); + return; + default: + break; // Suppress warning. } - // We compare the digest of the internal CPID and email address to the - // external CPID as a smoke test to avoid running with corrupted CPIDs. - // - if (!project.m_cpid.Matches( - ExtractXML(project_xml, "", ""), - Researcher::Email())) - { - LogPrintf("CPID mismatch. Check email for %s.", project.m_name); - project.m_error = MiningProject::Error::MISMATCHED_CPID; - projects.Set(std::move(project)); + if (!team_whitelist.empty() && !team_whitelist.count(project.m_team)) { + LogPrintf("Project %s's team is not whitelisted.", project.m_name); + project.m_error = MiningProject::Error::INVALID_TEAM; return; } + // Clear any previously-set INVALID_TEAM error when a dynamic protocol + // directive applies a configuration that now authorizes this project: + // + project.m_error = MiningProject::Error::NONE; + mining_id = project.m_cpid; LogPrintf( "Found eligible project %s with CPID %s.", project.m_name, project.m_cpid.ToString()); - - projects.Set(std::move(project)); } //! @@ -319,10 +331,36 @@ MiningProject::MiningProject(std::string name, Cpid cpid, std::string team) MiningProject MiningProject::Parse(const std::string& xml) { - return MiningProject( + MiningProject project( ExtractXML(xml, "", ""), Cpid::Parse(ExtractXML(xml, "", "")), ExtractXML(xml, "","")); + + if (project.m_cpid.IsZero()) { + const std::string external_cpid + = ExtractXML(xml, "", ""); + + // For the extremely rare case that a BOINC project assigned a user a + // CPID that contains only zeroes, double check that a CPID parsed to + // zero is actually invalid: + // + if (MiningId::Parse(external_cpid).Which() != MiningId::Kind::CPID) { + project.m_error = MiningProject::Error::MALFORMED_CPID; + return project; + } + } + + // We compare the digest of the internal CPID and email address to the + // external CPID as a smoke test to avoid running with corrupted CPIDs. + // + if (!project.m_cpid.Matches( + ExtractXML(xml, "", ""), + Researcher::Email())) + { + project.m_error = MiningProject::Error::MISMATCHED_CPID; + } + + return project; } bool MiningProject::Eligible() const @@ -349,6 +387,24 @@ MiningProjectMap::MiningProjectMap() { } +MiningProjectMap MiningProjectMap::Parse(const std::vector& xml) +{ + MiningProjectMap projects; + + for (const auto& project_xml : xml) { + MiningProject project = MiningProject::Parse(project_xml); + + if (project.m_name.empty()) { + LogPrintf("Skipping invalid BOINC project with empty name."); + continue; + } + + projects.Set(std::move(project)); + } + + return projects; +} + MiningProjectMap::const_iterator MiningProjectMap::begin() const { return m_projects.begin(); @@ -428,25 +484,40 @@ void Researcher::Reload() LogPrintf("WARNING: boinckey is no longer supported."); } - Reload(FetchProjectsXml()); + Reload(MiningProjectMap::Parse(FetchProjectsXml())); } -void Researcher::Reload(const std::vector& projects_xml) +void Researcher::Reload(MiningProjectMap projects) { - Researcher researcher; + MiningId mining_id = MiningId::ForInvestor(); + + const std::set team_whitelist = GetTeamWhitelist(); + + if (team_whitelist.empty()) { + LogPrintf("BOINC team requirement inactive at last known block."); + } else { + LogPrintf( + "BOINC team requirement active at last known block. Whitelist: %s", + boost::algorithm::join(team_whitelist, ", ")); + } - for (const auto& project_xml : projects_xml) { - LoadProject(researcher.m_mining_id, researcher.m_projects, project_xml); + for (auto& project_pair : projects) { + LoadProject(mining_id, REF(project_pair.second), team_whitelist); } - if (const CpidOption cpid = researcher.m_mining_id.TryCpid()) { - DetectSplitCpid(researcher.m_projects); + if (const CpidOption cpid = mining_id.TryCpid()) { + DetectSplitCpid(projects); LogPrintf("Selected primary CPID: %s", cpid->ToString()); - } else if (!researcher.m_projects.empty()) { + } else if (!projects.empty()) { LogPrintf("WARNING: no projects eligible for research rewards."); } - StoreResearcher(std::move(researcher)); + StoreResearcher(Researcher(std::move(mining_id), std::move(projects))); +} + +void Researcher::Refresh() +{ + Reload(Get()->m_projects); } const MiningId& Researcher::Id() const diff --git a/src/neuralnet/researcher.h b/src/neuralnet/researcher.h index 7de561974f..71fbde9d8d 100644 --- a/src/neuralnet/researcher.h +++ b/src/neuralnet/researcher.h @@ -3,9 +3,10 @@ #include "neuralnet/cpid.h" #include +#include #include #include -#include +#include namespace NN { //! @@ -34,7 +35,7 @@ struct MiningProject enum class Error { NONE, //!< Eligible project; no errors. - INVALID_TEAM, //!< Project not joined to team Gridcoin. + INVALID_TEAM, //!< Project not joined to a whitelisted team. MALFORMED_CPID, //!< Failed to parse a valid external CPID. MISMATCHED_CPID, //!< External CPID failed internal CPID + email test. }; @@ -58,16 +59,16 @@ struct MiningProject //! static MiningProject Parse(const std::string& xml); - std::string m_name; // ProjectOption; //! class MiningProjectMap { - using ProjectStorage = std::unordered_map; + using ProjectStorage = std::map; public: typedef ProjectStorage::size_type size_type; @@ -106,6 +107,18 @@ class MiningProjectMap //! MiningProjectMap(); + //! + //! \brief Parse the supplied collection of BOINC project XML sections into + //! a new project map instance. + //! + //! \param xml Each element contains a project's XML data as parsed from + //! BOINC's client_state.xml file. + //! + //! \return A new map with data for the local BOINC projects used to select + //! an eligible CPID from. Must be filtered for team eligibility. + //! + static MiningProjectMap Parse(const std::vector& xml); + //! //! \brief Returns an iterator to the beginning. //! @@ -220,10 +233,22 @@ class Researcher //! \brief Reload the wallet's researcher mining context from the supplied //! collection of BOINC project data. //! - //! \param projects_xml Data for one or more projects in the XML format - //! contained in BOINC's client_state.xml file. + //! \param projects Data for one or more projects as loaded from BOINC's + //! client_state.xml file. + //! + static void Reload(MiningProjectMap projects); + + //! + //! \brief Rescan the set of in-memory projects for eligible CPIDs without + //! reloading the projects from disk. + //! + //! This method provides a hook for dynamic protocol configuration messages + //! that update eligibility of local CPIDs. For example, when the receiving + //! a protocol directive that enables or disables the team requirement, the + //! application calls this method to update the researcher context with any + //! newly eligible or ineligible CPIDs. //! - static void Reload(const std::vector& projects_xml); + static void Refresh(); //! //! \brief Get the primary mining ID that identifies the owner of the wallet. diff --git a/src/test/neuralnet/researcher_tests.cpp b/src/test/neuralnet/researcher_tests.cpp index c394e129e1..573b9fd7e1 100644 --- a/src/test/neuralnet/researcher_tests.cpp +++ b/src/test/neuralnet/researcher_tests.cpp @@ -87,6 +87,8 @@ BOOST_AUTO_TEST_CASE(it_initializes_with_project_data) BOOST_AUTO_TEST_CASE(it_parses_a_project_xml_string) { + SetArgument("email", "researcher@example.com"); + // The XML string contains a subset of data found within a element // from BOINC's client_state.xml file: // @@ -95,6 +97,7 @@ BOOST_AUTO_TEST_CASE(it_parses_a_project_xml_string) Project Name Team Name + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX f5d8234352e5a5ae3915debba7258294 )XML"); @@ -105,6 +108,9 @@ BOOST_AUTO_TEST_CASE(it_parses_a_project_xml_string) BOOST_CHECK(project.m_cpid == cpid); BOOST_CHECK(project.m_team == "team name"); BOOST_CHECK(project.m_error == NN::MiningProject::Error::NONE); + + // Clean up: + SetArgument("email", ""); } BOOST_AUTO_TEST_CASE(it_normalizes_project_names) @@ -178,6 +184,86 @@ BOOST_AUTO_TEST_CASE(it_is_iterable) BOOST_CHECK(counter == 2); } +BOOST_AUTO_TEST_CASE(it_parses_a_set_of_project_xml_sections) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + NN::MiningProjectMap projects = NN::MiningProjectMap::Parse({ + R"XML( + + Project Name 1 + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + R"XML( + + Project Name 2 + Gridcoin + YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY + 8edc235ddcecf9c416a5f9417d56f4fd + + )XML", + }); + + NN::Cpid cpid_1 = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + NN::Cpid cpid_2 = NN::Cpid::Parse("8edc235ddcecf9c416a5f9417d56f4fd"); + + BOOST_CHECK(projects.size() == 2); + + if (const NN::ProjectOption project1 = projects.Try("project name 1")) { + BOOST_CHECK(project1->m_name == "project name 1"); + BOOST_CHECK(project1->m_cpid == cpid_1); + BOOST_CHECK(project1->m_team == "gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project1->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project name 2")) { + BOOST_CHECK(project2->m_name == "project name 2"); + BOOST_CHECK(project2->m_cpid == cpid_2); + BOOST_CHECK(project2->m_team == "gridcoin"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + NN::Researcher::Reload(NN::MiningProjectMap()); +} + +BOOST_AUTO_TEST_CASE(it_skips_loading_project_xml_with_empty_project_names) +{ + NN::MiningProjectMap projects = NN::MiningProjectMap::Parse({ + // Empty element: + R"XML( + + + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + // Missing element: + R"XML( + + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + }); + + // No valid projects loaded; mining ID should remain INVESTOR: + BOOST_CHECK(projects.empty() == true); +} + BOOST_AUTO_TEST_CASE(it_counts_the_number_of_projects) { NN::MiningProjectMap projects; @@ -304,7 +390,7 @@ BOOST_AUTO_TEST_CASE(it_parses_project_xml_to_a_global_researcher_singleton) // External CPIDs generated with this email address: SetArgument("email", "researcher@example.com"); - NN::Researcher::Reload(std::vector { + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ R"XML( Project Name 1 @@ -321,7 +407,7 @@ BOOST_AUTO_TEST_CASE(it_parses_project_xml_to_a_global_researcher_singleton) 8edc235ddcecf9c416a5f9417d56f4fd )XML", - }); + })); NN::Cpid cpid_1 = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); NN::Cpid cpid_2 = NN::Cpid::Parse("8edc235ddcecf9c416a5f9417d56f4fd"); @@ -354,7 +440,7 @@ BOOST_AUTO_TEST_CASE(it_parses_project_xml_to_a_global_researcher_singleton) // Clean up: SetArgument("email", ""); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } BOOST_AUTO_TEST_CASE(it_looks_up_loaded_boinc_projects_by_name) @@ -362,7 +448,7 @@ BOOST_AUTO_TEST_CASE(it_looks_up_loaded_boinc_projects_by_name) // External CPIDs generated with this email address: SetArgument("email", "researcher@example.com"); - NN::Researcher::Reload(std::vector { + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ R"XML( Name @@ -371,7 +457,7 @@ BOOST_AUTO_TEST_CASE(it_looks_up_loaded_boinc_projects_by_name) f5d8234352e5a5ae3915debba7258294 )XML", - }); + })); NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); @@ -389,12 +475,12 @@ BOOST_AUTO_TEST_CASE(it_looks_up_loaded_boinc_projects_by_name) // Clean up: SetArgument("email", ""); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } BOOST_AUTO_TEST_CASE(it_resets_to_investor_mode_when_parsing_no_projects) { - NN::Researcher::Reload(std::vector { }); + NN::Researcher::Reload(NN::MiningProjectMap()); BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); BOOST_CHECK(NN::Researcher::Get()->Projects().empty() == true); @@ -405,7 +491,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml) // External CPIDs generated with this email address: SetArgument("email", "researcher@example.com"); - NN::Researcher::Reload(std::vector { + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ // Required team mismatch: R"XML( @@ -457,7 +543,7 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml) f5d8234352e5a5ae3915debba7258294 )XML", - }); + })); NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); @@ -529,12 +615,12 @@ BOOST_AUTO_TEST_CASE(it_tags_invalid_projects_with_errors_when_parsing_xml) // Clean up: SetArgument("email", ""); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } BOOST_AUTO_TEST_CASE(it_skips_loading_project_xml_with_empty_project_names) { - NN::Researcher::Reload(std::vector { + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ // Empty element: R"XML( @@ -552,17 +638,17 @@ BOOST_AUTO_TEST_CASE(it_skips_loading_project_xml_with_empty_project_names) f5d8234352e5a5ae3915debba7258294 )XML", - }); + })); // No valid projects loaded; mining ID should remain INVESTOR: BOOST_CHECK(NN::Researcher::Get()->Id() == NN::MiningId::ForInvestor()); BOOST_CHECK(NN::Researcher::Get()->Projects().empty() == true); // Clean up: - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } -BOOST_AUTO_TEST_CASE(it_ignores_the_team_requirement_when_set_by_protocol) +BOOST_AUTO_TEST_CASE(it_skips_the_team_requirement_when_set_by_protocol) { // External CPIDs generated with this email address: SetArgument("email", "researcher@example.com"); @@ -570,7 +656,7 @@ BOOST_AUTO_TEST_CASE(it_ignores_the_team_requirement_when_set_by_protocol) // Simulate a protocol control directive that disables the team requirement: WriteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP", "false", 1); - NN::Researcher::Reload(std::vector { + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ R"XML( Project Name 1 @@ -579,7 +665,7 @@ BOOST_AUTO_TEST_CASE(it_ignores_the_team_requirement_when_set_by_protocol) f5d8234352e5a5ae3915debba7258294 )XML", - }); + })); NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); @@ -602,7 +688,341 @@ BOOST_AUTO_TEST_CASE(it_ignores_the_team_requirement_when_set_by_protocol) // Clean up: SetArgument("email", ""); DeleteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP"); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); +} + +BOOST_AUTO_TEST_CASE(it_applies_the_team_whitelist_when_set_by_the_protocol) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + // Simulate a protocol control directive with whitelisted teams: + WriteCache(Section::PROTOCOL, "TEAM_WHITELIST", "team 1|Team 2", 1); + + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ + R"XML( + + Project Name 1 + ! Not Gridcoin ! + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + R"XML( + + Project Name 2 + Team 1 + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + R"XML( + + Project Name 3 + Team 2 + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + })); + + NN::Cpid cpid = NN::Cpid::Parse("f5d8234352e5a5ae3915debba7258294"); + + // Primary CPID is selected from the last valid CPID loaded: + BOOST_CHECK(NN::Researcher::Get()->Id() == cpid); + + const NN::MiningProjectMap& projects = NN::Researcher::Get()->Projects(); + BOOST_CHECK(projects.size() == 3); + + if (const NN::ProjectOption project1 = projects.Try("project name 1")) { + BOOST_CHECK(project1->m_name == "project name 1"); + BOOST_CHECK(project1->m_cpid == cpid); + BOOST_CHECK(project1->m_team == "! not gridcoin !"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project1->Eligible() == false); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project name 2")) { + BOOST_CHECK(project2->m_name == "project name 2"); + BOOST_CHECK(project2->m_cpid == cpid); + BOOST_CHECK(project2->m_team == "team 1"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project3 = projects.Try("project name 3")) { + BOOST_CHECK(project3->m_name == "project name 3"); + BOOST_CHECK(project3->m_cpid == cpid); + BOOST_CHECK(project3->m_team == "team 2"); + BOOST_CHECK(project3->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project3->Eligible() == true); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + DeleteCache(Section::PROTOCOL, "TEAM_WHITELIST"); + NN::Researcher::Reload(NN::MiningProjectMap()); +} + +BOOST_AUTO_TEST_CASE(it_applies_the_team_requirement_dynamically) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ + R"XML( + + name + ! Not Gridcoin ! + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + })); + + BOOST_CHECK(NN::Researcher::Get()->IsInvestor() == true); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("name")) { + BOOST_CHECK(project->m_team == "! not gridcoin !"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Simulate a protocol control directive that disables the team requirement: + WriteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP", "false", 1); + + // Rescan in-memory projects for previously-ineligible teams: + NN::Researcher::Refresh(); + + BOOST_CHECK(NN::Researcher::Get()->IsInvestor() == false); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("name")) { + BOOST_CHECK(project->m_team == "! not gridcoin !"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Simulate a protocol control directive that enables the team requirement: + WriteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP", "true", 1); + + // Rescan in-memory projects for previously-eligible teams: + NN::Researcher::Refresh(); + + BOOST_CHECK(NN::Researcher::Get()->IsInvestor() == true); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("name")) { + BOOST_CHECK(project->m_team == "! not gridcoin !"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + DeleteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP"); + NN::Researcher::Reload(NN::MiningProjectMap()); +} + +BOOST_AUTO_TEST_CASE(it_applies_the_team_whitelist_dynamically) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ + R"XML( + + p1 + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + R"XML( + + p2 + Team 1 + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + R"XML( + + p3 + Team 2 + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + })); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p1")) { + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p2")) { + BOOST_CHECK(project->m_team == "team 1"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p3")) { + BOOST_CHECK(project->m_team == "team 2"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Simulate a protocol control directive that enables the team whitelist: + WriteCache(Section::PROTOCOL, "TEAM_WHITELIST", "Team 1|Team 2", 1); + + // Rescan in-memory projects for previously-ineligible teams: + NN::Researcher::Refresh(); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p1")) { + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p2")) { + BOOST_CHECK(project->m_team == "team 1"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p3")) { + BOOST_CHECK(project->m_team == "team 2"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Simulate a protocol control directive that disables the team whitelist: + WriteCache(Section::PROTOCOL, "TEAM_WHITELIST", "", 1); + + // Rescan in-memory projects for previously-eligible teams: + NN::Researcher::Refresh(); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p1")) { + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p2")) { + BOOST_CHECK(project->m_team == "team 1"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p3")) { + BOOST_CHECK(project->m_team == "team 2"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + DeleteCache(Section::PROTOCOL, "TEAM_WHITELIST"); + NN::Researcher::Reload(NN::MiningProjectMap()); +} + +BOOST_AUTO_TEST_CASE(it_ignores_the_team_whitelist_without_the_team_requirement) +{ + // External CPIDs generated with this email address: + SetArgument("email", "researcher@example.com"); + + // Simulate a protocol control directive that disables the team requirement: + WriteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP", "false", 1); + + NN::Researcher::Reload(NN::MiningProjectMap::Parse({ + R"XML( + + p1 + Gridcoin + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + f5d8234352e5a5ae3915debba7258294 + + )XML", + })); + + BOOST_CHECK(NN::Researcher::Get()->Eligible() == true); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p1")) { + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Simulate a protocol control directive that enables the team whitelist: + WriteCache(Section::PROTOCOL, "TEAM_WHITELIST", "Team 1|Team 2", 1); + + // Rescan in-memory projects for previously-eligible teams: + NN::Researcher::Refresh(); + + BOOST_CHECK(NN::Researcher::Get()->Eligible() == true); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p1")) { + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project->Eligible() == true); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Simulate a protocol control directive that enables the team requirement + // (and thus, the whitelist): + WriteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP", "true", 1); + + // Rescan in-memory projects for previously-eligible teams: + NN::Researcher::Refresh(); + + BOOST_CHECK(NN::Researcher::Get()->Eligible() == false); + + if (const NN::ProjectOption project = NN::Researcher::Get()->Project("p1")) { + BOOST_CHECK(project->m_team == "gridcoin"); + BOOST_CHECK(project->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project->Eligible() == false); + } else { + BOOST_FAIL("Project does not exist in the mining project map."); + } + + // Clean up: + SetArgument("email", ""); + DeleteCache(Section::PROTOCOL, "REQUIRE_TEAM_WHITELIST_MEMBERSHIP"); + DeleteCache(Section::PROTOCOL, "TEAM_WHITELIST"); + NN::Researcher::Reload(NN::MiningProjectMap()); } // Note: the precondition skips this test case when the test harness cannot @@ -672,7 +1092,7 @@ BOOST_AUTO_TEST_CASE(it_parses_project_xml_from_a_client_state_xml_file, // Clean up: SetArgument("email", ""); SetArgument("boincdatadir", ""); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } // Note: the precondition skips this test case when the test harness cannot @@ -696,7 +1116,7 @@ BOOST_AUTO_TEST_CASE(it_resets_to_investor_mode_when_missing_email_address, // Clean up: SetArgument("boincdatadir", ""); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } // Note: the precondition skips this test case when the test harness cannot @@ -726,7 +1146,7 @@ BOOST_AUTO_TEST_CASE(it_resets_to_investor_mode_when_explicitly_configured, SetArgument("investor", "0"); SetArgument("email", ""); SetArgument("boincdatadir", ""); - NN::Researcher::Reload({ }); + NN::Researcher::Reload(NN::MiningProjectMap()); } BOOST_AUTO_TEST_SUITE_END() From 98498949cc56d28aa7845d67d947df9ba887a183 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 28 Jul 2019 15:23:15 -0500 Subject: [PATCH 096/115] Rescan CPID eligibility after receiving team protocol contracts --- src/main.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 6efa938aec..af05bf4aab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7386,6 +7386,19 @@ bool MemorizeMessage(const CTransaction &tx, double dAmount, std::string sRecipi fMessageLoaded = true; } + // Support dynamic team requirement or whitelist configuration: + // + // TODO: move this into the appropriate contract handler. + // + if (sMessageType == "protocol" + && (sMessageKey == "REQUIRE_TEAM_WHITELIST_MEMBERSHIP" + || sMessageKey == "TEAM_WHITELIST")) + { + // Rescan in-memory project CPIDs to resolve a primary CPID + // that fits the now active team requirement settings: + NN::Researcher::Refresh(); + } + if(fDebug) WriteCache(Section::TRXID, sMessageType + ";" + sMessageKey,tx.GetHash().GetHex(),nTime); } From 0dd68b6470b1f9939e15c8eece2e15da6e3b9173 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 28 Jul 2019 15:24:24 -0500 Subject: [PATCH 097/115] Add informational last payment time back to generated blocks --- src/miner.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/miner.cpp b/src/miner.cpp index 447bd0522c..39b2504713 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -31,6 +31,7 @@ double CoinToDouble(double surrogate); void ThreadTopUpKeyPool(void* parg); double CalculatedMagnitude(int64_t locktime, bool bUseLederstrumpf); +double GetLastPaymentTimeByCPID(std::string cpid); bool HasActiveBeacon(const std::string& cpid); std::string SerializeBoincBlock(MiningCPID mcpid); bool LessVerbose(int iMax1000); @@ -974,6 +975,7 @@ bool CreateGridcoinReward(CBlock &blocknew, MiningCPID& miningcpid, uint64_t &nC pbh=pindexPrev->GetBlockHash(); miningcpid.lastblockhash = pbh.GetHex(); + miningcpid.LastPaymentTime = GetLastPaymentTimeByCPID(miningcpid.cpid); miningcpid.Magnitude = CalculatedMagnitude(blocknew.nTime, false); miningcpid.ResearchSubsidy = OUT_POR; miningcpid.ResearchAge = dAccrualAge; From f32a5dc94828fffa7662f44ee5c78ce77e28f590 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 28 Jul 2019 14:05:50 -0400 Subject: [PATCH 098/115] Correct team processing in explorer mode. --- src/scraper/scraper.cpp | 100 ++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 40 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index 733ae4bfd0..a6a98e0a00 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -131,7 +131,7 @@ NN::QuorumHash ScraperGetSuperblockHash(NN::Superblock& superblock); bool DownloadProjectHostFiles(const NN::WhitelistSnapshot& projectWhitelist); bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist); -bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std::map& mTeamIdsForProject_out); +bool ProcessProjectTeamFile(const std::string& project, const fs::path& file, const std::string& etag); bool DownloadProjectRacFilesByCPID(const NN::WhitelistSnapshot& projectWhitelist); bool ProcessProjectRacFileByCPID(const std::string& project, const fs::path& file, const std::string& etag, BeaconConsensus& Consensus); bool AuthenticationETagUpdate(const std::string& project, const std::string& etag); @@ -1478,6 +1478,8 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) std::string team_file_name; fs::path team_file; + std::map mTeamIDsForProject; + bool bDownloadFlag = false; if (fExplorer) { @@ -1485,11 +1487,15 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) team_file_name = prjs.m_name + "-" + sTeamETag + "-team.gz"; team_file = pathScraper / team_file_name; - // If the file with the same eTag already exists, don't download it again. + // If the file with the same eTag already exists, don't download it again. Leave bDownloadFlag false. if (fs::exists(team_file)) { _log(logattribute::INFO, "DownloadProjectTeamFiles", "Etag file for " + prjs.m_name + " already exists"); - continue; + // continue; + } + else + { + bDownloadFlag = true; } } else @@ -1499,33 +1505,32 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) team_file = pathScraper / team_file_name; if (fs::exists(team_file)) fs::remove(team_file); - } - try - { - http.Download(prjs.StatsUrl("team"), team_file.string(), userpass); + bDownloadFlag = true; } - catch(const std::runtime_error& e) - { - _log(logattribute::ERR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.m_name); - continue; - } - - // If in explorer mode, save team xml files to file manifest map with exclude from CSManifest flag set to true. - if (fExplorer) AlignScraperFileManifestEntries(team_file, "team", prjs.m_name, true); - - std::map mTeamIDsForProject; - // We need this check because we could be in explorer mode (if fExplorer is true). - if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP) + // If in explorer mode and a new file is detected, or not in explorer mode, then download new file. (I.e. bDownload flag is true). + if (bDownloadFlag) { - if (ProcessProjectTeamFile(team_file.string(), sTeamETag, mTeamIDsForProject)) + try + { + http.Download(prjs.StatsUrl("team"), team_file.string(), userpass); + } + catch(const std::runtime_error& e) { - // Insert or update team IDs for the project into the team ID map. - TeamIDMap[prjs.m_name] = mTeamIDsForProject; + _log(logattribute::ERR, "DownloadProjectTeamFiles", "Failed to download project team file for " + prjs.m_name); + continue; } } + // If in explorer mode and new file downloaded, save team xml files to file manifest map with exclude from CSManifest flag set to true. + // If not in explorer mode, this is not necessary, because the team xml file is just temporary and can be discarded after + // processing. + if (fExplorer && bDownloadFlag) AlignScraperFileManifestEntries(team_file, "team", prjs.m_name, true); + + // If require team whitelist is set, then process the file. This also populates the whitelist. + if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP) ProcessProjectTeamFile(prjs.m_name, team_file, sTeamETag); + if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_TeamIDMap"); } @@ -1534,8 +1539,10 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) -bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std::map& mTeamIdsForProject_out) +bool ProcessProjectTeamFile(const std::string& project, const fs::path& file, const std::string& etag) { + std::map mTeamIdsForProject; + // If passed an empty file, immediately return false. if (file.string().empty()) return false; @@ -1544,25 +1551,19 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: if (!ingzfile) { - _log(logattribute::ERR, "ProcessProjectTeamFile", "Failed to open team gzip file (" + file.string() + ")"); + _log(logattribute::ERR, "ProcessProjectTeamFile", "Failed to open team gzip file (" + file.filename().string() + ")"); return 0; } - _log(logattribute::INFO, "ProcessProjectTeamFile", "Opening team file (" + file.string() + ")"); + _log(logattribute::INFO, "ProcessProjectTeamFile", "Opening team file (" + file.filename().string() + ")"); boostio::filtering_istream in; in.push(boostio::gzip_decompressor()); in.push(ingzfile); - // Insert csv in output filename. (This is not really used currently, but may be in the future.) - // std::string gzetagfile = std::string::replace(std::string::find(file.filename().string(), ".gz"), 3, ".csv.gz"); - - // Put path back in. - // gzetagfile = ((fs::path)(pathScraper / gzetagfile)).string(); - - _log(logattribute::INFO, "ProcessProjectTeamFile", "Started processing " + file.string()); + _log(logattribute::INFO, "ProcessProjectTeamFile", "Started processing " + file.filename().string()); std::vector vTeamWhiteList = split(TEAM_WHITELIST, "|"); @@ -1599,13 +1600,13 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: continue; } - mTeamIdsForProject_out[sTeamName] = nTeamID; + mTeamIdsForProject[sTeamName] = nTeamID; } else builder.append(line); } - if (mTeamIdsForProject_out.empty()) + if (mTeamIdsForProject.empty()) { _log(logattribute::CRITICAL, "ProcessProjectTeamFile", "Error in data processing of " + file.string()); @@ -1618,10 +1619,10 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: ingzfile.close(); - // If not explorer mode, delete input file after processing. - if (!fExplorer && fs::exists(file)) fs::remove(file); + // Insert or update team IDs for the project into the team ID map. This must be done before the StoreTeamIDList. + TeamIDMap[project] = mTeamIdsForProject; - if (mTeamIdsForProject_out.size() < vTeamWhiteList.size()) + if (mTeamIdsForProject.size() < vTeamWhiteList.size()) _log(logattribute::ERR, "ProcessProjectTeamFile", "Unable to determine team IDs for one or more whitelisted teams."); // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. @@ -1632,7 +1633,10 @@ bool ProcessProjectTeamFile(const fs::path& file, const std::string& etag, std:: else _log(logattribute::INFO, "ProcessProjectTeamFile", "Stored Team ID entries."); - _log(logattribute::INFO, "ProcessProjectTeamFile", "Finished processing " + file.string()); + // If not explorer mode, delete input file after processing. + if (!fExplorer && fs::exists(file)) fs::remove(file); + + _log(logattribute::INFO, "ProcessProjectTeamFile", "Finished processing " + file.filename().string()); return true; } @@ -2100,12 +2104,26 @@ bool LoadTeamIDList(const fs::path& file) in.push(ingzfile); std::string line; + std::string separator; // Header. This is used to construct the team names vector, since the team IDs were stored in the same order. std::getline(in, line); + // This is to detect and handle the loading of a legacy existing TeamID.csv.gz file that contains commas rather than pipes. + // The file will be rewritten with pipe separators when the team files are processed. + if (line.find("|") != std::string::npos) + { + separator = "|"; + } + else + { + _log(logattribute::INFO, "LoadTeamIDList", "Loading from legacy TeamID.csv.gz file with comma separator. This will be converted to pipe separator."); + + separator = ","; + } + // This is in the form Project, Gridcoin, ...." - std::vector vTeamNames = split(line, "|"); + std::vector vTeamNames = split(line, separator); if (fDebug3) _log(logattribute::INFO, "LoadTeamIDList", "Size of vTeamNames = " + std::to_string(vTeamNames.size())); while (std::getline(in, line)) @@ -2113,7 +2131,7 @@ bool LoadTeamIDList(const fs::path& file) std::string sProject = {}; std::map mTeamIDsForProject = {}; - std::vector vline = split(line, "|"); + std::vector vline = split(line, separator); unsigned int iTeamName = 0; // Populate team IDs into map. @@ -2260,6 +2278,8 @@ bool StoreTeamIDList(const fs::path& file) stream << std::endl; + if (fDebug3) _log(logattribute::INFO, "StoreTeamIDList", "TeamIDMap size = " + std::to_string(TeamIDMap.size())); + // Data for (auto const& iProject : TeamIDMap) { From 686bb1cba940e2b00b19f770136df9355ca37775 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Sun, 28 Jul 2019 21:16:29 -0500 Subject: [PATCH 099/115] Refactor team whitelist reload to avoid const_cast --- src/neuralnet/researcher.cpp | 63 +++++++++-------- src/neuralnet/researcher.h | 10 +++ src/test/neuralnet/researcher_tests.cpp | 91 +++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 27 deletions(-) diff --git a/src/neuralnet/researcher.cpp b/src/neuralnet/researcher.cpp index 435049190f..5aadc4f42d 100644 --- a/src/neuralnet/researcher.cpp +++ b/src/neuralnet/researcher.cpp @@ -181,40 +181,25 @@ std::set GetTeamWhitelist() //! \brief Select the provided project's CPID if the project passes the rules //! for eligibility. //! -//! \param mining_id Updated with the project CPID if eligible. -//! \param project Project to determine eligibility for. -//! \param team_whitelist The set of whitelisted teams to validate the provided -//! project's team against or an empty container when the -//! protocol team requirement is disabled. +//! \param mining_id Updated with the project CPID if eligible. +//! \param project Project with the CPID to determine eligibility for. //! -void LoadProject( - MiningId& mining_id, - MiningProject& project, - const std::set& team_whitelist) +void TryProjectCpid(MiningId& mining_id, const MiningProject& project) { switch (project.m_error) { + case MiningProject::Error::NONE: + break; // Suppress warning. case MiningProject::Error::MALFORMED_CPID: LogPrintf("Invalid external CPID for project %s.", project.m_name); return; case MiningProject::Error::MISMATCHED_CPID: LogPrintf("CPID mismatch. Check email for %s.", project.m_name); return; - default: - break; // Suppress warning. - } - - if (!team_whitelist.empty() && !team_whitelist.count(project.m_team)) { - LogPrintf("Project %s's team is not whitelisted.", project.m_name); - project.m_error = MiningProject::Error::INVALID_TEAM; - - return; + case MiningProject::Error::INVALID_TEAM: + LogPrintf("Project %s's team is not whitelisted.", project.m_name); + return; } - // Clear any previously-set INVALID_TEAM error when a dynamic protocol - // directive applies a configuration that now authorizes this project: - // - project.m_error = MiningProject::Error::NONE; - mining_id = project.m_cpid; LogPrintf( @@ -441,6 +426,28 @@ void MiningProjectMap::Set(MiningProject project) m_projects.emplace(project.m_name, std::move(project)); } +void MiningProjectMap::ApplyTeamWhitelist(const std::set& teams) +{ + for (auto& project_pair : m_projects) { + MiningProject& project = project_pair.second; + + switch (project.m_error) { + case MiningProject::Error::NONE: + if (!teams.empty() && !teams.count(project.m_team)) { + project.m_error = MiningProject::Error::INVALID_TEAM; + } + break; + case MiningProject::Error::INVALID_TEAM: + if (teams.empty() || teams.count(project.m_team)) { + project.m_error = MiningProject::Error::NONE; + } + break; + default: + continue; + } + } +} + // ----------------------------------------------------------------------------- // Class: Researcher // ----------------------------------------------------------------------------- @@ -489,8 +496,6 @@ void Researcher::Reload() void Researcher::Reload(MiningProjectMap projects) { - MiningId mining_id = MiningId::ForInvestor(); - const std::set team_whitelist = GetTeamWhitelist(); if (team_whitelist.empty()) { @@ -501,8 +506,12 @@ void Researcher::Reload(MiningProjectMap projects) boost::algorithm::join(team_whitelist, ", ")); } - for (auto& project_pair : projects) { - LoadProject(mining_id, REF(project_pair.second), team_whitelist); + projects.ApplyTeamWhitelist(team_whitelist); + + MiningId mining_id = MiningId::ForInvestor(); + + for (const auto& project_pair : projects) { + TryProjectCpid(mining_id, project_pair.second); } if (const CpidOption cpid = mining_id.TryCpid()) { diff --git a/src/neuralnet/researcher.h b/src/neuralnet/researcher.h index 71fbde9d8d..056f6c7107 100644 --- a/src/neuralnet/researcher.h +++ b/src/neuralnet/researcher.h @@ -158,6 +158,16 @@ class MiningProjectMap //! void Set(MiningProject project); + //! + //! \brief Set the eligibility status of the projects in the map based + //! on their association with the provided set of teams. + //! + //! \param teams The set of whitelisted teams to validate the provided + //! project's team against or an empty container when the + //! protocol team requirement is disabled. + //! + void ApplyTeamWhitelist(const std::set& teams); + private: //! //! \brief Stores the local BOINC projects loaded from client_state.xml. diff --git a/src/test/neuralnet/researcher_tests.cpp b/src/test/neuralnet/researcher_tests.cpp index 573b9fd7e1..2ebe553701 100644 --- a/src/test/neuralnet/researcher_tests.cpp +++ b/src/test/neuralnet/researcher_tests.cpp @@ -307,6 +307,97 @@ BOOST_AUTO_TEST_CASE(it_does_not_overwrite_projects_with_the_same_name) BOOST_CHECK(projects.Try("project name").value().m_team == "team name 1"); } +BOOST_AUTO_TEST_CASE(it_applies_a_provided_team_whitelist) +{ + NN::MiningProjectMap projects; + + projects.Set(NN::MiningProject("project 1", NN::Cpid(), "gridcoin")); + projects.Set(NN::MiningProject("project 2", NN::Cpid(), "team 1")); + projects.Set(NN::MiningProject("project 3", NN::Cpid(), "team 2")); + + // Before applying a whitelist, all projects are eligible: + + if (const NN::ProjectOption project1 = projects.Try("project 1")) { + BOOST_CHECK(project1->m_team == "gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project1->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project 2")) { + BOOST_CHECK(project2->m_team == "team 1"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project3 = projects.Try("project 3")) { + BOOST_CHECK(project3->m_team == "team 2"); + BOOST_CHECK(project3->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project3->Eligible() == true); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Applying this whitelist disables eligibility for project 1: + // + projects.ApplyTeamWhitelist({ "team 1", "team 2" }); + + if (const NN::ProjectOption project1 = projects.Try("project 1")) { + BOOST_CHECK(project1->m_team == "gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::INVALID_TEAM); + BOOST_CHECK(project1->Eligible() == false); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project 2")) { + BOOST_CHECK(project2->m_team == "team 1"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project3 = projects.Try("project 3")) { + BOOST_CHECK(project3->m_team == "team 2"); + BOOST_CHECK(project3->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project3->Eligible() == true); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } + + // Applying an empty whitelist removes the team requirement: + // + projects.ApplyTeamWhitelist({ }); + + if (const NN::ProjectOption project1 = projects.Try("project 1")) { + BOOST_CHECK(project1->m_team == "gridcoin"); + BOOST_CHECK(project1->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project1->Eligible() == true); + } else { + BOOST_FAIL("Project 1 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project2 = projects.Try("project 2")) { + BOOST_CHECK(project2->m_team == "team 1"); + BOOST_CHECK(project2->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project2->Eligible() == true); + } else { + BOOST_FAIL("Project 2 does not exist in the mining project map."); + } + + if (const NN::ProjectOption project3 = projects.Try("project 3")) { + BOOST_CHECK(project3->m_team == "team 2"); + BOOST_CHECK(project3->m_error == NN::MiningProject::Error::NONE); + BOOST_CHECK(project3->Eligible() == true); + } else { + BOOST_FAIL("Project 3 does not exist in the mining project map."); + } +} + BOOST_AUTO_TEST_SUITE_END() // ----------------------------------------------------------------------------- From 0042a070ada2d228972418105d46a5bfa68cdf6c Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 29 Jul 2019 12:50:47 -0500 Subject: [PATCH 100/115] Notify when wallet locked in advertisebeacon RPC method --- src/rpcblockchain.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 682297fad3..8509382e30 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -962,6 +962,8 @@ UniValue advertisebeacon(const UniValue& params, bool fHelp) "\n" "Advertise a beacon (Requires wallet to be fully unlocked)\n"); + EnsureWalletIsUnlocked(); + UniValue res(UniValue::VOBJ); /* Try to copy key from config. The call is no-op if already imported or From 2ff1d09a21060c85fce8ee6bc926c4103fd34d50 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Mon, 29 Jul 2019 16:51:57 -0500 Subject: [PATCH 101/115] Notify when wallet locked in beaconstatus RPC method --- src/rpcblockchain.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 8509382e30..51f236cdfd 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1055,25 +1055,30 @@ UniValue beaconstatus(const UniValue& params, bool fHelp) res.pushKV("Magnitude (As of last superblock)", dMagnitude); - if (dMagnitude==0) - res.pushKV("Warning","Your magnitude is 0 as of the last superblock: this may keep you from staking POR blocks."); + const bool is_mine = sCPID == NN::GetPrimaryCpid(); + res.pushKV("Mine", is_mine); - // Staking Test 10-15-2016 - Simulate signing an actual block to verify this CPID keypair will work. - uint256 hashBlock = GetRandHash(); + if (is_mine && dMagnitude == 0) + res.pushKV("Warning","Your magnitude is 0 as of the last superblock: this may keep you from staking POR blocks."); - if (!sPubKey.empty()) + if (!sPubKey.empty() && is_mine) { + EnsureWalletIsUnlocked(); + bool bResult; std::string sSignature; std::string sError; + // Staking Test 10-15-2016 - Simulate signing an actual block to verify this CPID keypair will work. + uint256 hashBlock = GetRandHash(); + bResult = SignBlockWithCPID(sCPID, hashBlock.GetHex(), sSignature, sError); if (!bResult) { - sErr += "Failed to sign block with cpid "; + sErr += "Failed to sign block with cpid: "; sErr += sError; - sErr += ";"; + sErr += "; "; } bool fResult = VerifyCPIDSignature(sCPID, hashBlock.GetHex(), sSignature); From 084c438d272f7f547a58cf60a1b030afb69d3e5b Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 30 Jul 2019 17:56:11 -0400 Subject: [PATCH 102/115] Have importwallet file path default to datadir This aligns the behavior with dumpwallet, which was corrected in an earlier commit. --- src/rpcdump.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 443d8ff710..df11e8ed72 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -184,10 +184,18 @@ UniValue importwallet(const UniValue& params, bool fHelp) "\n" " -> filename of the wallet to import\n" "\n" - "Imports keys from a wallet dump file (see dumpwallet)\n"); + "Imports keys from a wallet dump file (see dumpwallet)\n" + "If a path is not specified in the filename, the data directory is used."); + + boost::filesystem::path PathForImport = boost::filesystem::path(params[0].get_str()); + boost::filesystem::path DefaultPathDataDir = GetDataDir(); + + // If provided filename does not have a path, then append parent path, otherwise leave alone. + if (PathForImport.parent_path().empty()) + PathForImport = DefaultPathDataDir / PathForImport; ifstream file; - file.open(params[0].get_str().c_str()); + file.open(PathForImport.string().c_str()); if (!file.is_open()) throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file"); From a451be3fc68981790d038ede1c8531c6e18bb89d Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 30 Jul 2019 17:56:11 -0400 Subject: [PATCH 103/115] Have importwallet file path default to datadir This aligns the behavior with dumpwallet, which was corrected in an earlier commit. --- src/rpcdump.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 443d8ff710..df11e8ed72 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -184,10 +184,18 @@ UniValue importwallet(const UniValue& params, bool fHelp) "\n" " -> filename of the wallet to import\n" "\n" - "Imports keys from a wallet dump file (see dumpwallet)\n"); + "Imports keys from a wallet dump file (see dumpwallet)\n" + "If a path is not specified in the filename, the data directory is used."); + + boost::filesystem::path PathForImport = boost::filesystem::path(params[0].get_str()); + boost::filesystem::path DefaultPathDataDir = GetDataDir(); + + // If provided filename does not have a path, then append parent path, otherwise leave alone. + if (PathForImport.parent_path().empty()) + PathForImport = DefaultPathDataDir / PathForImport; ifstream file; - file.open(params[0].get_str().c_str()); + file.open(PathForImport.string().c_str()); if (!file.is_open()) throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file"); From dccae869c7f863017f2ee1c73bf024849e9e08d3 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Wed, 31 Jul 2019 08:36:28 +0200 Subject: [PATCH 104/115] Bump version. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 5adf1d1109..57011092fa 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 2) +define(_CLIENT_VERSION_BUILD, 3) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From aef5f3f615645b63265a4b6beae7ab00a61471e4 Mon Sep 17 00:00:00 2001 From: Cy Rossignol Date: Thu, 1 Aug 2019 00:11:25 -0500 Subject: [PATCH 105/115] Add message argument to static assertons to support C++11 --- src/neuralnet/superblock.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/neuralnet/superblock.cpp b/src/neuralnet/superblock.cpp index 1891af4429..f7ea32af2b 100644 --- a/src/neuralnet/superblock.cpp +++ b/src/neuralnet/superblock.cpp @@ -328,9 +328,12 @@ Superblock::Superblock(uint32_t version) Superblock Superblock::FromStats(const ScraperStats& stats) { // The loop below depends on the relative value of these enum types: - static_assert(statsobjecttype::NetworkWide < statsobjecttype::byCPID); - static_assert(statsobjecttype::byCPID < statsobjecttype::byCPIDbyProject); - static_assert(statsobjecttype::byProject < statsobjecttype::byCPIDbyProject); + static_assert(statsobjecttype::NetworkWide < statsobjecttype::byCPID, + "Unexpected enumeration order of scraper stats map object types."); + static_assert(statsobjecttype::byCPID < statsobjecttype::byCPIDbyProject, + "Unexpected enumeration order of scraper stats map object types."); + static_assert(statsobjecttype::byProject < statsobjecttype::byCPIDbyProject, + "Unexpected enumeration order of scraper stats map object types."); Superblock superblock; @@ -633,8 +636,8 @@ void Superblock::ProjectIndex::Add(std::string name, const ProjectStats& stats) // Class: QuorumHash // ----------------------------------------------------------------------------- -static_assert(sizeof(uint256) == 32); -static_assert(sizeof(QuorumHash::Md5Sum) == 16); +static_assert(sizeof(uint256) == 32, "Unexpected uint256 size."); +static_assert(sizeof(QuorumHash::Md5Sum) == 16, "Unexpected MD5 size."); QuorumHash::QuorumHash() : m_hash(Invalid()) { From b5fbdc4c918075031d561b073f31311844b317e6 Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Thu, 1 Aug 2019 08:11:58 +0200 Subject: [PATCH 106/115] Bump version. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 57011092fa..fdb3663a0d 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 3) +define(_CLIENT_VERSION_BUILD, 4) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From f74aeb1811a3d2a304bf8bf7d442b14aee44faef Mon Sep 17 00:00:00 2001 From: Marco Nilsson Date: Sat, 3 Aug 2019 08:48:02 +0200 Subject: [PATCH 107/115] Update version. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 57011092fa..1ba58c9075 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 3) +define(_CLIENT_VERSION_BUILD, 5) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From 6cfbe309697e3bf9ca6ed137883d69ee2fc3e9b1 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 4 Aug 2019 23:26:47 -0400 Subject: [PATCH 108/115] Change spacer minimum height hint This hopefully fixes the lock fall of the page issue (again). --- src/qt/bitcoingui.cpp | 9 --------- src/qt/forms/overviewpage.ui | 4 ++-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index d06ef23329..aa1cf28776 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -453,8 +453,6 @@ void BitcoinGUI::createToolBars() toolbar->addAction(addressBookAction); toolbar->addAction(votingAction); - // Prevent Lock from falling off the page - QWidget* spacer = new QWidget(); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); toolbar->addWidget(spacer); @@ -462,13 +460,6 @@ void BitcoinGUI::createToolBars() // Unlock Wallet toolbar->addAction(unlockWalletAction); toolbar->addAction(lockWalletAction); - QWidget* webSpacer = new QWidget(); - - webSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - webSpacer->setMaximumHeight(10); - toolbar->addWidget(webSpacer); - webSpacer->setObjectName("WebSpacer"); - // Status bar notification icons QFrame *frameBlocks = new QFrame(); diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index e71f73e85e..3244d566fd 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -255,7 +255,7 @@ 20 - 20 + 40 @@ -413,7 +413,7 @@ 20 - 10 + 40 From 2baa3fde50bec920e0148f6fb0540b8f752e381e Mon Sep 17 00:00:00 2001 From: jamescowens Date: Wed, 7 Aug 2019 22:02:05 -0400 Subject: [PATCH 109/115] Bump version --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 1ba58c9075..40a6496018 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 5) +define(_CLIENT_VERSION_BUILD, 6) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From 4c3eac5865741f223319a873307374db5575defa Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 10 Aug 2019 16:41:03 -0400 Subject: [PATCH 110/115] Implements in memory versioning for Team file ETags Also corrects storage of team IDs for projects in the TeamIDs.csv.gz to correctly deal with teams that do not have IDs for some of the whitelisted projects. --- src/scraper/scraper.cpp | 94 ++++++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 16 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index a6a98e0a00..c9f6e6bbec 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -67,10 +67,18 @@ struct ScraperFileManifest int64_t timestamp; }; +// Both TeamIDMap and ProjTeamETags are protected by cs_TeamIDMap. // --------------- project -------------team name -- teamID typedef std::map> mTeamIDs; mTeamIDs TeamIDMap; +// ProjTeamETags is not persisted to disk. There would be little to be gained by doing so. The scrapers are restarted very +// rarely, and on restart, this would only save downloading team files for those projects that have one or TeamIDs missing AND +// an ETag had NOT changed since the last pull. Not worth the complexity. +// --------------- project ---- eTag +typedef std::map mProjectTeamETags; +mProjectTeamETags ProjTeamETags; + std::string urlsanity(const std::string& s, const std::string& type); std::string lowercase(std::string s); std::string ExtractXML(const std::string& XMLdata, const std::string& key, const std::string& key_end); @@ -1416,10 +1424,13 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) if (fDebug3) _log(logattribute::INFO, "LOCK", "cs_TeamIDMap"); const auto iter = TeamIDMap.find(prjs.m_name); + bool fProjTeamIDsMissing = false; + + if (iter == TeamIDMap.end() || iter->second.size() != split(TEAM_WHITELIST, "|").size()) fProjTeamIDsMissing = true; - // If fExplorer is false, which means we do not need to retain team files, and there is an entry in the TeamIDMap for the project, - // and in the submap (team name and team id) there are the correct number of team entries, then skip processing. - if (!fExplorer && iter != TeamIDMap.end() && iter->second.size() == split(TEAM_WHITELIST, "|").size()) + // If fExplorer is false, which means we do not need to retain team files, and there are no TeamID entries missing, + // then skip processing altogether. + if (!fExplorer && !fProjTeamIDsMissing) { _log(logattribute::INFO, "DownloadProjectTeamFiles", "Correct team whitelist entries already in the team ID map for " + prjs.m_name + " project. Skipping team file download and processing."); @@ -1478,12 +1489,26 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) std::string team_file_name; fs::path team_file; - std::map mTeamIDsForProject; bool bDownloadFlag = false; + bool bETagChanged = false; + + // Detect change in ETag from in memory versioning. + // ProjTeamETags is not persisted to disk. There would be little to be gained by doing so. The scrapers are restarted very + // rarely, and on restart, this would only save downloading team files for those projects that have one or TeamIDs missing AND + // an ETag had NOT changed since the last pull. Not worth the complexity. + auto const& iPrevETag = ProjTeamETags.find(prjs.m_name); + + if (iPrevETag == ProjTeamETags.end() || iPrevETag->second != sTeamETag) + { + bETagChanged = true; + + _log(logattribute::INFO, "DownloadProjectTeamFiles", "Team header file ETag has changed for " + prjs.m_name); + } + if (fExplorer) { - // Use eTag versioning. + // Use eTag versioning ON THE DISK with eTag versioned team files per project. team_file_name = prjs.m_name + "-" + sTeamETag + "-team.gz"; team_file = pathScraper / team_file_name; @@ -1500,16 +1525,26 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) } else { - // No versioning. If file exists delete it and download anew. + // Not in explorer mode... + // No versioning ON THE DISK for the individual team files for a given project. However, if the eTag pulled from the header + // does not match the entry in ProjTeamETags, then download the file and process. Note that this combined with the size check + // above means that the size of the inner map for the mTeamIDs for this project already doesn't match, which means either there + // were teams that cannot be associated (-1 entries in the file), or there was an addition to or deletion from the team + // whitelist. Either way if the ETag has changed under this condition, the -1 entries may be subject to change so the team file + // must be downloaded and processed to see if it has and update. If the ETag matches what was in the map, then the state + // has not changed since the team file was last processed, and no need to download and process again. team_file_name = prjs.m_name + "-team.gz"; team_file = pathScraper / team_file_name; - if (fs::exists(team_file)) fs::remove(team_file); + if (bETagChanged) + { + if (fs::exists(team_file)) fs::remove(team_file); - bDownloadFlag = true; + bDownloadFlag = true; + } } - // If in explorer mode and a new file is detected, or not in explorer mode, then download new file. (I.e. bDownload flag is true). + // If a new team file at the project site is detected, then download new file. (I.e. bDownload flag is true). if (bDownloadFlag) { try @@ -1528,8 +1563,9 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) // processing. if (fExplorer && bDownloadFlag) AlignScraperFileManifestEntries(team_file, "team", prjs.m_name, true); - // If require team whitelist is set, then process the file. This also populates the whitelist. - if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP) ProcessProjectTeamFile(prjs.m_name, team_file, sTeamETag); + // If require team whitelist is set and bETagChanged is true, then process the file. This also populates/updated the team whitelist TeamIDs + // in the TeamIDMap and the ETag entries in the ProjTeamETags map. + if (REQUIRE_TEAM_WHITELIST_MEMBERSHIP && bETagChanged) ProcessProjectTeamFile(prjs.m_name, team_file, sTeamETag); if (fDebug3) _log(logattribute::INFO, "ENDLOCK", "cs_TeamIDMap"); } @@ -1538,7 +1574,8 @@ bool DownloadProjectTeamFiles(const NN::WhitelistSnapshot& projectWhitelist) } - +// Note this should be called with a lock held on cs_TeamIDMap, which is intended to protect both +// TeamIDMap and ProjTeamETags. bool ProcessProjectTeamFile(const std::string& project, const fs::path& file, const std::string& etag) { std::map mTeamIdsForProject; @@ -1553,7 +1590,7 @@ bool ProcessProjectTeamFile(const std::string& project, const fs::path& file, co { _log(logattribute::ERR, "ProcessProjectTeamFile", "Failed to open team gzip file (" + file.filename().string() + ")"); - return 0; + return false; } _log(logattribute::INFO, "ProcessProjectTeamFile", "Opening team file (" + file.filename().string() + ")"); @@ -1622,8 +1659,11 @@ bool ProcessProjectTeamFile(const std::string& project, const fs::path& file, co // Insert or update team IDs for the project into the team ID map. This must be done before the StoreTeamIDList. TeamIDMap[project] = mTeamIdsForProject; + // Populate/update ProjTeamETags with the eTag to provide in memory versioning. + ProjTeamETags[project] = etag; + if (mTeamIdsForProject.size() < vTeamWhiteList.size()) - _log(logattribute::ERR, "ProcessProjectTeamFile", "Unable to determine team IDs for one or more whitelisted teams."); + _log(logattribute::WARNING, "ProcessProjectTeamFile", "Unable to determine team IDs for one or more whitelisted teams. This is not necessarily an error."); // The below is not an ideal implementation, because the entire map is going to be written out to disk each time. // The TeamIDs file is actually very small though, and this primitive implementation will suffice. @@ -2158,9 +2198,13 @@ bool LoadTeamIDList(const fs::path& file) continue; } - std::string sTeamName = vTeamNames.at(iTeamName); + // Don't populate a map entry for a TeamID of -1, because that indicates the association does not exist. + if (nTeamID != -1) + { + std::string sTeamName = vTeamNames.at(iTeamName); - mTeamIDsForProject[sTeamName] = nTeamID; + mTeamIDsForProject[sTeamName] = nTeamID; + } } iTeamName++; @@ -2287,8 +2331,26 @@ bool StoreTeamIDList(const fs::path& file) stream << iProject.first; + for (auto const& iTeam: setTeamWhiteList) + { + // iter will point to the key in the inner map for that team. The second value of the iter will then be + // the TeamID. If it doesn't exist, store a -1 as a "NA" placeholder. + auto const& iter = iProject.second.find(iTeam); + + if (iter != iProject.second.end()) + { + sProjectEntry += "|" + std::to_string(iter->second); + } + else + { + sProjectEntry += "|-1"; + } + } + + /* for (auto const& iTeam : iProject.second) sProjectEntry += "|" + std::to_string(iTeam.second); + */ stream << sProjectEntry << std::endl; } From 1c8c5c07f4c9d47afcf57bb7cbb5f0d699b8c0b6 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sat, 10 Aug 2019 22:52:15 -0400 Subject: [PATCH 111/115] Bump version --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 40a6496018..45081b6d1f 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 6) +define(_CLIENT_VERSION_BUILD, 7) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From 822caa79edbb4ed172da6c01d5f962555711df55 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 11 Aug 2019 01:57:15 -0400 Subject: [PATCH 112/115] Add Beacon Map size check to ensure convergence is not recorded in the cache before the BeaconMap can be properly populated. --- src/scraper/scraper.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/scraper/scraper.cpp b/src/scraper/scraper.cpp index c9f6e6bbec..338ed0e1e7 100755 --- a/src/scraper/scraper.cpp +++ b/src/scraper/scraper.cpp @@ -4285,7 +4285,15 @@ bool LoadBeaconListFromConvergedManifest(ConvergedManifest& StructConvergedManif _log(logattribute::INFO, "LoadBeaconListFromConvergedManifest", "mBeaconMap element count: " + std::to_string(mBeaconMap.size())); - return true; + // If the Beacon Map has no entries return false. + if (mBeaconMap.size()) + { + return true; + } + else + { + return false; + } } @@ -4418,12 +4426,10 @@ std::string ScraperGetNeuralContract(bool bStoreConvergedStats, bool bContractDi if (!bContractDirectFromStatsUpdate) { // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then - // you can't make a SB core and you can't make a contract, so return the empty string. - if (ScraperConstructConvergedManifest(StructConvergedManifest)) + // you can't make a SB core and you can't make a contract, so return the empty string. Also check + // to make sure the BeaconMap has been populated properly. + if (ScraperConstructConvergedManifest(StructConvergedManifest) && LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap)) { - // This is to display the element count in the beacon map. - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); _log(logattribute::INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); @@ -4584,12 +4590,10 @@ NN::Superblock ScraperGetSuperblockContract(bool bStoreConvergedStats, bool bCon if (!bContractDirectFromStatsUpdate) { // ScraperConstructConvergedManifest also culls old CScraperManifests. If no convergence, then - // you can't make a SB core and you can't make a contract, so return the empty string. - if (ScraperConstructConvergedManifest(StructConvergedManifest)) + // you can't make a SB core and you can't make a contract, so return the empty string. Also check + // to make sure the BeaconMap has been populated properly. + if (ScraperConstructConvergedManifest(StructConvergedManifest) && LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap)) { - // This is to display the element count in the beacon map. - LoadBeaconListFromConvergedManifest(StructConvergedManifest, mBeaconMap); - ScraperStats mScraperConvergedStats = GetScraperStatsByConvergedManifest(StructConvergedManifest); _log(logattribute::INFO, "ScraperGetNeuralContract", "mScraperStats has the following number of elements: " + std::to_string(mScraperConvergedStats.size())); From 4a2e129d20ffe95b7e5e39e1ae4a09748248b613 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Sun, 11 Aug 2019 02:35:17 -0400 Subject: [PATCH 113/115] Bump version --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 45081b6d1f..967ab44dcf 100755 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 7) +define(_CLIENT_VERSION_BUILD, 8) define(_CLIENT_VERSION_IS_RELEASE, false) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) From de68ce0ab226ffc856af96d3f4b340678da582e4 Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 20 Aug 2019 13:36:45 -0400 Subject: [PATCH 114/115] Update changelog for release --- CHANGELOG.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6ea13c626..268af70739 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,51 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [4.0.5.0] 2019-08-20, leisure +### Added + - Add freedesktop.org desktop file and icon set #1438 (@a123b) + - Add warning in help for blockchain scan for importprivkey #1469 (@jamescowens) + - Consolidateunspent rpc function #1472 (@jamescowens) + - Scraper 2.0 improvements #1481, #1488, #1509, and #1514 (@jamescowens, @cyrossignol) + - explorer mode operation + - simplified explainmagnitude output + - improved convergence reporting, including scraper information in the tooltip when fDebug3 is set + - improved statistics and SB contract core caching based on a bClean flag in the cache global + - new SB format and packing for bv11 + - new SB contract hashing (native) for bv11 + - changes to accomodate new beacon approach + - Implement in memory versioning for team file ETags + - Implement local dynamic team requirement removal and whitelist #1502 (@cyrossignol) + +### Changed + - Quiet logging for getmininginfo and scraper INFO logging level #1460 (@jamescowens) + - Spelling corrections #1461, #1462 (@caraka) + - Update crypto module #1453 (@denravonska) + - Update .travis.yml for Bionic #1475 (@jamescowens) + - Create CPID classes and clean up CPID code #1477 (@cyrossignol) + - Refactor researcher context and CPID harvesting #1480 (@cyrossignol) + - Remove boinckey export RPC method and import handler + - Notify when wallet locked in advertisebeacon RPC method #1504 (@cyrossignol) + - Notify when wallet locked in beaconstatus RPC method #1506 (@cyrossignol) + - Change spacer minimum height hint #1511 (@jamescowens) + +### Removed + - Remove safe mode #1434 (@denravonska) + - Remove bitcoin.moc in Makefile.qt.include #1444 (@RoboticMind) + - Clean up legacy Proof-of-Work functions #1497 (@cyrossignol) + +### Fixed + - Constrain walletpassphrase to 10000000 seconds #1459 (@jamescowens) + - Straighten out localization in the scraper. #1471 (@jamescowens) + - Quick fix for rainbymagnitude #1473 (@jamescowens) + - Correct negation error in scraper tooltip for vScrapersNotPublishing #1484 (@jamescowens) + - Fix staked block rejection when active researcher #1485 (@cyrossignol) + - Add back informational magnitude to generated blocks #1489 (@cyrossignol) + - Add back in the in sync check in ScraperGetNeuralContract #1492 (@jamescowens) + - Scraper correct team file processing. #1501 (@jamescowens) + - Have importwallet file path default to datadir #1508 (@jamescowens) + - Scraper add Beacon Map size check to ensure convergence #1515 (@jamescowens) + ## [4.0.4.0] 2019-05-16, leisure ### Fixed - Adds back the new user wizard inadvertently removed #1464 (@jamescowens). From 6888fe7ba292e9b4f4eaade60ce9cfd320a3089a Mon Sep 17 00:00:00 2001 From: jamescowens Date: Tue, 20 Aug 2019 13:38:20 -0400 Subject: [PATCH 115/115] Bump version for release --- configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 967ab44dcf..1e6a19fd70 100755 --- a/configure.ac +++ b/configure.ac @@ -2,9 +2,9 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 0) -define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 8) -define(_CLIENT_VERSION_IS_RELEASE, false) +define(_CLIENT_VERSION_REVISION, 5) +define(_CLIENT_VERSION_BUILD, 0) +define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2019) define(_COPYRIGHT_HOLDERS,[The %s developers]) define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Gridcoin]])