Merge pull request #3323 from UdjinM6/bp20200203

Backport candidates to v0.15.x
This commit is contained in:
UdjinM6 2020-02-04 15:33:18 +03:00 committed by GitHub
commit 1d507c92e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 324 additions and 116 deletions

View File

@ -7,6 +7,7 @@ architectures:
packages:
- "libssl-dev"
- "autoconf"
- "automake"
- "libtool"
- "pkg-config"
remotes:

View File

@ -72,7 +72,7 @@ future version.
Mempool sync improvements
-------------------------
Nodes joining the network will now always try to sync their mempool from other peers via the `mempool` p2p message.
Nodes joining the network will now try to sync their mempool from other v0.15+ peers via the `mempool` p2p message.
This behaviour can be disabled via the new `--syncmempool` option. Nodes serving such requests will now also push
`inv` p2p messages for InstandSend locks which are held for transactions in their mempool. These two changes
should help new nodes to quickly catchup on start and detect any potential double-spend as soon as possible.
@ -232,6 +232,16 @@ modules were reorganized in separate folders to make navigation through code a b
See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.14.0.5...dashpay:v0.15.0.0).
- [`2c305d02d`](https://github.com/dashpay/dash/commit/2c305d02d) Update translations 2020-02-03 (#3322)
- [`672e18e48`](https://github.com/dashpay/dash/commit/672e18e48) Only sync mempool from v0.15+ (proto 70216+) nodes (#3321)
- [`829bde81e`](https://github.com/dashpay/dash/commit/829bde81e) Fix dark text on dark background in combobox dropdowns on windows (#3315)
- [`c0a671e84`](https://github.com/dashpay/dash/commit/c0a671e84) Fix node protection logic false positives (#3314)
- [`8d5fc6e0a`](https://github.com/dashpay/dash/commit/8d5fc6e0a) Merge #13162: [net] Don't incorrectly log that REJECT messages are unknown.
- [`9e711befd`](https://github.com/dashpay/dash/commit/9e711befd) More of 13946
- [`e5e3572e9`](https://github.com/dashpay/dash/commit/e5e3572e9) Merge #13946: p2p: Clarify control flow in ProcessMessage
- [`dbbc51121`](https://github.com/dashpay/dash/commit/dbbc51121) Add `automake` package to dash-win-signer's packages list (#3307)
- [`fd0f24335`](https://github.com/dashpay/dash/commit/fd0f24335) [Trivial] Release note update (#3308)
- [`058872d4f`](https://github.com/dashpay/dash/commit/058872d4f) Update release-notes.md
- [`546e69f1a`](https://github.com/dashpay/dash/commit/546e69f1a) Fix CActiveMasternodeManager::GetLocalAddress to prefer IPv4 if multiple local addresses are known (#3304)
- [`e4ef7e8d0`](https://github.com/dashpay/dash/commit/e4ef7e8d0) Drop unused `invSet` in `CDKGSession` (#3303)
- [`da7686c93`](https://github.com/dashpay/dash/commit/da7686c93) Update translations 2020-01-23 (#3302)

View File

@ -208,7 +208,7 @@ void CMasternodeSync::ProcessTick(CConnman& connman)
// INITIAL TIMEOUT
if(nCurrentAsset == MASTERNODE_SYNC_WAITING) {
if(!pnode->fInbound && gArgs.GetBoolArg("-syncmempool", DEFAULT_SYNC_MEMPOOL) && !netfulfilledman.HasFulfilledRequest(pnode->addr, "mempool-sync")) {
if(pnode->nVersion >= 70216 && !pnode->fInbound && gArgs.GetBoolArg("-syncmempool", DEFAULT_SYNC_MEMPOOL) && !netfulfilledman.HasFulfilledRequest(pnode->addr, "mempool-sync")) {
netfulfilledman.AddFulfilledRequest(pnode->addr, "mempool-sync");
connman.PushMessage(pnode, msgMaker.Make(NetMsgType::MEMPOOL));
LogPrintf("CMasternodeSync::ProcessTick -- nTick %d nCurrentAsset %d -- syncing mempool from peer=%d\n", nTick, nCurrentAsset, pnode->GetId());

View File

@ -744,24 +744,6 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
int handled;
if (!msg.in_data) {
handled = msg.readHeader(pch, nBytes);
if (msg.in_data && nTimeFirstMessageReceived == 0) {
if (fSuccessfullyConnected) {
// First message after VERSION/VERACK.
// We record the time when the header is fully received and not when the full message is received.
// otherwise a peer might send us a very large message as first message after VERSION/VERACK and fill
// up our memory with multiple parallel connections doing this.
nTimeFirstMessageReceived = nTimeMicros;
fFirstMessageIsMNAUTH = msg.hdr.GetCommand() == NetMsgType::MNAUTH;
} else {
// We're still in the VERSION/VERACK handshake process, so any message received in this state is
// expected to be very small. This protects against attackers filling up memory by sending oversized
// VERSION messages while the incoming connection is still protected against eviction
if (msg.hdr.nMessageSize > 1024) {
LogPrint(BCLog::NET, "Oversized VERSION/VERACK message from peer=%i, disconnecting\n", GetId());
return false;
}
}
}
} else {
handled = msg.readData(pch, nBytes);
}
@ -1008,7 +990,7 @@ bool CConnman::AttemptToEvictConnection()
if (fMasternodeMode) {
// This handles eviction protected nodes. Nodes are always protected for a short time after the connection
// was accepted. This short time is meant for the VERSION/VERACK exchange and the possible MNAUTH that might
// follow when the incoming connection is from another masternode. When another message then MNAUTH
// follow when the incoming connection is from another masternode. When a message other than MNAUTH
// is received after VERSION/VERACK, the protection is lifted immediately.
bool isProtected = GetSystemTimeInSeconds() - node->nTimeConnected < INBOUND_EVICTION_PROTECTION_TIME;
if (node->nTimeFirstMessageReceived != 0 && !node->fFirstMessageIsMNAUTH) {

View File

@ -1789,10 +1789,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
}
LogPrint(BCLog::NET, "Reject %s\n", SanitizeString(ss.str()));
}
return true;
}
else if (strCommand == NetMsgType::VERSION)
{
if (strCommand == NetMsgType::VERSION) {
// Each connection can only send one version message
if (pfrom->nVersion != 0)
{
@ -1962,9 +1962,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
return true;
}
else if (pfrom->nVersion == 0)
{
if (pfrom->nVersion == 0) {
// Must have a version message before anything else
LOCK(cs_main);
Misbehaving(pfrom->GetId(), 1);
@ -2029,18 +2027,24 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
}
pfrom->fSuccessfullyConnected = true;
return true;
}
else if (!pfrom->fSuccessfullyConnected)
{
if (!pfrom->fSuccessfullyConnected) {
// Must have a verack message before anything else
LOCK(cs_main);
Misbehaving(pfrom->GetId(), 1);
return false;
}
else if (strCommand == NetMsgType::ADDR)
{
if (pfrom->nTimeFirstMessageReceived == 0) {
// First message after VERSION/VERACK
pfrom->nTimeFirstMessageReceived = GetTimeMicros();
pfrom->fFirstMessageIsMNAUTH = strCommand == NetMsgType::MNAUTH;
// Note: do not break the flow here
}
if (strCommand == NetMsgType::ADDR) {
std::vector<CAddress> vAddr;
vRecv >> vAddr;
@ -2086,17 +2090,16 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
pfrom->fGetAddr = false;
if (pfrom->fOneShot)
pfrom->fDisconnect = true;
return true;
}
else if (strCommand == NetMsgType::SENDHEADERS)
{
if (strCommand == NetMsgType::SENDHEADERS) {
LOCK(cs_main);
State(pfrom->GetId())->fPreferHeaders = true;
return true;
}
else if (strCommand == NetMsgType::SENDCMPCT)
{
if (strCommand == NetMsgType::SENDCMPCT) {
bool fAnnounceUsingCMPCTBLOCK = false;
uint64_t nCMPCTBLOCKVersion = 1;
vRecv >> fAnnounceUsingCMPCTBLOCK >> nCMPCTBLOCKVersion;
@ -2106,26 +2109,27 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
State(pfrom->GetId())->fPreferHeaderAndIDs = fAnnounceUsingCMPCTBLOCK;
State(pfrom->GetId())->fSupportsDesiredCmpctVersion = true;
}
return true;
}
else if (strCommand == NetMsgType::SENDDSQUEUE)
if (strCommand == NetMsgType::SENDDSQUEUE)
{
bool b;
vRecv >> b;
pfrom->fSendDSQueue = b;
return true;
}
else if (strCommand == NetMsgType::QSENDRECSIGS) {
if (strCommand == NetMsgType::QSENDRECSIGS) {
bool b;
vRecv >> b;
pfrom->fSendRecSigs = b;
return true;
}
else if (strCommand == NetMsgType::INV)
{
if (strCommand == NetMsgType::INV) {
std::vector<CInv> vInv;
vRecv >> vInv;
if (vInv.size() > MAX_INV_SZ)
@ -2219,11 +2223,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// Track requests for our stuff
GetMainSignals().Inventory(inv.hash);
}
return true;
}
else if (strCommand == NetMsgType::GETDATA)
{
if (strCommand == NetMsgType::GETDATA) {
std::vector<CInv> vInv;
vRecv >> vInv;
if (vInv.size() > MAX_INV_SZ)
@ -2241,11 +2244,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
pfrom->vRecvGetData.insert(pfrom->vRecvGetData.end(), vInv.begin(), vInv.end());
ProcessGetData(pfrom, chainparams.GetConsensus(), connman, interruptMsgProc);
return true;
}
else if (strCommand == NetMsgType::GETBLOCKS)
{
if (strCommand == NetMsgType::GETBLOCKS) {
CBlockLocator locator;
uint256 hashStop;
vRecv >> locator >> hashStop;
@ -2302,11 +2304,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
break;
}
}
return true;
}
else if (strCommand == NetMsgType::GETBLOCKTXN)
{
if (strCommand == NetMsgType::GETBLOCKTXN) {
BlockTransactionsRequest req;
vRecv >> req;
@ -2352,11 +2353,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
assert(ret);
SendBlockTransactions(block, req, pfrom, connman);
return true;
}
else if (strCommand == NetMsgType::GETHEADERS)
{
if (strCommand == NetMsgType::GETHEADERS) {
CBlockLocator locator;
uint256 hashStop;
vRecv >> locator >> hashStop;
@ -2414,11 +2414,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// in the SendMessages logic.
nodestate->pindexBestHeaderSent = pindex ? pindex : chainActive.Tip();
connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
return true;
}
else if (strCommand == NetMsgType::TX || strCommand == NetMsgType::DSTX || strCommand == NetMsgType::LEGACYTXLOCKREQUEST)
{
if (strCommand == NetMsgType::TX || strCommand == NetMsgType::DSTX || strCommand == NetMsgType::LEGACYTXLOCKREQUEST) {
// Stop processing the transaction early if
// We are in blocks only mode and peer is either not whitelisted or whitelistrelay is off
if (!fRelayTxes && (!pfrom->fWhitelisted || !gArgs.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY)))
@ -2606,9 +2605,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
Misbehaving(pfrom->GetId(), nDoS);
}
}
return true;
}
else if (strCommand == NetMsgType::CMPCTBLOCK && !fImporting && !fReindex) // Ignore blocks received while importing
if (strCommand == NetMsgType::CMPCTBLOCK && !fImporting && !fReindex) // Ignore blocks received while importing
{
CBlockHeaderAndShortTxIDs cmpctblock;
vRecv >> cmpctblock;
@ -2820,10 +2820,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
MarkBlockAsReceived(pblock->GetHash());
}
}
return true;
}
else if (strCommand == NetMsgType::BLOCKTXN && !fImporting && !fReindex) // Ignore blocks received while importing
if (strCommand == NetMsgType::BLOCKTXN && !fImporting && !fReindex) // Ignore blocks received while importing
{
BlockTransactions resp;
vRecv >> resp;
@ -2896,10 +2896,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
mapBlockSource.erase(pblock->GetHash());
}
}
return true;
}
else if (strCommand == NetMsgType::HEADERS && !fImporting && !fReindex) // Ignore headers received while importing
if (strCommand == NetMsgType::HEADERS && !fImporting && !fReindex) // Ignore headers received while importing
{
std::vector<CBlockHeader> headers;
@ -2924,7 +2924,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
return ProcessHeadersMessage(pfrom, connman, headers, chainparams, should_punish);
}
else if (strCommand == NetMsgType::BLOCK && !fImporting && !fReindex) // Ignore blocks received while importing
if (strCommand == NetMsgType::BLOCK && !fImporting && !fReindex) // Ignore blocks received while importing
{
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
vRecv >> *pblock;
@ -2950,11 +2950,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LOCK(cs_main);
mapBlockSource.erase(pblock->GetHash());
}
return true;
}
else if (strCommand == NetMsgType::GETADDR)
{
if (strCommand == NetMsgType::GETADDR) {
// This asymmetric behavior for inbound and outbound connections was introduced
// to prevent a fingerprinting attack: an attacker can send specific fake addresses
// to users' AddrMan and later request them by sending getaddr messages.
@ -2978,11 +2977,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
FastRandomContext insecure_rand;
for (const CAddress &addr : vAddr)
pfrom->PushAddress(addr, insecure_rand);
return true;
}
else if (strCommand == NetMsgType::MEMPOOL)
{
if (strCommand == NetMsgType::MEMPOOL) {
if (!(pfrom->GetLocalServices() & NODE_BLOOM) && !pfrom->fWhitelisted)
{
LogPrint(BCLog::NET, "mempool request with bloom filters disabled, disconnect peer=%d\n", pfrom->GetId());
@ -2999,11 +2997,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LOCK(pfrom->cs_inventory);
pfrom->fSendMempool = true;
return true;
}
else if (strCommand == NetMsgType::PING)
{
if (strCommand == NetMsgType::PING) {
if (pfrom->nVersion > BIP0031_VERSION)
{
uint64_t nonce = 0;
@ -3021,11 +3018,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
// return very quickly.
connman->PushMessage(pfrom, msgMaker.Make(NetMsgType::PONG, nonce));
}
return true;
}
else if (strCommand == NetMsgType::PONG)
{
if (strCommand == NetMsgType::PONG) {
int64_t pingUsecEnd = nTimeReceived;
uint64_t nonce = 0;
size_t nAvail = vRecv.in_avail();
@ -3078,11 +3074,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
if (bPingFinished) {
pfrom->nPingNonceSent = 0;
}
return true;
}
else if (strCommand == NetMsgType::FILTERLOAD)
{
if (strCommand == NetMsgType::FILTERLOAD) {
CBloomFilter filter;
vRecv >> filter;
@ -3100,11 +3095,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
pfrom->pfilter->UpdateEmptyFull();
pfrom->fRelayTxes = true;
}
return true;
}
else if (strCommand == NetMsgType::FILTERADD)
{
if (strCommand == NetMsgType::FILTERADD) {
std::vector<unsigned char> vData;
vRecv >> vData;
@ -3125,21 +3119,21 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LOCK(cs_main);
Misbehaving(pfrom->GetId(), 100);
}
return true;
}
else if (strCommand == NetMsgType::FILTERCLEAR)
{
if (strCommand == NetMsgType::FILTERCLEAR) {
LOCK(pfrom->cs_filter);
if (pfrom->GetLocalServices() & NODE_BLOOM) {
delete pfrom->pfilter;
pfrom->pfilter = new CBloomFilter();
}
pfrom->fRelayTxes = true;
return true;
}
else if (strCommand == NetMsgType::GETMNLISTDIFF) {
if (strCommand == NetMsgType::GETMNLISTDIFF) {
CGetSimplifiedMNListDiff cmd;
vRecv >> cmd;
@ -3153,57 +3147,57 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
LogPrint(BCLog::NET, "getmnlistdiff failed for baseBlockHash=%s, blockHash=%s. error=%s\n", cmd.baseBlockHash.ToString(), cmd.blockHash.ToString(), strError);
Misbehaving(pfrom->GetId(), 1);
}
return true;
}
else if (strCommand == NetMsgType::MNLISTDIFF) {
if (strCommand == NetMsgType::MNLISTDIFF) {
// we have never requested this
LOCK(cs_main);
Misbehaving(pfrom->GetId(), 100);
LogPrint(BCLog::NET, "received not-requested mnlistdiff. peer=%d\n", pfrom->GetId());
return true;
}
else if (strCommand == NetMsgType::NOTFOUND) {
if (strCommand == NetMsgType::NOTFOUND) {
// We do not care about the NOTFOUND message, but logging an Unknown Command
// message would be undesirable as we transmit it ourselves.
return true;
}
else {
bool found = false;
const std::vector<std::string> &allMessages = getAllNetMessageTypes();
for (const std::string msg : allMessages) {
if(msg == strCommand) {
found = true;
break;
}
bool found = false;
const std::vector<std::string> &allMessages = getAllNetMessageTypes();
for (const std::string msg : allMessages) {
if(msg == strCommand) {
found = true;
break;
}
}
if (found)
{
//probably one the extensions
if (found)
{
//probably one the extensions
#ifdef ENABLE_WALLET
privateSendClient.ProcessMessage(pfrom, strCommand, vRecv, *connman);
privateSendClient.ProcessMessage(pfrom, strCommand, vRecv, *connman);
#endif // ENABLE_WALLET
privateSendServer.ProcessMessage(pfrom, strCommand, vRecv, *connman);
sporkManager.ProcessSpork(pfrom, strCommand, vRecv, *connman);
masternodeSync.ProcessMessage(pfrom, strCommand, vRecv);
governance.ProcessMessage(pfrom, strCommand, vRecv, *connman);
CMNAuth::ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumBlockProcessor->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumDKGSessionManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumSigSharesManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumSigningManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::chainLocksHandler->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumInstantSendManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
}
else
{
// Ignore unknown commands for extensibility
LogPrint(BCLog::NET, "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand), pfrom->GetId());
}
privateSendServer.ProcessMessage(pfrom, strCommand, vRecv, *connman);
sporkManager.ProcessSpork(pfrom, strCommand, vRecv, *connman);
masternodeSync.ProcessMessage(pfrom, strCommand, vRecv);
governance.ProcessMessage(pfrom, strCommand, vRecv, *connman);
CMNAuth::ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumBlockProcessor->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumDKGSessionManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumSigSharesManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumSigningManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::chainLocksHandler->ProcessMessage(pfrom, strCommand, vRecv, *connman);
llmq::quorumInstantSendManager->ProcessMessage(pfrom, strCommand, vRecv, *connman);
return true;
}
// Ignore unknown commands for extensibility
LogPrint(BCLog::NET, "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand), pfrom->GetId());
return true;
}

View File

@ -597,6 +597,30 @@
<source>Information</source>
<translation>Informacja</translation>
</message>
<message>
<source>Received and sent multiple transactions</source>
<translation>Otrzymano i wysłano wiele transakcji</translation>
</message>
<message>
<source>Sent multiple transactions</source>
<translation>Wysłano wiele transakcji</translation>
</message>
<message>
<source>Received multiple transactions</source>
<translation>Otrzymano wiele transakcji</translation>
</message>
<message>
<source>Sent Amount: %1
</source>
<translation>Wyślij kowtę: %1
</translation>
</message>
<message>
<source>Received Amount: %1
</source>
<translation>Otrzymano kwotę: %1
</translation>
</message>
<message>
<source>Date: %1
</source>
@ -790,6 +814,10 @@
<source>Please switch to "List mode" to use this function.</source>
<translation>W celu użycia tej funkcji, przełącz na "Tryb Listy"</translation>
</message>
<message>
<source>Non-mixed input selected. &lt;b&gt;PrivateSend will be disabled.&lt;/b&gt;&lt;br&gt;&lt;br&gt;If you still want to use PrivateSend, please deselect all non-mixed inputs first and then check the PrivateSend checkbox again.</source>
<translation>Wybrane zostały niezmiksowane kwoty.&lt;b&gt;PrivateSend zostanie wyłączony.&lt;/b&gt;&lt;br&gt;&lt;br&gt;Jeśli dalej chcesz używać PrivateSend odhacz wszystkie niezmiksowane kwoty i ponownie wybierz PrivateSend.</translation>
</message>
<message>
<source>(%1 locked)</source>
<translation>(%1 zablokowane)</translation>
@ -963,7 +991,11 @@
<source>PrivateSend information</source>
<translation>Informacje o PrivateSend</translation>
</message>
</context>
<message>
<source>&lt;h3&gt;PrivateSend Basics&lt;/h3&gt; PrivateSend gives you true financial privacy by obscuring the origins of your funds. All the Dash in your wallet is comprised of different "inputs" which you can think of as separate, discrete coins.&lt;br&gt; PrivateSend uses an innovative process to mix your inputs with the inputs of two other people, without having your coins ever leave your wallet. You retain control of your money at all times.&lt;hr&gt; &lt;b&gt;The PrivateSend process works like this:&lt;/b&gt;&lt;ol type="1"&gt; &lt;li&gt;PrivateSend begins by breaking your transaction inputs down into standard denominations. These denominations are 0.001 DASH, 0.01 DASH, 0.1 DASH, 1 DASH and 10 DASH -- sort of like the paper money you use every day.&lt;/li&gt; &lt;li&gt;Your wallet then sends requests to specially configured software nodes on the network, called "masternodes." These masternodes are informed then that you are interested in mixing a certain denomination. No identifiable information is sent to the masternodes, so they never know "who" you are.&lt;/li&gt; &lt;li&gt;When two other people send similar messages, indicating that they wish to mix the same denomination, a mixing session begins. The masternode mixes up the inputs and instructs all three users' wallets to pay the now-transformed input back to themselves. Your wallet pays that denomination directly to itself, but in a different address (called a change address).&lt;/li&gt; &lt;li&gt;In order to fully obscure your funds, your wallet must repeat this process a number of times with each denomination. Each time the process is completed, it's called a "round." Each round of PrivateSend makes it exponentially more difficult to determine where your funds originated.&lt;/li&gt; &lt;li&gt;This mixing process happens in the background without any intervention on your part. When you wish to make a transaction, your funds will already be mixed. No additional waiting is required.&lt;/li&gt; &lt;/ol&gt; &lt;hr&gt;&lt;b&gt;IMPORTANT:&lt;/b&gt; Your wallet only contains 1000 of these "change addresses." Every time a mixing event happens, up to 9 of your addresses are used up. This means those 1000 addresses last for about 100 mixing events. When 900 of them are used, your wallet must create more addresses. It can only do this, however, if you have automatic backups enabled.&lt;br&gt; Consequently, users who have backups disabled will also have PrivateSend disabled. &lt;hr&gt;For more information, see the &lt;a href="https://docs.dash.org/en/stable/wallets/dashcore/privatesend-instantsend.html"&gt;PrivateSend documentation&lt;/a&gt;.</source>
<translation>&lt;h3&gt;Podstawy PrivateSend&lt;/h3&gt; PrivateSend daje ci prawdziwą anonimowość finansową poprzez zacieranie śladów prowadzących do osoby która wysłała daną transakcję. Wszystkie monety Dash w twoim portfelu składają się z różnych "kwot" o których możesz myśleć jako osobne nominały monet.&lt;br&gt; PrivateSend używa innowacyjny proces do mieszania twoich monet razem z monetami dwóch innych użytkowników bez potrzeby opuszczania portfela. Przez cały czas posiadasz kontrolę nad twoimi funduszami. &lt;hr&gt;&lt;b&gt;PrivateSend działa w ten sposób: &lt;/b&gt;&lt;ol type="1"&gt;&lt;li&gt; PrivateSend rozpoczyna rozmienianie twoich monet na standardowe nominały czyli 0.001 DASH, 0.01 DASH, 0.1 DASH, 1 DASH, 10 DASH - coś w rodzaju nominałów banknotów. &lt;/li&gt;&lt;li&gt; Następnie, twój portfel wysyła prośbę do specjalnie skonfigurowanych serewerów sieci zwanych jako "masternody". Masternody te zostają poinformowane że chcesz wymieszać pewne nominały swoich monet. Żadne informacje mogące cię zidentyfikować zostają wysłane do masternodów, więc nie wiedzą one kim jesteś. &lt;/li&gt;&lt;li&gt; Kiedy dwoje innych użytkowników wyśle podobne prośby o wymieszanie takich samych nominałów, rozpoczyna się sesja miksowania. Masternode miesza dane nominały oraz wydaje polecenie portfelom danych użytkowników aby te wysłały wymieszane kwoty do samych siebie ale na nowy adres (również znany jako adres reszty). &lt;/li&gt;&lt;li&gt; Aby całkowicie zanonimizować fundusze, twój portfel wielokrotnie powtarza ten sam proces z każdym nominałem. Pojedyńczy proces nazywa się "runda". Trudność wyśledzenia źródła funduszy rośnie wykładniczo z każdą dodatkową rundą PrivateSend. &lt;/li&gt;&lt;li&gt; Proces mieszania odbywa się w tle, bez jakiejkolwiek potrzeby interwencji. Kiedy chcesz dokonać anonimowej transakcji twoje fundusze będą już wymieszane i gotowe do wysyłki. &lt;/li&gt;&lt;/ol&gt;&lt;hr&gt;&lt;b&gt; UWAGA:&lt;/b&gt; Twój portfel posiada jedynie 1000 "adresów reszty." Za każdym razem kiedy odbywa się sesja miksowania monet, aż 9 adresów może zostać zużytych. Oznacza to, że 1000 adresów reszty może wystarczyć na około 100 rund miksowania. Jeśli 900 adresów zostanie zużyte twój portfel musi wygenerować więcej adresów. Twój portfel może to zrobić jedynie jeśli masz włączone automatyczne tworzenie kopii zapasowych. &lt;br&gt;Jeżeli użytkownik nie ma włączonej opcji automatycznego tworzenia kopii zapasowych to onzacza że nie będzie mógł korzystać z PrivateSend. &lt;hr&gt; Więcej informacji możesz znaleźć w &lt;a href="https://docs.dash.org/en/stable/wallets/dashcore/privatesend-instantsend.html"&gt; pełnej dokumentacji PrivateSend&lt;/a&gt;.</translation>
</message>
</context>
<context>
<name>Intro</name>
<message>
@ -1065,6 +1097,10 @@
<source>My masternodes only</source>
<translation>Tylko moje masternody</translation>
</message>
<message>
<source>Service</source>
<translation>Usługa</translation>
</message>
<message>
<source>PoSe Score</source>
<translation>Wynik PoSe</translation>
@ -1081,10 +1117,26 @@
<source>Next Payment</source>
<translation>Następna płatność</translation>
</message>
<message>
<source>Payout Address</source>
<translation>Adres Wypłaty</translation>
</message>
<message>
<source>Operator Reward</source>
<translation>Nagroda dla operatora</translation>
</message>
<message>
<source>Collateral Address</source>
<translation>Adres Zastawu</translation>
</message>
<message>
<source>Owner Address</source>
<translation>Adres Właściciela</translation>
</message>
<message>
<source>Voting Address</source>
<translation>Adres głosujący</translation>
</message>
<message>
<source>Copy ProTx Hash</source>
<translation>Skopiuj ProTx Hash</translation>
@ -1274,6 +1326,10 @@
<source>This amount acts as a threshold to turn off PrivateSend once it's reached.</source>
<translation>Ta kwota działa jako próg, po którego przekroczeniu PrivateSend zostaje wyłączony.</translation>
</message>
<message>
<source>Target PrivateSend balance</source>
<translation>Celem jest bilans PrivateSend</translation>
</message>
<message>
<source>Automatically open the Dash Core client port on the router. This only works when your router supports UPnP and it is enabled.</source>
<translation>Automatycznie otwórz port klienta Dash Core na ruterze. Opcja działa jedynie, jeżeli router obsługuje UPnP i funkcja UPnP jest włączona.</translation>
@ -1330,6 +1386,10 @@
<source>&amp;Spend unconfirmed change</source>
<translation>&amp;Wydaj niepotwierdzoną resztę</translation>
</message>
<message>
<source>This setting determines the amount of individual masternodes that an input will be mixed through.&lt;br/&gt;More rounds of mixing gives a higher degree of privacy, but also costs more in fees.</source>
<translation>To ustawienie decyduje o liczbie osobnych masternodów któe będą miksować wybraną kwotę. &lt;br/&gt;Im więcej rund mieszania, tym większy poziom prywatności, ale również kosztuje więcej w opłatach za transakcje.</translation>
</message>
<message>
<source>&amp;Network</source>
<translation>&amp;Sieć</translation>
@ -1659,6 +1719,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Denominated</source>
<translation>Denominowane</translation>
</message>
<message>
<source>Partially mixed</source>
<translation>Częściowo wymieszane</translation>
</message>
<message>
<source>Mixed</source>
<translation>Zmiksowane</translation>
@ -2745,10 +2809,34 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>&lt;b&gt;(%1 of %2 entries displayed)&lt;/b&gt;</source>
<translation>&lt;b&gt;(%1 z %2 wyświetlonych wpisów)&lt;/b&gt;</translation>
</message>
<message>
<source>PrivateSend funds only</source>
<translation>Tylko fundusze PrivateSend</translation>
</message>
<message>
<source>any available funds</source>
<translation>jakiekolwiek dostępne środki</translation>
</message>
<message>
<source>(PrivateSend transactions have higher fees usually due to no change output being allowed)</source>
<translation>(Transakcje PrivateSend mają większe opłaty ponieważ reszta nie jest zwracana do odbiorcy)</translation>
</message>
<message>
<source>Transaction size: %1</source>
<translation>Rozmiar transakcji: %1</translation>
</message>
<message>
<source>Fee rate: %1</source>
<translation>Opłata: %1</translation>
</message>
<message numerus="yes">
<source>This transaction will consume %n input(s)</source>
<translation><numerusform>Transakcja ta zużyje %n nominał</numerusform><numerusform>Transakcja ta zużyje %n nominały</numerusform><numerusform>Transakcja ta zużyje %n nominałów</numerusform><numerusform>Transakcja ta zużyje %n nominałów</numerusform></translation>
</message>
<message>
<source>Warning: Using PrivateSend with %1 or more inputs can harm your privacy and is not recommended</source>
<translation>Uwaga: Używanie PrivateSend z %1 lub więcej nominałami może stanowić zagrożenie dla twojej anonimowości i nie jest zalecane.</translation>
</message>
<message>
<source>Confirm send coins</source>
<translation>Potwierdź wysyłanie monet</translation>
@ -3882,6 +3970,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Overrides minimum spork signers to change spork value. Only useful for regtest and devnet. Using this on mainnet or testnet will ban you.</source>
<translation>Zastępuje minimalną liczbę osób podpsujących sporka. Użyeczne tylko dla regtest oraz devnet. Używanie tego na normalnej sieci lub testnecie zaskutkuje banem.</translation>
</message>
<message>
<source>PrivateSend uses exact denominated amounts to send funds, you might simply need to mix some more coins.</source>
<translation>PrivateSend używa dokładnie zdenominowanych kwot, możliwe że musisz zmiksować więcej monet. </translation>
</message>
<message>
<source>Use N separate masternodes in parallel to mix funds (%u-%u, default: %u)</source>
<translation>Użyj N osobnych masternodów jednocześnie aby wymieszać monety (%u-%u, domyślnie: %u)</translation>
@ -4002,6 +4094,14 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Invalid minimum number of spork signers specified with -minsporkkeys</source>
<translation>Nieważna minimalna liczba osób podpisujących sporka ustawiona z -minsporkkeys</translation>
</message>
<message>
<source>Keep N DASH mixed (%u-%u, default: %u)</source>
<translation>Trzymaj N DASH wymieszane (%u-%u, domyślnie: %u)</translation>
</message>
<message>
<source>Keep at most &lt;n&gt; unconnectable transactions in memory (default: %u)</source>
<translation>Trzymaj nie więcej niż &lt;n&gt; niepołączonych transakcji w pamięci (domyślnie: %u)</translation>
</message>
<message>
<source>Keypool ran out, please call keypoolrefill first</source>
<translation>Wyczerpana pula kluczy, najpierw wywołaj keypoolrefill</translation>
@ -4058,6 +4158,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>No compatible Masternode found.</source>
<translation>Nie znalezione zadnego kompatybilnego Masternoda.</translation>
</message>
<message>
<source>Not enough funds to mix.</source>
<translation>Nie masz wystarczających środków do mieszania.</translation>
</message>
<message>
<source>Not in the Masternode list.</source>
<translation>Nie istnieje na liście masternodów.</translation>
@ -4218,10 +4322,22 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>%s file contains all private keys from this wallet. Do not share it with anyone!</source>
<translation>%s plik zawiera wszystkie klucze prywatne przechowywane w tym portfelu. Nie dawaj nikomu dostępu do tego pliku. </translation>
</message>
<message>
<source>-masternode option is deprecated and ignored, specifying -masternodeblsprivkey is enough to start this node as a masternode.</source>
<translation>-masternode funkcja ta jest przestarzała i ignorowana, -masterndebisprivkey wystarczy do uruchomienia tego węzłą jako masternode. </translation>
</message>
<message>
<source>Add a node to connect to and attempt to keep the connection open (see the `addnode` RPC command help for more info)</source>
<translation>Dodaj węzeł do którego chcesz się połączyć oraz próbuj utrzymać to połączenie otwarte (zobacz 'addnode' RPC komenda pomoc po więcej informacji)</translation>
</message>
<message>
<source>Bind to given address to listen for JSON-RPC connections. This option is ignored unless -rpcallowip is also passed. Port is optional and overrides -rpcport. Use [host]:port notation for IPv6. This option can be specified multiple times (default: 127.0.0.1 and ::1 i.e., localhost, or if -rpcallowip has been specified, 0.0.0.0 and :: i.e., all addresses)</source>
<translation>Powiąż z podanym adresem, aby nasłuchiwać połączeń JSON-RPC. Ta opcja jest ignorowana, chyba że przekazany zostanie także -rpcallowip. Port jest opcjonalny i zastępuje -rpcport. Użyj [host]: notacja portu dla IPv6. Ta opcja może być podana wiele razy (domyślnie: 127.0.0.1 i :: 1 tj. Localhost lub jeśli podano -rpcallowip, 0.0.0.0 i :: tj. wszystkie adresy)</translation>
</message>
<message>
<source>Connect only to the specified node(s); -connect=0 disables automatic connections (the rules for this peer are the same as for -addnode)</source>
<translation>Połącz tylko do wyznaczonych węzłów(a); -connect=0 wyłącza automatyczne połączenia (zasady dla tego węzła takie same jak dla -addnode)</translation>
</message>
<message>
<source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
<translation>Wykryj własny adres IP (domyślnie: 1 kiedy nasłuchuje, bez stosowania -externalip lub -proxy)</translation>
@ -4274,6 +4390,14 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Maintain at most &lt;n&gt; connections to peers (temporary service connections excluded) (default: %u)</source>
<translation>Utrzymuj nie więcej niż &lt;n&gt; połączeń z peerami (tymczasowe połączenia serwisowe nie liczone) (domyślnie: %u)</translation>
</message>
<message>
<source>Make sure to encrypt your wallet and delete all non-encrypted backups after you have verified that the wallet works!</source>
<translation>Jeśli już zweryfikowałeś że porfel działa jak należy, to nie zapomnij zaszyfrować porfel oraz usunąć wszystkie niezaszyfrowane kopie zapasowe.</translation>
</message>
<message>
<source>Maximum total size of all orphan transactions in megabytes (default: %u)</source>
<translation>Całkowity maksymalny rozmiar wszystkich osieroconych transakcji w megabytach (domyślnie: %u)</translation>
</message>
<message>
<source>Prune configured below the minimum of %d MiB. Please use a higher number.</source>
<translation>Czyszczenie starych danych ustawiono poniżej minimum %d MiB. Ustaw wyższą wartość.</translation>
@ -4294,6 +4418,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Rescans are not possible in pruned mode. You will need to use -reindex which will download the whole blockchain again.</source>
<translation>Ponownie skanowanie jest niemożliwe w trybie oczyszczania. Użyj -reindex, co spowoduje ponowne pobranie całego łańcucha bloków.</translation>
</message>
<message>
<source>Set the masternode BLS private key and enable the client to act as a masternode</source>
<translation>Wyznacz prywatny klucz BLS dla masternoda oraz pozwól klienotowi na działanie jako masternode. </translation>
</message>
<message>
<source>Specify full path to directory for automatic wallet backups (must exist)</source>
<translation>Podaj pełną ścieżkę do (istniejącego) katalogu na automatyczne kopie zapasowe portfela</translation>
@ -4350,6 +4478,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Warning: Unknown block versions being mined! It's possible unknown rules are in effect</source>
<translation>Uwaga: Wykopywane bloki o nieznanej wersji! Możliwe, że zostały aktywowane inne zasady na których opiera się sieć.</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex to change -timestampindex</source>
<translation>Musisz odnowić bazę danych używając -reindex aby zmienić -timestampindex</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain</source>
<translation>Aby wrócić do trybu bez bez obcinki, musisz odtworzyć bazę danych za pomocą komendy -reindex. Cały blockchain zostanie ponownie ściągnięty.</translation>
@ -4662,6 +4794,14 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>You can not start a masternode with wallet enabled.</source>
<translation>Nie możesz uruchomić masternode z włączonym portfelem.</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex to change -addressindex</source>
<translation>Musisz odnowić bazę danych używając -reindex aby zmienić -addressindex</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex to change -spentindex</source>
<translation>Musisz odnowić bazę danych używając -reindex aby zmienić -spentindex</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex to change -txindex</source>
<translation>Musisz odnowić bazę danych używając -reindex aby zmienić -txindex</translation>

View File

@ -1326,6 +1326,10 @@
<source>This amount acts as a threshold to turn off PrivateSend once it's reached.</source>
<translation>Bu tutar ulaşıldığında Özel Gönderi kapatacak bir eşik olarak çalışır.</translation>
</message>
<message>
<source>Target PrivateSend balance</source>
<translation>ÖzelGönder bakiyesi hedefle</translation>
</message>
<message>
<source>Automatically open the Dash Core client port on the router. This only works when your router supports UPnP and it is enabled.</source>
<translation>Router'da otomatik olarak Dash Core istemcisi portu aç. Bu sadece router'ınız UPnP destekliyorsa ve etkinse çalışır.</translation>
@ -1715,6 +1719,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Denominated</source>
<translation>Birimlendirildi</translation>
</message>
<message>
<source>Partially mixed</source>
<translation>Kısmen karıştırılmış</translation>
</message>
<message>
<source>Mixed</source>
<translation>Karıştırıldı</translation>
@ -2801,6 +2809,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>&lt;b&gt;(%1 of %2 entries displayed)&lt;/b&gt;</source>
<translation>&lt;b&gt;(%1 / %2 girdi gösteriliyor)&lt;/b&gt;</translation>
</message>
<message>
<source>PrivateSend funds only</source>
<translation>Yalnızca ÖzelGönder fonları</translation>
</message>
<message>
<source>any available funds</source>
<translation>mevcut fonlar</translation>
@ -2817,6 +2829,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Fee rate: %1</source>
<translation>Ücret oranı: %1</translation>
</message>
<message numerus="yes">
<source>This transaction will consume %n input(s)</source>
<translation><numerusform>Bu işlem %n girdi tüketecektir</numerusform><numerusform>Bu işlem %n girdi tüketecektir</numerusform></translation>
</message>
<message>
<source>Warning: Using PrivateSend with %1 or more inputs can harm your privacy and is not recommended</source>
<translation>Uyarı: %1 veya daha fazla girdi ile ÖzelGönder kullanmak gizliliğinize zarar verebilir ve tavsiye edilmez</translation>

View File

@ -814,6 +814,10 @@
<source>Please switch to "List mode" to use this function.</source>
<translation>使</translation>
</message>
<message>
<source>Non-mixed input selected. &lt;b&gt;PrivateSend will be disabled.&lt;/b&gt;&lt;br&gt;&lt;br&gt;If you still want to use PrivateSend, please deselect all non-mixed inputs first and then check the PrivateSend checkbox again.</source>
<translation> &lt;b&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;</translation>
</message>
<message>
<source>(%1 locked)</source>
<translation>(%1 )</translation>
@ -987,7 +991,11 @@
<source>PrivateSend information</source>
<translation></translation>
</message>
</context>
<message>
<source>&lt;h3&gt;PrivateSend Basics&lt;/h3&gt; PrivateSend gives you true financial privacy by obscuring the origins of your funds. All the Dash in your wallet is comprised of different "inputs" which you can think of as separate, discrete coins.&lt;br&gt; PrivateSend uses an innovative process to mix your inputs with the inputs of two other people, without having your coins ever leave your wallet. You retain control of your money at all times.&lt;hr&gt; &lt;b&gt;The PrivateSend process works like this:&lt;/b&gt;&lt;ol type="1"&gt; &lt;li&gt;PrivateSend begins by breaking your transaction inputs down into standard denominations. These denominations are 0.001 DASH, 0.01 DASH, 0.1 DASH, 1 DASH and 10 DASH -- sort of like the paper money you use every day.&lt;/li&gt; &lt;li&gt;Your wallet then sends requests to specially configured software nodes on the network, called "masternodes." These masternodes are informed then that you are interested in mixing a certain denomination. No identifiable information is sent to the masternodes, so they never know "who" you are.&lt;/li&gt; &lt;li&gt;When two other people send similar messages, indicating that they wish to mix the same denomination, a mixing session begins. The masternode mixes up the inputs and instructs all three users' wallets to pay the now-transformed input back to themselves. Your wallet pays that denomination directly to itself, but in a different address (called a change address).&lt;/li&gt; &lt;li&gt;In order to fully obscure your funds, your wallet must repeat this process a number of times with each denomination. Each time the process is completed, it's called a "round." Each round of PrivateSend makes it exponentially more difficult to determine where your funds originated.&lt;/li&gt; &lt;li&gt;This mixing process happens in the background without any intervention on your part. When you wish to make a transaction, your funds will already be mixed. No additional waiting is required.&lt;/li&gt; &lt;/ol&gt; &lt;hr&gt;&lt;b&gt;IMPORTANT:&lt;/b&gt; Your wallet only contains 1000 of these "change addresses." Every time a mixing event happens, up to 9 of your addresses are used up. This means those 1000 addresses last for about 100 mixing events. When 900 of them are used, your wallet must create more addresses. It can only do this, however, if you have automatic backups enabled.&lt;br&gt; Consequently, users who have backups disabled will also have PrivateSend disabled. &lt;hr&gt;For more information, see the &lt;a href="https://docs.dash.org/en/stable/wallets/dashcore/privatesend-instantsend.html"&gt;PrivateSend documentation&lt;/a&gt;.</source>
<translation>&lt;h3&gt;&lt;/h3&gt; &lt;br&gt; 使&lt;hr&gt; &lt;b&gt;:&lt;/b&gt;&lt;ol type="1"&gt; &lt;li&gt;0.001 DASH, 0.01 DASH, 0.1 DASH, 1 DASH 10 DASH --使&lt;/li&gt; &lt;li&gt;""&lt;/li&gt; &lt;li&gt; ()&lt;/li&gt; &lt;li&gt; ""&lt;/li&gt; &lt;li&gt;&lt;/li&gt; &lt;/ol&gt; :&lt;/b&gt; 1000"" 使91000100900使&lt;br&gt; &lt;hr&gt; &lt;a href="https://docs.dash.org/en/stable/wallets/dashcore/privatesend-instantsend.html"&gt;&lt;/a&gt;</translation>
</message>
</context>
<context>
<name>Intro</name>
<message>
@ -1378,6 +1386,10 @@
<source>&amp;Spend unconfirmed change</source>
<translation>(&amp;S)</translation>
</message>
<message>
<source>This setting determines the amount of individual masternodes that an input will be mixed through.&lt;br/&gt;More rounds of mixing gives a higher degree of privacy, but also costs more in fees.</source>
<translation>&lt;br/&gt;</translation>
</message>
<message>
<source>&amp;Network</source>
<translation>(&amp;N)</translation>
@ -1707,6 +1719,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Denominated</source>
<translation></translation>
</message>
<message>
<source>Partially mixed</source>
<translation></translation>
</message>
<message>
<source>Mixed</source>
<translation></translation>
@ -2793,10 +2809,18 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>&lt;b&gt;(%1 of %2 entries displayed)&lt;/b&gt;</source>
<translation>&lt;b&gt;( %2 %1 )&lt;/b&gt;</translation>
</message>
<message>
<source>PrivateSend funds only</source>
<translation></translation>
</message>
<message>
<source>any available funds</source>
<translation></translation>
</message>
<message>
<source>(PrivateSend transactions have higher fees usually due to no change output being allowed)</source>
<translation>()</translation>
</message>
<message>
<source>Transaction size: %1</source>
<translation>: %1</translation>
@ -2809,6 +2833,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>This transaction will consume %n input(s)</source>
<translation><numerusform> %n </numerusform></translation>
</message>
<message>
<source>Warning: Using PrivateSend with %1 or more inputs can harm your privacy and is not recommended</source>
<translation>警告: 將匿名發送資金與 %1 使使</translation>
</message>
<message>
<source>Confirm send coins</source>
<translation></translation>
@ -3942,6 +3970,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Overrides minimum spork signers to change spork value. Only useful for regtest and devnet. Using this on mainnet or testnet will ban you.</source>
<translation>regtest和devnet有用mainnet或testnet上使用它的話將封鎖你</translation>
</message>
<message>
<source>PrivateSend uses exact denominated amounts to send funds, you might simply need to mix some more coins.</source>
<translation>使</translation>
</message>
<message>
<source>Use N separate masternodes in parallel to mix funds (%u-%u, default: %u)</source>
<translation>使 N (%u-%u, : %u)</translation>
@ -4062,6 +4094,14 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Invalid minimum number of spork signers specified with -minsporkkeys</source>
<translation>使-minsporkkeys </translation>
</message>
<message>
<source>Keep N DASH mixed (%u-%u, default: %u)</source>
<translation> N (%u-%u, : %u)</translation>
</message>
<message>
<source>Keep at most &lt;n&gt; unconnectable transactions in memory (default: %u)</source>
<translation> &lt;n&gt; (: %u)</translation>
</message>
<message>
<source>Keypool ran out, please call keypoolrefill first</source>
<translation>Keypool 調 keypoolrefill </translation>
@ -4282,10 +4322,22 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>%s file contains all private keys from this wallet. Do not share it with anyone!</source>
<translation>%s !</translation>
</message>
<message>
<source>-masternode option is deprecated and ignored, specifying -masternodeblsprivkey is enough to start this node as a masternode.</source>
<translation>-masternode , -masternodeblsprivkey </translation>
</message>
<message>
<source>Add a node to connect to and attempt to keep the connection open (see the `addnode` RPC command help for more info)</source>
<translation> ( `addnode` RPC )</translation>
</message>
<message>
<source>Bind to given address to listen for JSON-RPC connections. This option is ignored unless -rpcallowip is also passed. Port is optional and overrides -rpcport. Use [host]:port notation for IPv6. This option can be specified multiple times (default: 127.0.0.1 and ::1 i.e., localhost, or if -rpcallowip has been specified, 0.0.0.0 and :: i.e., all addresses)</source>
<translation> JSON-RPC -rpcallowip-rpcportIPv6 []: (預設值: 127.0.0.1 and ::1 i.e., localhost, -rpcallowip , 0.0.0.0 and :: i.e., all addresses)</translation>
</message>
<message>
<source>Connect only to the specified node(s); -connect=0 disables automatic connections (the rules for this peer are the same as for -addnode)</source>
<translation>(s); -connect=0 ( -addnode的規則相同)</translation>
</message>
<message>
<source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
<translation>(預設值: 當有聽候連線且沒有 -externalip 1)</translation>
@ -4338,6 +4390,14 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Maintain at most &lt;n&gt; connections to peers (temporary service connections excluded) (default: %u)</source>
<translation> &lt;n&gt; () (: %u)</translation>
</message>
<message>
<source>Make sure to encrypt your wallet and delete all non-encrypted backups after you have verified that the wallet works!</source>
<translation>!</translation>
</message>
<message>
<source>Maximum total size of all orphan transactions in megabytes (default: %u)</source>
<translation>MB為單位 (: %u)</translation>
</message>
<message>
<source>Prune configured below the minimum of %d MiB. Please use a higher number.</source>
<translation>%d MB以下使</translation>
@ -4358,6 +4418,10 @@ https://www.transifex.com/projects/p/dash/</translation>
<source>Rescans are not possible in pruned mode. You will need to use -reindex which will download the whole blockchain again.</source>
<translation>使-reindex </translation>
</message>
<message>
<source>Set the masternode BLS private key and enable the client to act as a masternode</source>
<translation> BLS 使</translation>
</message>
<message>
<source>Specify full path to directory for automatic wallet backups (must exist)</source>
<translation> ()</translation>

View File

@ -185,6 +185,7 @@ border-image: url(':/images/arrow_down') 0 0 0 0 stretch stretch;
}
QComboBox QListView {
color: #aaa;
background: #555;
padding: 3px;
}