Compare commits

...

125 Commits

Author SHA1 Message Date
Wladimir J. van der Laan
fc61c8322b Merge #10588: doc: Note preexisting bug in display of fee calculation in coin control
60b967e Note preexisting bug in display of fee calculation in coin control (Alex Morcos)

Tree-SHA512: 0179654d313ea10b776781617cea744757344d8b4455153540f116978a72aabdc0a3092388b9cfbe8d0348b699943a9e41082ed964e161e4f3017dcd056e77fc
2017-06-15 12:44:01 +02:00
Alex Morcos
60b967ec41 Note preexisting bug in display of fee calculation in coin control 2017-06-14 14:34:29 -04:00
Wladimir J. van der Laan
7a643511b4 doc: Fill in details about miniupnp CVE-2017-8798 2017-06-07 13:06:11 +02:00
Wladimir J. van der Laan
5e408d99a2 doc: Update manpages for 0.14.2 2017-06-06 16:26:56 +02:00
Wladimir J. van der Laan
cc23438af0 qt: 0.14.2 pre-rc2 translations update 2017-06-06 15:06:16 +02:00
Wladimir J. van der Laan
21e1ed4898 doc: Preliminary release notes 0.14.2 2017-06-05 08:44:09 +02:00
Wladimir J. van der Laan
4a41de4585 build: bump version to 0.14.2 2017-06-02 07:39:56 +02:00
Cory Fields
9e3ad50078 net: only enforce the services required to connect
also once half of all outgoing nodes have our preferred flags, require only
minimal flags from the rest.

Github-Pull: #10441
Rebased-From: b6fbfc2282
2017-06-01 13:26:12 +02:00
Wladimir J. van der Laan
ff3f9a807d Merge #10484: 0.14 Backports
1847642 [Wallet] unset change position when there is no change on exact match (Gregory Sanders)
ae479bc build: fix bitcoin-config.h regeneration after touching build files (Cory Fields)
3d395d6 build: remove wonky auto top-level convenience targets (Cory Fields)
4bc99c3 Add missing <atomic> header in clientmodel.h (Jonas Schnelli)
222f377 Set both time/height header caches at the same time (Jonas Schnelli)
7da1337 Declare headers height/time cache mutable, re-set the methods const (Jonas Schnelli)
9ac40e8 Update the remaining blocks left in modaloverlay at init. (Jonas Schnelli)
1e936d7 Reduce cs_main locks during modal overlay by adding an atomic cache (Jonas Schnelli)
0aee4a1 Check interruptNet during dnsseed lookups (Matt Corallo)
2017-05-31 18:05:06 +02:00
Gregory Sanders
18476423fb [Wallet] unset change position when there is no change on exact match 2017-05-31 10:57:16 +02:00
Cory Fields
ae479bc45b build: fix bitcoin-config.h regeneration after touching build files
This was a long-standing and annoying problem.

If autogen.sh was not manually run after touching configure.ac,
bitcoin-config.h would not be properly regenerated. This causes very subtle
problems when configure appears to enable a new value, but it does not end up
reflected in the build.
2017-05-31 10:54:19 +02:00
Cory Fields
3d395d6815 build: remove wonky auto top-level convenience targets
These were meant to help build subdir targets from the top builddir, but cause
infinite recursion when going the other way.

If anyone actually uses these, we can add back specific targets.
2017-05-31 10:54:19 +02:00
Jonas Schnelli
4bc99c3b28 Add missing <atomic> header in clientmodel.h 2017-05-31 10:53:47 +02:00
Jonas Schnelli
222f3775cf Set both time/height header caches at the same time 2017-05-31 10:53:47 +02:00
Jonas Schnelli
7da133772d Declare headers height/time cache mutable, re-set the methods const 2017-05-31 10:53:47 +02:00
Jonas Schnelli
9ac40e853c Update the remaining blocks left in modaloverlay at init. 2017-05-31 10:53:47 +02:00
Jonas Schnelli
1e936d7e87 Reduce cs_main locks during modal overlay by adding an atomic cache 2017-05-31 10:53:46 +02:00
Matt Corallo
0aee4a132b Check interruptNet during dnsseed lookups 2017-05-31 10:52:56 +02:00
Shigeya Suzuki
44a17f278a Minor fix in build documentation for FreeBSD 11
- Package name is libevent, not libevent2
- Need to use GNU make

Github-Pull: #10245
Rebased-From: 0611bc3439
2017-05-29 11:58:24 +02:00
Russell Yanofsky
321419bc06 Fix importwallet edge case rescan bug
Start importwallet rescans at the first block with timestamp greater or equal
to the wallet birthday instead of the last block with timestamp less or equal.
This fixes an edge case bug where importwallet could fail to start the rescan
early enough if there are blocks with decreasing timestamps or multiple blocks
with the same timestamp.

Github-Pull: #10410
Rebased-From: 2a8e35a11d
2017-05-23 17:09:42 +02:00
Alex Morcos
37a8fc54d4 Populate services in GetLocalAddress
Previously if we didn't have any local addresses, GetLocalAddress would return
0.0.0.0 and then we'd swap in a peer's notion of our address in AdvertiseLocal,
but then nServices would never get set.

Github-Pull: #10424
Rebased-From: 307013469f
2017-05-22 12:56:13 +02:00
fanquake
ffb0c4b035 [depends] miniupnpc 2.0.20170509
Github-Pull: #10414
Rebased-From: af5d48c9a0
2017-05-17 20:58:56 +02:00
Wladimir J. van der Laan
f2a96e7d02 doc: clean out release notes 2017-04-22 16:22:09 +02:00
Wladimir J. van der Laan
964a185cc8 Merge #10232: [0.14] release-notes: Accurately explain getblocktemplate improvements
38ab0a7 release-notes: Accurately explain getblocktemplate improvements (Luke Dashjr)

Tree-SHA512: b519431d5009c5bdb7511e46c9dec05370ba62d70f5f6a9d00b82d190581b937e34d29c32c3795f4f219288d40695091cfe60ec93b3c40c01ab72d9232064c04
2017-04-20 11:28:25 +02:00
Warren Togami
51c787dfb4 Clarify importprivkey help text with example of blank label without rescan
Occasionally I waste a lot of time not remembering that the second parameter to importprivkey must be blank if you intend to stop rescan with "false" as the third parameter.

Github-Pull: #10207
Rebased-From: c9e31c36ff
2017-04-20 08:18:50 +02:00
Luke Dashjr
38ab0a7465 release-notes: Accurately explain getblocktemplate improvements 2017-04-19 16:45:38 +00:00
Wladimir J. van der Laan
33fadc20ba doc: Update release notes pre-rc2 2017-04-14 12:45:41 +02:00
Wladimir J. van der Laan
348a71701d qt: translations update pre-rc2 2017-04-14 12:25:51 +02:00
Cory Fields
30fa231011 net: define NodeId as an int64_t
This should make occurances of NodeId wrapping essentially impossible for
real-world usage.

Github-Pull: #10176
Rebased-From: c851be4b25
2017-04-14 10:35:49 +02:00
John Newbery
3c796026e5 [rpc] rename disconnectnode argument
Github-Pull: #10204
Rebased-From: 883154cbcb
2017-04-14 10:19:06 +02:00
Wladimir J. van der Laan
06909df179 Merge #10185: [0.14] Mention dbcache memory changes in release notes
b7caa30 Mention dbcache memory changes in 0.14.1 release notes (Suhas Daftuar)

Tree-SHA512: cbc4bd55075c21c3cb1ea7857cf977ca60c6ae75b615512fbc9a42c4f329c40701fe31697634a47a17367e291c0969c2ad47266c8ef6d5bfd23e56614f515027
2017-04-13 12:06:55 +02:00
Suhas Daftuar
b7caa30c48 Mention dbcache memory changes in 0.14.1 release notes 2017-04-12 21:57:46 -04:00
Wladimir J. van der Laan
55f641ca19 Merge #10157: [0.14] Fix the mempool_packages.py test
39febb8 [qa] Fix mempool_packages.py for the 0.14 branch (Suhas Daftuar)

Tree-SHA512: 7b5f2627a76d79da5d7c9d30794219a87bec99296d5f74f66b347c7c8914244bfd07f0d48231adda7269678706fd9158b846d710f942b724c8c5748cc4a49c7e
2017-04-06 09:35:50 +02:00
Wladimir J. van der Laan
24d74332c2 Merge #10158: Add some more release notes for 0.14.1.
226a9cb Add some more release notes for 0.14.1. (Gregory Maxwell)

Tree-SHA512: ea74ae21f0a15556c877318833b998869a8a7378b40e168f84c80ee6c3433befa68ba52502d4d13ce2e5f14b8ad6b0a4075d67fea603d60ec94698f2a0606f6d
2017-04-06 09:35:13 +02:00
Gregory Maxwell
226a9cb35d Add some more release notes for 0.14.1.
This adds a blurb for the segwit signaling and fixes up the attribution.
2017-04-05 17:25:28 +00:00
Suhas Daftuar
39febb8c6d [qa] Fix mempool_packages.py for the 0.14 branch
The backport in d947afc0f7 of this
test was incorrect due to an api change in prioritisetransaction.
2017-04-05 08:30:51 -04:00
Wladimir J. van der Laan
df82ea914f doc: Remove release note about release notes 2017-04-05 13:01:32 +02:00
Wladimir J. van der Laan
920acbcca8 doc: Update release notes for 0.14.1 2017-04-05 11:52:16 +02:00
Wladimir J. van der Laan
47d24c85b7 Bump version to 0.14.1 2017-04-05 09:12:36 +02:00
Suhas Daftuar
ea060c7495 Bugfix: ancestor modifed fees were incorrect for descendants
If prioritisetransaction was called for a tx with in-mempool
descendants, the modified ancestor fee values for those descendants was
incorrect.

Github-Pull: #10144
Rebased-From: 9bef02e365
2017-04-05 08:37:12 +02:00
Suhas Daftuar
d947afc0f7 Test prioritisetransaction and ancestor fee state
There is already a similar test for descendant fee state.

Github-Pull: #10144
Rebased-From: ba7dd8bf6f
2017-04-05 08:37:12 +02:00
Alex Morcos
0e5133cb2e Make threshold for flushing more conservative.
Always leave a reasonable buffer of 50MB for usage from newly connected block (once over 50%) and increase the high water mark buffer to 200MB.

Github-Pull: #10133
Rebased-From: 1b55e07b7a
2017-04-05 08:23:02 +02:00
Alex Morcos
d6867689d1 Lower default memory footprint slightly
Github-Pull: #10133
Rebased-From: f33afd3b2b
2017-04-05 08:23:01 +02:00
Alex Morcos
ab864d3e49 Make pcoinsTip memory calculations consistent
Since we are more accurately measuring pcoinsTip peak usage at twice the current in dynamic usage, it makes sense to double the default (this will lead to the same effective usage and peak usage as previously).
We should also double the buffer used to avoid flushing if above 90% but still sufficient space remaining.

Github-Pull: #10133
Rebased-From: 5b95a190e8
2017-04-05 08:23:01 +02:00
Gregory Maxwell
a44a6a15f9 Check transaction count early in submitblock.
There is no point in even hashing a submitted block which doesn't have
 a coinbase transaction.

This also results in more useful error reporting on corrupted input.

Thanks to rawodb for the bug report.

Github-Pull: #10146
Rebased-From: 4f15ea102d
2017-04-04 09:01:03 +02:00
Gregory Maxwell
2fea10ad03 Make GetWitnessCommitmentIndex callable on blocks without a coinbase txn.
This isn't actually needed anywhere, but it's less brittle.

Github-Pull: #10146
Rebased-From: ada0caa165
2017-04-04 09:01:03 +02:00
practicalswift
f15268db3b [rpc] Remove auth cookie on shutdown
Accidentally removed in 40b556d374

Github-Pull: #10139
Rebased-From: 4b87973c32
2017-04-03 08:54:53 +02:00
Pieter Wuille
0b5e162b84 Compensate for memory peak at flush time
Github-Pull: #10126
Rebased-From: 7228ce853d
2017-03-31 12:07:18 +02:00
Wladimir J. van der Laan
fa6b5fc1cc Merge #10127: [0.14 backport] Mining: Prevent slowdown in CreateNewBlock on large mempools
a296c60 Update benchmarking with package statistics (Suhas Daftuar)
10028fb Add benchmarking for CreateNewBlock (Suhas Daftuar)
b5c3440 Mining: return early when block is almost full (Suhas Daftuar)

Tree-SHA512: 7c39d03a778abe00412743958981a1a55d22fc1843c9a3aef7a56506622e6f5d6b8962c586a339b6031e1ee4815d6981351cf527e8fbe5b265824c81d6c7199d
2017-03-31 12:06:56 +02:00
Wladimir J. van der Laan
e4c9a90fe9 util: Work around (virtual) memory exhaustion on 32-bit w/ glibc
glibc-specific: On 32-bit systems set the number of arenas to 1. By
default, since glibc 2.10, the C library will create up to two heap
arenas per core. This is known to cause excessive virtual address space
usage in our usage. Work around it by setting the maximum number of
arenas to 1.

Github-Pull: #10120
Rebased-From: 625488ace5
2017-03-31 11:48:59 +02:00
John Newbery
f59e3dfc59 Add tests for bitcoin-tx input checking
Github-Pull: #10130
Rebased-From: 19ecd1e2e1
2017-03-31 11:47:50 +02:00
John Newbery
ecc523288c Check stderr when testing bitcoin-tx
Github-Pull: #10130
Rebased-From: 21704f6334
2017-03-31 11:47:50 +02:00
Awemany
04c21afcdf bitcoin-tx: Fix missing range check
The number of arguments is not checked MutateTxAddOutAddr(..), meaning
that

> ./bitcoin-tx -create outaddr=

accessed the vStrInputParts vector beyond its bounds.

This also includes work by jnewbery to check the inputs for
MutateTxAddPubKey()

Github-Pull: #10130
Rebased-From: eb66bf9bdd
2017-03-31 11:47:50 +02:00
Suhas Daftuar
a296c6009f Update benchmarking with package statistics
Github-Pull: #9959
Rebased-From: 011124a2b2
2017-03-30 15:18:02 -04:00
Suhas Daftuar
10028fb555 Add benchmarking for CreateNewBlock
Github-Pull: #9959
Rebased-From: 42cd8c890f
2017-03-30 15:06:14 -04:00
Suhas Daftuar
b5c3440b05 Mining: return early when block is almost full
Github-Pull: #9959
Rebased-From: eed816af6c
2017-03-30 15:05:33 -04:00
Wladimir J. van der Laan
b768202695 Merge #10101: [0.14] backports
fa7555b doc: Add release notes for RPC createraw break (MarcoFalke)
142fbb2 rpc: Rename first named arg of createrawtransaction (MarcoFalke)
fc3d7db Optimize GetWitnessHash() for non-segwit transactions (Suhas Daftuar)
e9611d1 depends: fix zlib build on osx (Cory Fields)
ddc2dd1 Ensure an item exists on the rpcconsole stack before adding (Andrew Chow)
4d8e660 Trivial: Fix typo in help getrawtransaction RPC (James Evans)

Tree-SHA512: 4351b07a7477315aafbbbc632503a000fb5832d1b3617c7aff78603f4c53f581599a0c9b098d39d35adb8aa58769cf80298baf2eea278c32a662ec8c8fba3ceb
2017-03-29 10:45:54 +02:00
MarcoFalke
fa7555b16a doc: Add release notes for RPC createraw break 2017-03-27 23:44:33 +02:00
MarcoFalke
142fbb2fec rpc: Rename first named arg of createrawtransaction
Github-Pull: #10084
Rebased-From: fa55853219
2017-03-27 23:44:08 +02:00
Suhas Daftuar
fc3d7db580 Optimize GetWitnessHash() for non-segwit transactions
Github-Pull: #9912
Rebased-From: 02c57b521a
2017-03-27 23:44:08 +02:00
Cory Fields
e9611d10b6 depends: fix zlib build on osx
zlib is sneaky and expects ar to be libtool on darwin.

Github-Pull: #9973
Rebased-From: c62475329e
2017-03-27 23:44:03 +02:00
Andrew Chow
ddc2dd1612 Ensure an item exists on the rpcconsole stack before adding
Ensures that there is an item on the rpcconsole stack before adding something to the current stack so that a segmentation fault does not occur.

Github-Pull: #10060
Rebased-From: 4df76e270c
2017-03-27 23:08:24 +02:00
James Evans
4d8e66017f Trivial: Fix typo in help getrawtransaction RPC
Github-Pull: #10037
Rebased-From: 05a9f22358
2017-03-27 23:07:56 +02:00
Wladimir J. van der Laan
37bf0d5b38 Merge #10094: 0.14: Clear release notes
eeeeacd 0.14: Clear release notes (MarcoFalke)

Tree-SHA512: 9a5e2cc9ee43de36708e41361fd037a7ef98b4a17d0b9850b66e71fe8480648dafbcee8e0a109200208f58dbadf78298154c89ac492e43d6b19bccd0e4b14aa5
2017-03-27 11:53:47 +02:00
MarcoFalke
eeeeacd600 0.14: Clear release notes 2017-03-27 11:10:40 +02:00
Wladimir J. van der Laan
ccb47bf830 Merge #10006: [0.14 backport] Don't require segwit in getblocktemplate for segwit signalling or mining
2cd2cd5 Test transaction selection when gbt called without segwit support (Suhas Daftuar)
569596c Don't require segwit in getblocktemplate for segwit signalling or mining (Suhas Daftuar)

Tree-SHA512: bf2672287713e5adc7e851791207e17490679f941d0b9ed38467ffede3aa3000d229151b8ae54323fc8037e0a8569b2fd910ec19f034fb85d9142289648793c3
2017-03-18 11:39:04 +01:00
Wladimir J. van der Laan
fa8c6ddbef Merge #10013: Fix shutdown hang with >= 8 -addnodes set (0.14 backport)
4e2502b Add missing braces in semaphore posts in net (Matt Corallo)
d2548a4 Fix shutdown hang with >= 8 -addnodes set (Matt Corallo)

Tree-SHA512: 0b157793a2c7fabbc2ed24f974d206fc01c816189d6b6aa5a61bab562a0034f72b643a19b1e7920061e479fb27eddd4abf1c40e772a9573346b221a08e7e5ed9
2017-03-18 11:37:52 +01:00
Matt Corallo
4e2502bb51 Add missing braces in semaphore posts in net
Github-Pull: #9953
Rebased-From: 819b513a54
2017-03-17 14:56:57 -07:00
Matt Corallo
d2548a4f97 Fix shutdown hang with >= 8 -addnodes set
We previously would block waiting for a CSemaphoreGrant in
ThreadOpenAddedConnections, when we did not need to. This would
block as the posts in CConnman shutdown were both to the wrong
semaphore and in the wrong location.

Github-Pull: #9953
Rebased-From: e007b243c4
2017-03-17 14:55:43 -07:00
Suhas Daftuar
2cd2cd51f7 Test transaction selection when gbt called without segwit support
Github-Pull: #9955
Rebased-From: c85ffe6d8d
2017-03-16 10:50:16 -04:00
Suhas Daftuar
569596cc51 Don't require segwit in getblocktemplate for segwit signalling or mining
Segwit's version bit will be signalled for all invocations of CreateNewBlock,
and not specifying segwit only will cause CreateNewBlock to skip transactions
with witness from being selected.

Github-Pull: #9955
Rebased-From: abe7b3d3ab
2017-03-16 10:43:54 -04:00
Matt Corallo
43a987c1cb Fix regsig checking for subkey sigs in verify-commits
Rebased-From: bbd757940b
2017-03-05 19:09:49 +01:00
Wladimir J. van der Laan
ccf5e43ce0 Merge #9920: [0.14] Allow any subkey in verify-commits (BlueMatt)
589cd63 Allow any subkey in verify-commits (Matt Corallo)

Tree-SHA512: e3175273c648ed2d990ac931efae5e4bf3bd5ddce7b591f5e64a6831f3c029b252bc5d241dd8d3874467747c3ded87aa1fa334ff53d940cde32c22e584a2c4d0
2017-03-05 14:33:59 +01:00
Matt Corallo
589cd63b30 Allow any subkey in verify-commits 2017-03-05 02:07:23 +01:00
Luke Dashjr
a80dc94554 Bugfix: Only install manpages for built programs
Github-Pull: #9892
Rebased-From: 8c156b7f70
2017-03-01 12:34:08 +01:00
Cory Fields
eff783a0fe depends: make osx output deterministic
ld64 is threaded, and uses a worker for each CPU to parse input files. But
there's a bug in the parser causing dependencies to be calculated differently
based on which files have already been parsed.

As a result, builders with more CPUs are more likely to see non-determinism.

This looks to have been fixed in a newer version of ld64, so just disable
threading for now. There's no noticible slowdown.

Github-Pull: #9891
Rebased-From: 9e4d842afc
2017-03-01 10:42:03 +01:00
Matt Corallo
5e70912234 Add Pieter's old signed commits to revsig-commits
Github-Pull: #9884
Rebased-From: a4b02f4275
2017-02-28 16:45:01 +01:00
Russell Yanofsky
ad24256a65 Fix importmulti returning rescan errors for wrong keys
Bug was a missing ++i line in a new range for loop added in commit e2e2f4c
"Return errors from importmulti if complete rescans are not successful"

Github-Pull: #9829
Rebased-From: 306bd72157
2017-02-28 13:53:28 +01:00
Wladimir J. van der Laan
58800e3556 doc: pre-rc3 changelog update 2017-02-28 13:43:20 +01:00
Wladimir J. van der Laan
8d2d08efaa qt: pre-rc3 translations update 2017-02-28 12:49:29 +01:00
Pieter Wuille
1825a03f81 Avoid VLA in hash.h
Github-Pull: #9791
Rebased-From: 5c8fd50811
2017-02-28 12:48:19 +01:00
Marijn Stollenga
289204fbe0 Change bitcoin address in RPC helpaddress to an invalid address, so people don't accidentally send coins there (like I did).
Github-Pull: #9865
Rebased-From: 83ac719d34
2017-02-28 12:01:06 +01:00
Wladimir J. van der Laan
1f83663bc2 Merge #9866: Document increase in memory usage due to mempool/dbcache sharing
50ae5c7 Document increase in memory usage due to mempool/dbcache sharing (Matt Corallo)

Tree-SHA512: e52a310a5ac1f94b30f367a7bf514b2cf0724530102953eef7f7c7e00a067db568b5e1b51129dfdb1a237e016c7a8b01cc6da8c06a24ab5b970c43d045adb204
2017-02-28 11:47:25 +01:00
Suhas Daftuar
a48b998ff3 [doc] Update doc/bips.md for BIP90 implementation
Github-Pull: #9879
Rebased-From: fe71661ae1
2017-02-28 11:44:23 +01:00
Russell Yanofsky
08e0690f3f Update sendfrom RPC help to correct coin selection misconception
Github-Pull: #9840
Rebased-From: f81f0d0030
2017-02-28 11:41:58 +01:00
Wladimir J. van der Laan
5aaac4d09e Merge #9878: Mention bumpfee in 0.14 release notes.
29bae0c Mention bumpfee in 0.14 release notes. (Russell Yanofsky)

Tree-SHA512: f16cdac3effbc6c4d69da2205931c782c272937c93c97bf22b49193fc905dd55a24d5e42568c7c7d8108b0b23f81f415655f9ebdf1f6ba04ef0ab3b125e8dcce
2017-02-28 11:41:24 +01:00
Cory Fields
775cf54d0e prevector: assert successful allocation
Github-Pull: #9856
Rebased-From: d4ee7baef7
2017-02-28 11:40:50 +01:00
Cory Fields
69832aaad5 don't throw std::bad_alloc when out of memory. Instead, terminate immediately
Github-Pull: #9856
Rebased-From: c5f008a416
2017-02-28 11:40:50 +01:00
Wladimir J. van der Laan
50953c2aad tests: Fix dangling pwalletMain pointer in wallet tests
Github-Pull: #9875
Rebased-From: 75a109338f
2017-02-28 11:40:50 +01:00
Russell Yanofsky
29bae0c6c5 Mention bumpfee in 0.14 release notes. 2017-02-27 16:12:22 -05:00
Matt Corallo
50ae5c711a Document increase in memory usage due to mempool/dbcache sharing 2017-02-27 15:29:06 -05:00
Russell Yanofsky
eddaa6b35d [qa] Make import-rescan.py watchonly check reliable
Send payments during the test from a different node than the node generating
keys to be imported, so the spending node doesn't create transactions that
inadvertently involve (spend funds from) the imported keys.

Fixes #9826

Github-Pull: #9839
Rebased-From: 864890adf5
2017-02-27 09:03:57 +01:00
Wladimir J. van der Laan
3584902eae Merge #9846: doc: Small release notes fixups in the list of pulls
fa230fd doc: Small release notes fixups in the list of pulls (MarcoFalke)
2017-02-24 11:02:59 +01:00
MarcoFalke
fa230fde64 doc: Small release notes fixups in the list of pulls 2017-02-24 01:35:58 +01:00
Wladimir J. van der Laan
f00429666c Merge #9787: release: add a few performance-related notes
95e68df release: add a few performance-related notes (Cory Fields)
2017-02-23 21:47:32 +01:00
Cory Fields
95e68dfe35 release: add a few performance-related notes 2017-02-23 15:45:42 -05:00
Wladimir J. van der Laan
3b2f7fdcae doc: Add authors and changes since rc1 to release notes 2017-02-23 21:38:29 +01:00
Wladimir J. van der Laan
847e3753a6 qt: pre-rc2 translations update 2017-02-23 20:31:57 +01:00
Cory Fields
99fd85cb44 build: force a c++ standard to be specified
Newer compilers may switch to newer standards by default. For example, gcc6
uses std=gnu++14 by default.

Github-Pull: #9831
Rebased-From: 9829c54de2
2017-02-23 19:06:57 +01:00
Cory Fields
05e906dbc6 build: add --enable-werror option
This turns some compiler warnings into errors. Useful for c-i.

Github-Pull: #9789
Rebased-From: 205830a37b
2017-02-23 10:49:07 +01:00
Cory Fields
749fe95fdc build: warn about variable length arrays
Github-Pull: #9789
Rebased-From: b602fe0f73
2017-02-23 10:49:07 +01:00
MarcoFalke
260c71cbb8 qa: Check return code when stopping nodes
This includes work by jnewbery

Github-Pull: #9824
Rebased-From: fa4cd2e998
2017-02-23 10:40:55 +01:00
Russell Yanofsky
599c69abe3 Fix pruning test broken by 2 hour manual prune window
Regression happened in 91fb506 Add two hour buffer to manual pruning.

Github-Pull: #9820
Rebased-From: 874c7363d7
2017-02-23 10:39:20 +01:00
John Newbery
9d3f9d2a59 [Trivial] Remove incorrect help message from gettxoutproof()
Github-Pull: #9711
Rebased-From: 9949ebfa6a
2017-02-22 13:03:55 +01:00
Russell Yanofsky
9072395e5f Return errors from importmulti if complete rescans are not successful
Github-Pull: #9773
Rebased-From: e2e2f4c856
2017-02-22 12:45:43 +01:00
Jonas Schnelli
7d75a5a93c Fix segfault crash when shutdown the GUI in disablewallet mode
Github-Pull: #9817
Rebased-From: 312c4f1057
2017-02-21 15:14:17 +01:00
kirit93
e22c0671c7 Fix for issue #9775. Added check for open() returning a NULL pointer.
Github-Pull: #9798
Rebased-From: 40f11f8872
2017-02-21 14:33:34 +01:00
Chris Moore
ae1c4e24a6 Fix typo in release notes. 2017-02-21 14:20:18 +01:00
Pavel Janík
3972a8efb2 Read/write mempool.dat as a binary.
mempool.dat is a binary file and thus it should be read/written as such.

Fixes #9810.

Github-Pull: #9813
Rebased-From: 171fc91f06
2017-02-21 12:35:38 +01:00
Luke Dashjr
861cb0c83d QA: Test GBT size/weight limit values
Github-Pull: #9619
Rebased-From: 279f944e8d
2017-02-20 17:32:59 +01:00
Luke Dashjr
6552729f38 Bugfix: RPC/Mining: GBT should return 1 MB sizelimit before segwit activates
Github-Pull: #9619
Rebased-From: 9fc7f0bce9
2017-02-20 17:32:59 +01:00
Russell Yanofsky
40c754cb38 [wallet] Remove importmulti always-true check
Remove "nLowestTimestamp <= chainActive.Tip()->GetBlockTimeMax()" check from
importmulti, which is always true because nLowestTimestamp is set to the
minimum of the most recent block time and all the imported key timestamps,
which is necessarily lower than the maximum block time.

Github-Pull: #9760
Rebased-From: ec1267f13b
2017-02-20 17:30:26 +01:00
Cory Fields
2afefeade6 boost: remove iostreams includes
They're unused and produce nasty deprecation warnings

Github-Pull: #9786
Rebased-From: 3301587dc5
2017-02-17 21:50:30 +01:00
Pieter Wuille
973e345f7f Move BIP70_MAX_PAYMENTREQUEST_SIZE to header
Github-Pull: #9785
Rebased-From: c801c82e25
2017-02-17 21:50:22 +01:00
Pieter Wuille
f873564231 Make KEY_SIZE a compile-time constant
Github-Pull: #9785
Rebased-From: 914fad155d
2017-02-17 21:50:14 +01:00
Wladimir J. van der Laan
04396bcc05 Merge #9784: Restore removed release notes.
1577f07 Restore removed release notes. (Gregory Maxwell)
2017-02-17 21:46:44 +01:00
Wladimir J. van der Laan
6187091411 doc: Add changelog for 0.14.0 to release notes 2017-02-17 21:44:05 +01:00
Gregory Maxwell
1577f0731a Restore removed release notes. 2017-02-17 18:54:36 +00:00
Wladimir J. van der Laan
871e19ac84 doc: Add list of authors to release notes
Generated from git, so there may be duplicate authors
if someone used multiple mail addresses.
2017-02-17 19:28:27 +01:00
Wladimir J. van der Laan
6d61a2b8c5 Merge #9783: release: bump gitian descriptors for a new 0.14 package cache
42f5f21 release: bump gitian descriptors for a new 0.14 package cache (Cory Fields)
2017-02-17 19:14:34 +01:00
Cory Fields
42f5f21287 release: bump gitian descriptors for a new 0.14 package cache 2017-02-17 12:48:04 -05:00
Wladimir J. van der Laan
268c390d02 doc: Update manpages for 0.14.0 2017-02-17 18:21:51 +01:00
Wladimir J. van der Laan
1a02ecc73a doc: Update release notes from wiki 2017-02-17 17:48:30 +01:00
Wladimir J. van der Laan
f68e4414d7 qt: pre-rc1 translations update 2017-02-17 17:43:06 +01:00
Wladimir J. van der Laan
bc69f34b35 build: bump version to 0.14.0 2017-02-17 17:24:00 +01:00
102 changed files with 7252 additions and 647 deletions

View File

@@ -76,9 +76,6 @@ $(BITCOIN_WIN_INSTALLER): all-recursive
echo error: could not build $@
@echo built $@
$(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE
$(MAKE) -C src $(patsubst src/%,%,$@)
$(OSX_APP)/Contents/PkgInfo:
$(MKDIR_P) $(@D)
@echo "APPL????" > $@

View File

@@ -57,8 +57,14 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
[$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
[$3], [optional], [ax_cxx_compile_cxx$1_required=false],
[m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
m4_if([$4], [], [ax_cxx_compile_cxx$1_try_default=true],
[$4], [default], [ax_cxx_compile_cxx$1_try_default=true],
[$4], [nodefault], [ax_cxx_compile_cxx$1_try_default=false],
[m4_fatal([invalid fourth argument `$4' to AX_CXX_COMPILE_STDCXX])])
AC_LANG_PUSH([C++])dnl
ac_success=no
m4_if([$4], [nodefault], [], [dnl
AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
ax_cv_cxx_compile_cxx$1,
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
@@ -66,7 +72,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
[ax_cv_cxx_compile_cxx$1=no])])
if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
ac_success=yes
fi
fi])
m4_if([$2], [noext], [], [dnl
if test x$ac_success = xno; then

View File

@@ -1,10 +1,10 @@
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 0)
define(_CLIENT_VERSION_MINOR, 13)
define(_CLIENT_VERSION_REVISION, 99)
define(_CLIENT_VERSION_MINOR, 14)
define(_CLIENT_VERSION_REVISION, 2)
define(_CLIENT_VERSION_BUILD, 0)
define(_CLIENT_VERSION_IS_RELEASE, false)
define(_CLIENT_VERSION_IS_RELEASE, true)
define(_COPYRIGHT_YEAR, 2017)
define(_COPYRIGHT_HOLDERS,[The %s developers])
define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
@@ -55,7 +55,7 @@ case $host in
;;
esac
dnl Require C++11 compiler (no GNU extensions)
AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault])
dnl Check if -latomic is required for <std::atomic>
CHECK_ATOMIC
@@ -192,6 +192,13 @@ AC_ARG_ENABLE([debug],
[enable_debug=$enableval],
[enable_debug=no])
# Turn warnings into errors
AC_ARG_ENABLE([werror],
[AS_HELP_STRING([--enable-werror],
[Treat certain compiler warnings as errors (default is no)])],
[enable_werror=$enableval],
[enable_werror=no])
AC_LANG_PUSH([C++])
AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
@@ -206,10 +213,19 @@ if test "x$enable_debug" = xyes; then
fi
fi
ERROR_CXXFLAGS=
if test "x$enable_werror" = "xyes"; then
if test "x$CXXFLAG_WERROR" = "x"; then
AC_MSG_ERROR("enable-werror set but -Werror is not usable")
fi
AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]])
fi
if test "x$CXXFLAGS_overridden" = "xno"; then
AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]])
AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]])
AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]])
AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]])
## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all
@@ -541,6 +557,14 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]],
[ AC_MSG_RESULT(no)]
)
dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas)
AC_MSG_CHECKING(for mallopt M_ARENA_MAX)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
[[ mallopt(M_ARENA_MAX, 1); ]])],
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ],
[ AC_MSG_RESULT(no)]
)
AC_MSG_CHECKING([for visibility attribute])
AC_LINK_IFELSE([AC_LANG_SOURCE([
int foo_def( void ) __attribute__((visibility("default")));
@@ -1066,6 +1090,7 @@ AC_SUBST(BITCOIN_CLI_NAME)
AC_SUBST(BITCOIN_TX_NAME)
AC_SUBST(RELDFLAGS)
AC_SUBST(ERROR_CXXFLAGS)
AC_SUBST(HARDENED_CXXFLAGS)
AC_SUBST(HARDENED_CPPFLAGS)
AC_SUBST(HARDENED_LDFLAGS)
@@ -1155,6 +1180,7 @@ echo " with test = $use_tests"
echo " with bench = $use_bench"
echo " with upnp = $use_upnp"
echo " debug enabled = $enable_debug"
echo " werror = $enable_werror"
echo
echo " target os = $TARGET_OS"
echo " build os = $BUILD_OS"

View File

@@ -1,5 +1,5 @@
---
name: "bitcoin-linux-0.13"
name: "bitcoin-linux-0.14"
enable_cache: true
suites:
- "trusty"

View File

@@ -1,5 +1,5 @@
---
name: "bitcoin-osx-0.13"
name: "bitcoin-osx-0.14"
enable_cache: true
suites:
- "trusty"

View File

@@ -1,5 +1,5 @@
---
name: "bitcoin-win-0.13"
name: "bitcoin-win-0.14"
enable_cache: true
suites:
- "trusty"

View File

@@ -0,0 +1,104 @@
a06ede9a138d0fb86b0de17c42b936d9fe6e2158
923dc447eaa8e017985b2afbbb12dd1283fbea0e
71148b8947fe8b4d756822420a7f31c380159425
6696b4635ceb9b47aaa63244bff9032fa7b08354
812714fd80e96e28cd288c553c83838cecbfc2d9
8a445c5651edb9a1f51497055b7ddf4402be9188
e126d0c12ca66278d9e7b12187c5ff4fc02a7e6c
3908fc4728059719bed0e1c7b1c8b388c2d4a8da
8b66bf74e2a349e71eaa183af81fa63eaee76ad2
05950427d310654774031764a7141a1a4fd9c6e4
07fd147b9f12e9205afd66a624edce357977d615
12e31127948fa4bb01c3bddc1b8c85b432f7465b
8c87f175d335e9d9e93f987d871ae9f05f6a10a7
46b249e578e8a3dfbe85bc7253a12e82ef4b658b
a55716abe5662ec74c2f8af93023f1e7cca901fc
f646275b90b1de93bc62b4c4d045d75ac0b96eee
c252685aa5867631e9a5ef07ccae7c7c25cae8ff
a7d55c93385359952d85decd5037843ac70ba3d4
7dac1e5e9e887f5f6ff146e812a05bd3bf281eae
2a524b8e8fe69ef487fd8ea1b4f7a03f473ed201
ce5c1f4acae43477989cdf9a82ed33703919cda2
2db4cbcc437f51f5dac82cc4de46f383b92e6f11
7aa700424cbda387536373d8dfec88aee43f950e
b99a093afed880f23fb279c443cc6ae5e379cc43
b83264d9c7a8ddb79f64bd9540caddc8632ef31f
57e337d40e94ba33d8cd265c134d6ef857b32b59
a1dcf2e1087beaf3981739fd2bb74f35ecad630a
d38b0d7a6b6056cba26999b702815775e2437d87
815640ec6af9a38d6a2da4a4400056e2f4105080
09c4fd157c5b88df2d97fad4826c79b094db90c9
2efcfa5acfacb958973d9e8125e1d81f102e2dfd
dc6dee41f7cf2ba93fcd0fea7c157e4b2775d439
ad826b3df9f763b49f1e3e3d50c4efdd438c7547
c1a52276848d8caa9a9789dff176408c1aa6b1ed
3bf06e9bac57b5b5a746677b75e297a7b154bdbd
72ae6f8cf0224370e8121d6769b21e612ca15d6f
a143b88dbd4971ecfdd1d39a494489c8f2db0344
76fec09d878d6dbf214bdb6228d480bd9195db4c
93566e0c37c5ae104095474fea89f00dcb40f551
407d9232ef5cb1ebf6cff21f3d13e07ea4158eeb
9346f8429957e356d21c665bab59fe45bcf1f74e
6eeac6e30d65f9a972067c1ea8c49978c8e631ac
dc6b9406bdfab2af8c86cb080cb3e6cf8f2385d8
9f554e03ebe5701c1b75ff03b3d6152095c0cad3
05009935f9ac070197113954d680bc2c9150b9b3
508404de98a8a5435f52916cef8f328e82651961
ed0cc50afed146c27f6d8129c683c225fb940093
6429cfa8a70308241c576aeb92ffe3db5203b2ef
6898213409811b140843c3d89af43328c3b22fad
5b2ea29cf4fd298346437bb16a54407f8c1f9dca
e2a1a1ee895149c544d4ae295466611f0cec3094
e82fb872ff5cc8fd22d43327c1ee3e755f61c562
19b0f33de0efd9da788e8e4f3fdc2a9e159abdb1
89de1538ce1f8c00f80e8d11f43e1b77e24d7dea
de07fdcf77e97b8613091285e4d0a734f5de7492
01680195f8aa586c55c44767397380def3a23b54
05e1c85fb687c82ae477c72d4a7e2d6b0c692167
c072b8fd95cd4fa84f08189a0cd8b173ea2dbb8e
9a0ed08b40b15ae2b791aa8549b53e69934b4ea7
53f8f226bd1d627c4a6dec5862a1d4ea5a933e45
9d0f43b7ca7241d8a018fd35dd3bc01555235ec6
f12d2b5a8ac397e4bcaefcc19898f8ff5705dea5
8250de13587ed05ca45df3e12c5dc9bcb1500e2c
d727f77e390426e9e463336bda08d50c451c7086
484312bda2d43e3ea60047be076332299463adf8
c7e05b35ab0a791c7a8e2d863e716fdec6f3f671
b9c1cd81848da9de1baf9c2f29c19c50e549de13
8ea7d31e384975019733b5778feabbd9955c79d8
f798b891bcecea9548eedacae70eeb9906c1ddbf
ebefe7a00b46579cdd1e033a8c7fd8ce9aa578e4
ad087638ee4864d6244ec9381ff764bfa6ee5086
66db2d62d59817320c9182fc18e75a93b76828ea
7ce9ac5c83b1844a518ef2e12e87aae3cacdfe58
4286f43025149cf44207c3ad98e4a1f068520ada
cd0c5135ab2291aaa5410ac919bad3fc87249a4a
66ed450d771a8fc01c159a8402648ebd1c35eb4c
a82f03393a32842d49236e8666ee57805ca701f8
f972b04d63eb8af79ff3cec1dc561ed13dfa6053
ec45cc5e27668171b55271b0c735194c70e7da41
715e9fd7454f7a48d7adba7d42f662c20a3e3367
2e0a99037dcc35bc63ba0d54371bc678af737c8e
7fa8d758598407f3bf0beb0118dc122ea5340736
6a22373771edbc3c7513cacb9355f880c73c2cbf
b89ef131147f71a96152a7b5c4374266cdf539b2
01d8359983e2f77b5118fede3ffa947072c666c8
58f0c929a3d70a4bff79cc200f1c186f71ef1675
950be19727a581970591d8f8138dfe4725750382
425278d17bd0edf8a3a7cc81e55016f7fd8e7726
c028c7b7557da2baff7af8840108e8be4db8e0c6
47a7cfb0aa2498f6801026d258a59f9de48f60b0
f6b7df3155ddb4cedfbcf5d3eb3383d4614b3a85
d72098038f3b55a714ed8adb34fab547b15eb0d5
c49c825bd9f4764536b45df5a684d97173673fc7
33799afe83eec4200ff140e9bf5eae83701a4d7f
5c3f8ddcaa1164079105c452429fccf8127b01b6
1f01443567b03ac75a91c810f1733f5c21b5699d
b3e42b6d02e8d19658a9135e427ebceab5367779
69b3a6dd9d9a0adf5506c8b9fde42187356bd4a8
bafd075c5e6a1088ef0f1aa0b0b224e026a3d3e0
7daa3adb242d9c8728fdb15c6af6596aaad5502f
514993554c370f4cf30a109ac28d5d64893dbf0a
c8d2473e6cb042e7275a10c49d3f6a4a91bf0166
386f4385ab04b0b2c3d47bddc0dc0f2de7354964
9f33dba05c01ecc5c56eb1284ab7d64d42f55171

View File

@@ -12,17 +12,13 @@ for LINE in $(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null); do
case "$LINE" in
"[GNUPG:] VALIDSIG "*)
while read KEY; do
case "$LINE" in "[GNUPG:] VALIDSIG $KEY "*) VALID=true;; esac
[ "${LINE#?GNUPG:? VALIDSIG * * * * * * * * * }" = "$KEY" ] && VALID=true
done < ./contrib/verify-commits/trusted-keys
;;
"[GNUPG:] REVKEYSIG "*)
[ "$BITCOIN_VERIFY_COMMITS_ALLOW_REVSIG" != 1 ] && exit 1
while read KEY; do
case "$LINE" in "[GNUPG:] REVKEYSIG ${KEY#????????????????????????} "*)
REVSIG=true
GOODREVSIG="[GNUPG:] GOODSIG ${KEY#????????????????????????} "
esac
done < ./contrib/verify-commits/trusted-keys
REVSIG=true
GOODREVSIG="[GNUPG:] GOODSIG ${LINE#* * *}"
;;
esac
done

View File

@@ -1,4 +1,4 @@
71A3B16735405025D447E8F274810B012346C9A6
3F1888C6DCA92A6499C4911FDBA1A67379A1A931
133EAC179436F14A5CF1B794860FEB804E669320
32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC
FE09B823E6D83A3BC7983EAA2D7F2372E50FE137
B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B

View File

@@ -1,8 +1,8 @@
package=miniupnpc
$(package)_version=2.0
$(package)_version=2.0.20170509
$(package)_download_path=http://miniupnp.free.fr/files
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_sha256_hash=d434ceb8986efbe199c5ca53f90ed53eab290b1e6d0530b717eb6fa49d61f93b
$(package)_sha256_hash=d3c368627f5cdfb66d3ebd64ca39ba54d6ff14a61966dbecb8dd296b7039f16a
define $(package)_set_vars
$(package)_build_opts=CC="$($(package)_cc)"

View File

@@ -38,7 +38,8 @@ $(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++
endef
define $(package)_preprocess_cmds
cd $($(package)_build_subdir); ./autogen.sh
cd $($(package)_build_subdir); ./autogen.sh && \
sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h
endef
define $(package)_config_cmds

View File

@@ -7,8 +7,10 @@ $(package)_sha256_hash=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca11
define $(package)_set_vars
$(package)_build_opts= CC="$($(package)_cc)"
$(package)_build_opts+=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC"
$(package)_build_opts+=AR="$($(package)_ar)"
$(package)_build_opts+=RANLIB="$($(package)_ranlib)"
$(package)_build_opts+=AR="$($(package)_ar)"
$(package)_build_opts_darwin+=AR="$($(package)_libtool)"
$(package)_build_opts_darwin+=ARFLAGS="-o"
endef
define $(package)_config_cmds

View File

@@ -38,7 +38,7 @@ PROJECT_NAME = "Bitcoin Core"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 0.13.99
PROJECT_NUMBER = 0.14.2
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

View File

@@ -1,4 +1,4 @@
Bitcoin Core 0.13.99
Bitcoin Core 0.14.2
=====================
Setup

View File

@@ -1,4 +1,4 @@
Bitcoin Core 0.13.99
Bitcoin Core 0.14.2
=====================
Intro

View File

@@ -20,6 +20,7 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.13.0**):
* [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)).
* [`BIP 68`](https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki): Sequence locks have been implemented as of **v0.12.1** ([PR #7184](https://github.com/bitcoin/bitcoin/pull/7184)), and have been activated since *block 419328*.
* [`BIP 70`](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) [`71`](https://github.com/bitcoin/bips/blob/master/bip-0071.mediawiki) [`72`](https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki): Payment Protocol support has been available in Bitcoin Core GUI since **v0.9.0** ([PR #5216](https://github.com/bitcoin/bitcoin/pull/5216)).
* [`BIP 90`](https://github.com/bitcoin/bips/blob/master/bip-0090.mediawiki): Trigger mechanism for activation of BIPs 34, 65, and 66 has been simplified to block height checks since **v0.14.0** ([PR #8391](https://github.com/bitcoin/bitcoin/pull/8391)).
* [`BIP 111`](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki): `NODE_BLOOM` service bit added, and enforced for all peer versions as of **v0.13.0** ([PR #6579](https://github.com/bitcoin/bitcoin/pull/6579) and [PR #6641](https://github.com/bitcoin/bitcoin/pull/6641)).
* [`BIP 112`](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki): The CHECKSEQUENCEVERIFY opcode has been implemented since **v0.12.1** ([PR #7524](https://github.com/bitcoin/bitcoin/pull/7524)) and has been activated since *block 419328*.
* [`BIP 113`](https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki): Median time past lock-time calculations have been implemented since **v0.12.1** ([PR #6566](https://github.com/bitcoin/bitcoin/pull/6566)) and have been activated since *block 419328*.

View File

@@ -321,8 +321,10 @@ Clang is installed by default as `cc` compiler, this makes it easier to get
started than on [OpenBSD](build-openbsd.md). Installing dependencies:
pkg install autoconf automake libtool pkgconf
pkg install boost-libs openssl libevent2
pkg install boost-libs openssl libevent
pkg install gmake
You need to use GNU make (`gmake`) instead of `make`.
(`libressl` instead of `openssl` will also work)
For the wallet (optional):
@@ -338,7 +340,7 @@ Then build using:
./autogen.sh
./configure --with-incompatible-bdb BDB_CFLAGS="-I/usr/local/include/db5" BDB_LIBS="-L/usr/local/lib -ldb_cxx-5"
make
gmake
*Note on debugging*: The version of `gdb` installed by default is [ancient and considered harmful](https://wiki.freebsd.org/GdbRetirement).
It is not suitable for debugging a multi-threaded C++ program, not even for getting backtraces. Please install the package `gdb` and

View File

@@ -1 +1,13 @@
dist_man1_MANS=bitcoind.1 bitcoin-qt.1 bitcoin-cli.1 bitcoin-tx.1
dist_man1_MANS=
if BUILD_BITCOIND
dist_man1_MANS+=bitcoind.1
endif
if ENABLE_QT
dist_man1_MANS+=bitcoin-qt.1
endif
if BUILD_BITCOIN_UTILS
dist_man1_MANS+=bitcoin-cli.1 bitcoin-tx.1
endif

View File

@@ -1,19 +1,17 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5.
.TH BITCOIN-CLI "1" "September 2016" "bitcoin-cli v0.13.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIN-CLI "1" "June 2017" "bitcoin-cli v0.14.2.0" "User Commands"
.SH NAME
bitcoin-cli \- manual page for bitcoin-cli v0.13.0.0
bitcoin-cli \- manual page for bitcoin-cli v0.14.2.0
.SH DESCRIPTION
Bitcoin Core RPC client version v0.13.0.0
Bitcoin Core RPC client version v0.14.2.0
.SS "Usage:"
.TP
bitcoin\-cli [options] <command> [params]
Send command to Bitcoin Core
.TP
bitcoin\-cli [options] help
List commands
.TP
bitcoin\-cli [options] help <command>
Get help for a command
.IP
bitcoin\-cli [options] \fB\-named\fR <command> [name=value] ... Send command to Bitcoin Core (with named arguments)
bitcoin\-cli [options] help List commands
bitcoin\-cli [options] help <command> Get help for a command
.SH OPTIONS
.HP
\-?
@@ -40,6 +38,10 @@ Enter regression test mode, which uses a special chain in which blocks
can be solved instantly. This is intended for regression testing
tools and app development.
.HP
\fB\-named\fR
.IP
Pass named instead of positional arguments (default: false)
.HP
\fB\-rpcconnect=\fR<ip>
.IP
Send commands to node running on <ip> (default: 127.0.0.1)
@@ -69,7 +71,7 @@ Timeout during HTTP requests (default: 900)
Read extra arguments from standard input, one per line until EOF/Ctrl\-D
(recommended for sensitive information such as passphrases)
.SH COPYRIGHT
Copyright (C) 2009-2016 The Bitcoin Core developers
Copyright (C) 2009-2017 The Bitcoin Core developers
Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org> for further information about the software.
@@ -77,8 +79,8 @@ The source code is available from <https://github.com/bitcoin/bitcoin>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
or <https://opensource.org/licenses/MIT>
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 and UPnP software written by Thomas Bernard.
OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
Eric Young and UPnP software written by Thomas Bernard.

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5.
.TH BITCOIN-QT "1" "September 2016" "bitcoin-qt v0.13.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIN-QT "1" "June 2017" "bitcoin-qt v0.14.2.0" "User Commands"
.SH NAME
bitcoin-qt \- manual page for bitcoin-qt v0.13.0.0
bitcoin-qt \- manual page for bitcoin-qt v0.14.2.0
.SH DESCRIPTION
Bitcoin Core version v0.13.0.0 (64\-bit)
Bitcoin Core version v0.14.2.0 (64\-bit)
Usage:
.IP
bitcoin\-qt [command\-line options]
@@ -27,13 +27,14 @@ long fork (%s in cmd is replaced by message)
Execute command when the best block changes (%s in cmd is replaced by
block hash)
.HP
\fB\-checkblocks=\fR<n>
\fB\-assumevalid=\fR<hex>
.IP
How many blocks to check at startup (default: 288, 0 = all)
.HP
\fB\-checklevel=\fR<n>
.IP
How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3)
If this block is in the chain assume that it and its ancestors are valid
and potentially skip their script verification (0 to verify all,
default:
00000000000000000013176bf8d7dfeab4e1db31dc93bc311b436e82ab226b90,
testnet:
00000000000128796ee387cf110ccb9d2f36cffaf7f73079c995377c65ac0dcc)
.HP
\fB\-conf=\fR<file>
.IP
@@ -45,7 +46,7 @@ Specify data directory
.HP
\fB\-dbcache=\fR<n>
.IP
Set database cache size in megabytes (4 to 16384, default: 300)
Set database cache size in megabytes (4 to 16384, default: 450)
.HP
\fB\-loadblock=\fR<file>
.IP
@@ -62,11 +63,16 @@ Keep the transaction memory pool below <n> megabytes (default: 300)
\fB\-mempoolexpiry=\fR<n>
.IP
Do not keep transactions in the mempool longer than <n> hours (default:
72)
336)
.HP
\fB\-blockreconstructionextratxn=\fR<n>
.IP
Extra transactions to keep in memory for compact block reconstructions
(default: 100)
.HP
\fB\-par=\fR<n>
.IP
Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 =
Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 =
leave that many cores free, default: 0)
.HP
\fB\-pid=\fR<file>
@@ -75,13 +81,15 @@ Specify pid file (default: bitcoind.pid)
.HP
\fB\-prune=\fR<n>
.IP
Reduce storage requirements by enabling pruning (deleting) of old blocks.
This allows the pruneblockchain RPC to be called to delete specific blocks,
and enables automatic pruning of old blocks if a target size in MiB is
provided. This mode is incompatible with \fB\-txindex\fR and \fB\-rescan\fR.
Warning: Reverting this setting requires re\-downloading the entire blockchain.
(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >550 =
automatically prune block files to stay under the specified target size in MiB)
Reduce storage requirements by enabling pruning (deleting) of old
blocks. This allows the pruneblockchain RPC to be called to
delete specific blocks, and enables automatic pruning of old
blocks if a target size in MiB is provided. This mode is
incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
setting requires re\-downloading the entire blockchain. (default:
0 = disable pruning blocks, 1 = allow manual pruning via RPC,
>550 = automatically prune block files to stay under the
specified target size in MiB)
.HP
\fB\-reindex\-chainstate\fR
.IP
@@ -123,7 +131,8 @@ for IPv6
.HP
\fB\-connect=\fR<ip>
.IP
Connect only to the specified node(s)
Connect only to the specified node(s); \fB\-noconnect\fR or \fB\-connect\fR=\fI\,0\/\fR alone to
disable automatic connections
.HP
\fB\-discover\fR
.IP
@@ -137,7 +146,7 @@ Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (def
\fB\-dnsseed\fR
.IP
Query for peer addresses via DNS lookup, if low on addresses (default: 1
unless \fB\-connect\fR)
unless \fB\-connect\fR/\-noconnect)
.HP
\fB\-externalip=\fR<ip>
.IP
@@ -149,7 +158,8 @@ Always query for peer addresses via DNS lookup (default: 0)
.HP
\fB\-listen\fR
.IP
Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
Accept connections from outside (default: 1 if no \fB\-proxy\fR or
\fB\-connect\fR/\-noconnect)
.HP
\fB\-listenonion\fR
.IP
@@ -204,6 +214,11 @@ Connect through SOCKS5 proxy
Randomize credentials for every proxy connection. This enables Tor
stream isolation (default: 1)
.HP
\fB\-rpcserialversion\fR
.IP
Sets the serialization of raw transaction or block hex returned in
non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
.HP
\fB\-seednode=\fR<ip>
.IP
Connect to a node to retrieve peer addresses, and disconnect
@@ -221,17 +236,22 @@ Tor control port to use if onion listening enabled (default:
.IP
Tor control port password (default: empty)
.HP
\fB\-upnp\fR
.IP
Use UPnP to map the listening port (default: 0)
.HP
\fB\-whitebind=\fR<addr>
.IP
Bind to given address and whitelist peers connecting to it. Use
[host]:port notation for IPv6
.HP
\fB\-whitelist=\fR<netmask>
\fB\-whitelist=\fR<IP address or network>
.IP
Whitelist peers connecting from the given netmask or IP address. Can be
specified multiple times. Whitelisted peers cannot be DoS banned
and their transactions are always relayed, even if they are
already in the mempool, useful e.g. for a gateway
Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
times. Whitelisted peers cannot be DoS banned and their
transactions are always relayed, even if they are already in the
mempool, useful e.g. for a gateway
.HP
\fB\-whitelistrelay\fR
.IP
@@ -240,7 +260,7 @@ not relaying transactions (default: 1)
.HP
\fB\-whitelistforcerelay\fR
.IP
Force relay of transactions from whitelisted peers even they violate
Force relay of transactions from whitelisted peers even if they violate
local relay policy (default: 1)
.HP
\fB\-maxuploadtarget=\fR<n>
@@ -287,13 +307,17 @@ Spend unconfirmed change when sending transactions (default: 1)
\fB\-txconfirmtarget=\fR<n>
.IP
If paytxfee is not set, include enough fee so transactions begin
confirmation on average within n blocks (default: 2)
confirmation on average within n blocks (default: 6)
.HP
\fB\-usehd\fR
.IP
Use hierarchical deterministic key generation (HD) after BIP32. Only has
effect during wallet creation/first start (default: 1)
.HP
\fB\-walletrbf\fR
.IP
Send transactions with full\-RBF opt\-in enabled (default: 0)
.HP
\fB\-upgradewallet\fR
.IP
Upgrade wallet to latest format on startup
@@ -347,9 +371,9 @@ Append comment to the user agent string
Output debugging information (default: 0, supplying <category> is
optional). If <category> is not supplied or if <category> = 1,
output all debugging information.<category> can be: addrman,
alert, bench, coindb, db, http, libevent, lock, mempool,
mempoolrej, net, proxy, prune, rand, reindex, rpc, selectcoins,
tor, zmq, qt.
alert, bench, cmpctblock, coindb, db, http, libevent, lock,
mempool, mempoolrej, net, proxy, prune, rand, reindex, rpc,
selectcoins, tor, zmq, qt.
.HP
\fB\-help\-debug\fR
.IP
@@ -422,6 +446,11 @@ Set maximum block size in bytes (default: 750000)
.IP
Set maximum size of high\-priority/low\-fee transactions in bytes
(default: 0)
.HP
\fB\-blockmintxfee=\fR<amt>
.IP
Set lowest fee rate (in BTC/kB) for transactions to be included in block
creation. (default: 0.00001)
.PP
RPC server options:
.HP
@@ -455,8 +484,10 @@ Password for JSON\-RPC connections
.IP
Username and hashed password for JSON\-RPC connections. The field
<userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
canonical python script is included in share/rpcuser. This option
can be specified multiple times
canonical python script is included in share/rpcuser. The client
then connects normally using the
rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
option can be specified multiple times
.HP
\fB\-rpcport=\fR<port>
.IP
@@ -500,7 +531,7 @@ Show splash screen on startup (default: 1)
.IP
Reset all settings changed in the GUI
.SH COPYRIGHT
Copyright (C) 2009-2016 The Bitcoin Core developers
Copyright (C) 2009-2017 The Bitcoin Core developers
Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org> for further information about the software.
@@ -508,8 +539,8 @@ The source code is available from <https://github.com/bitcoin/bitcoin>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
or <https://opensource.org/licenses/MIT>
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 and UPnP software written by Thomas Bernard.
OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
Eric Young and UPnP software written by Thomas Bernard.

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5.
.TH BITCOIN-TX "1" "September 2016" "bitcoin-tx v0.13.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIN-TX "1" "June 2017" "bitcoin-tx v0.14.2.0" "User Commands"
.SH NAME
bitcoin-tx \- manual page for bitcoin-tx v0.13.0.0
bitcoin-tx \- manual page for bitcoin-tx v0.14.2.0
.SH DESCRIPTION
Bitcoin Core bitcoin\-tx utility version v0.13.0.0
Bitcoin Core bitcoin\-tx utility version v0.14.2.0
.SS "Usage:"
.TP
bitcoin\-tx [options] <hex\-tx> [commands]
@@ -67,13 +67,28 @@ outaddr=VALUE:ADDRESS
.IP
Add address\-based output to TX
.IP
outpubkey=VALUE:PUBKEY[:FLAGS]
.IP
Add pay\-to\-pubkey output to TX. Optionally add the "W" flag to produce a
pay\-to\-witness\-pubkey\-hash output. Optionally add the "S" flag to
wrap the output in a pay\-to\-script\-hash.
.IP
outdata=[VALUE:]DATA
.IP
Add data\-based output to TX
.IP
outscript=VALUE:SCRIPT
outscript=VALUE:SCRIPT[:FLAGS]
.IP
Add raw script output to TX
Add raw script output to TX. Optionally add the "W" flag to produce a
pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
wrap the output in a pay\-to\-script\-hash.
.IP
outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS]
.IP
Add Pay To n\-of\-m Multi\-sig output to TX. n = REQUIRED, m = PUBKEYS.
Optionally add the "W" flag to produce a
pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to
wrap the output in a pay\-to\-script\-hash.
.IP
sign=SIGHASH\-FLAGS
.IP
@@ -92,7 +107,7 @@ set=NAME:JSON\-STRING
.IP
Set register NAME to given JSON\-STRING
.SH COPYRIGHT
Copyright (C) 2009-2016 The Bitcoin Core developers
Copyright (C) 2009-2017 The Bitcoin Core developers
Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org> for further information about the software.
@@ -100,8 +115,8 @@ The source code is available from <https://github.com/bitcoin/bitcoin>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
or <https://opensource.org/licenses/MIT>
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 and UPnP software written by Thomas Bernard.
OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
Eric Young and UPnP software written by Thomas Bernard.

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.5.
.TH BITCOIND "1" "September 2016" "bitcoind v0.13.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIND "1" "June 2017" "bitcoind v0.14.2.0" "User Commands"
.SH NAME
bitcoind \- manual page for bitcoind v0.13.0.0
bitcoind \- manual page for bitcoind v0.14.2.0
.SH DESCRIPTION
Bitcoin Core Daemon version v0.13.0.0
Bitcoin Core Daemon version v0.14.2.0
.SS "Usage:"
.TP
bitcoind [options]
@@ -28,13 +28,14 @@ long fork (%s in cmd is replaced by message)
Execute command when the best block changes (%s in cmd is replaced by
block hash)
.HP
\fB\-checkblocks=\fR<n>
\fB\-assumevalid=\fR<hex>
.IP
How many blocks to check at startup (default: 288, 0 = all)
.HP
\fB\-checklevel=\fR<n>
.IP
How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3)
If this block is in the chain assume that it and its ancestors are valid
and potentially skip their script verification (0 to verify all,
default:
00000000000000000013176bf8d7dfeab4e1db31dc93bc311b436e82ab226b90,
testnet:
00000000000128796ee387cf110ccb9d2f36cffaf7f73079c995377c65ac0dcc)
.HP
\fB\-conf=\fR<file>
.IP
@@ -50,7 +51,7 @@ Specify data directory
.HP
\fB\-dbcache=\fR<n>
.IP
Set database cache size in megabytes (4 to 16384, default: 300)
Set database cache size in megabytes (4 to 16384, default: 450)
.HP
\fB\-loadblock=\fR<file>
.IP
@@ -67,11 +68,16 @@ Keep the transaction memory pool below <n> megabytes (default: 300)
\fB\-mempoolexpiry=\fR<n>
.IP
Do not keep transactions in the mempool longer than <n> hours (default:
72)
336)
.HP
\fB\-blockreconstructionextratxn=\fR<n>
.IP
Extra transactions to keep in memory for compact block reconstructions
(default: 100)
.HP
\fB\-par=\fR<n>
.IP
Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 =
Set the number of script verification threads (\fB\-6\fR to 16, 0 = auto, <0 =
leave that many cores free, default: 0)
.HP
\fB\-pid=\fR<file>
@@ -80,13 +86,15 @@ Specify pid file (default: bitcoind.pid)
.HP
\fB\-prune=\fR<n>
.IP
Reduce storage requirements by enabling pruning (deleting) of old blocks.
This allows the pruneblockchain RPC to be called to delete specific blocks,
and enables automatic pruning of old blocks if a target size in MiB is
provided. This mode is incompatible with \fB\-txindex\fR and \fB\-rescan\fR.
Warning: Reverting this setting requires re\-downloading the entire blockchain.
(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >550 =
automatically prune block files to stay under the specified target size in MiB)
Reduce storage requirements by enabling pruning (deleting) of old
blocks. This allows the pruneblockchain RPC to be called to
delete specific blocks, and enables automatic pruning of old
blocks if a target size in MiB is provided. This mode is
incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
setting requires re\-downloading the entire blockchain. (default:
0 = disable pruning blocks, 1 = allow manual pruning via RPC,
>550 = automatically prune block files to stay under the
specified target size in MiB)
.HP
\fB\-reindex\-chainstate\fR
.IP
@@ -128,7 +136,8 @@ for IPv6
.HP
\fB\-connect=\fR<ip>
.IP
Connect only to the specified node(s)
Connect only to the specified node(s); \fB\-noconnect\fR or \fB\-connect\fR=\fI\,0\/\fR alone to
disable automatic connections
.HP
\fB\-discover\fR
.IP
@@ -142,7 +151,7 @@ Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (def
\fB\-dnsseed\fR
.IP
Query for peer addresses via DNS lookup, if low on addresses (default: 1
unless \fB\-connect\fR)
unless \fB\-connect\fR/\-noconnect)
.HP
\fB\-externalip=\fR<ip>
.IP
@@ -154,7 +163,8 @@ Always query for peer addresses via DNS lookup (default: 0)
.HP
\fB\-listen\fR
.IP
Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
Accept connections from outside (default: 1 if no \fB\-proxy\fR or
\fB\-connect\fR/\-noconnect)
.HP
\fB\-listenonion\fR
.IP
@@ -209,6 +219,11 @@ Connect through SOCKS5 proxy
Randomize credentials for every proxy connection. This enables Tor
stream isolation (default: 1)
.HP
\fB\-rpcserialversion\fR
.IP
Sets the serialization of raw transaction or block hex returned in
non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1)
.HP
\fB\-seednode=\fR<ip>
.IP
Connect to a node to retrieve peer addresses, and disconnect
@@ -226,17 +241,22 @@ Tor control port to use if onion listening enabled (default:
.IP
Tor control port password (default: empty)
.HP
\fB\-upnp\fR
.IP
Use UPnP to map the listening port (default: 0)
.HP
\fB\-whitebind=\fR<addr>
.IP
Bind to given address and whitelist peers connecting to it. Use
[host]:port notation for IPv6
.HP
\fB\-whitelist=\fR<netmask>
\fB\-whitelist=\fR<IP address or network>
.IP
Whitelist peers connecting from the given netmask or IP address. Can be
specified multiple times. Whitelisted peers cannot be DoS banned
and their transactions are always relayed, even if they are
already in the mempool, useful e.g. for a gateway
Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or
CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple
times. Whitelisted peers cannot be DoS banned and their
transactions are always relayed, even if they are already in the
mempool, useful e.g. for a gateway
.HP
\fB\-whitelistrelay\fR
.IP
@@ -245,7 +265,7 @@ not relaying transactions (default: 1)
.HP
\fB\-whitelistforcerelay\fR
.IP
Force relay of transactions from whitelisted peers even they violate
Force relay of transactions from whitelisted peers even if they violate
local relay policy (default: 1)
.HP
\fB\-maxuploadtarget=\fR<n>
@@ -292,13 +312,17 @@ Spend unconfirmed change when sending transactions (default: 1)
\fB\-txconfirmtarget=\fR<n>
.IP
If paytxfee is not set, include enough fee so transactions begin
confirmation on average within n blocks (default: 2)
confirmation on average within n blocks (default: 6)
.HP
\fB\-usehd\fR
.IP
Use hierarchical deterministic key generation (HD) after BIP32. Only has
effect during wallet creation/first start (default: 1)
.HP
\fB\-walletrbf\fR
.IP
Send transactions with full\-RBF opt\-in enabled (default: 0)
.HP
\fB\-upgradewallet\fR
.IP
Upgrade wallet to latest format on startup
@@ -352,9 +376,9 @@ Append comment to the user agent string
Output debugging information (default: 0, supplying <category> is
optional). If <category> is not supplied or if <category> = 1,
output all debugging information.<category> can be: addrman,
alert, bench, coindb, db, http, libevent, lock, mempool,
mempoolrej, net, proxy, prune, rand, reindex, rpc, selectcoins,
tor, zmq.
alert, bench, cmpctblock, coindb, db, http, libevent, lock,
mempool, mempoolrej, net, proxy, prune, rand, reindex, rpc,
selectcoins, tor, zmq.
.HP
\fB\-help\-debug\fR
.IP
@@ -427,6 +451,11 @@ Set maximum block size in bytes (default: 750000)
.IP
Set maximum size of high\-priority/low\-fee transactions in bytes
(default: 0)
.HP
\fB\-blockmintxfee=\fR<amt>
.IP
Set lowest fee rate (in BTC/kB) for transactions to be included in block
creation. (default: 0.00001)
.PP
RPC server options:
.HP
@@ -460,8 +489,10 @@ Password for JSON\-RPC connections
.IP
Username and hashed password for JSON\-RPC connections. The field
<userpw> comes in the format: <USERNAME>:<SALT>$<HASH>. A
canonical python script is included in share/rpcuser. This option
can be specified multiple times
canonical python script is included in share/rpcuser. The client
then connects normally using the
rpcuser=<USERNAME>/rpcpassword=<PASSWORD> pair of arguments. This
option can be specified multiple times
.HP
\fB\-rpcport=\fR<port>
.IP
@@ -479,7 +510,7 @@ option can be specified multiple times
.IP
Set the number of threads to service RPC calls (default: 4)
.SH COPYRIGHT
Copyright (C) 2009-2016 The Bitcoin Core developers
Copyright (C) 2009-2017 The Bitcoin Core developers
Please contribute if you find Bitcoin Core useful. Visit
<https://bitcoincore.org> for further information about the software.
@@ -487,8 +518,8 @@ The source code is available from <https://github.com/bitcoin/bitcoin>.
This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <http://www.opensource.org/licenses/mit-license.php>.
or <https://opensource.org/licenses/MIT>
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 and UPnP software written by Thomas Bernard.
OpenSSL Toolkit <https://www.openssl.org> and cryptographic software written by
Eric Young and UPnP software written by Thomas Bernard.

View File

@@ -1,12 +1,9 @@
(note: this is a temporary file, to be added-to by anybody, and moved to
release-notes at release time)
Bitcoin Core version 0.14.2 is now available from:
Bitcoin Core version *version* is now available from:
<https://bitcoin.org/bin/bitcoin-core-0.14.2/>
<https://bitcoin.org/bin/bitcoin-core-*version*/>
This is a new major version release, including new features, various bugfixes
and performance improvements, as well as updated translations.
This is a new minor version release, including various bugfixes and
performance improvements, as well as updated translations.
Please report bugs using the issue tracker at github:
@@ -22,9 +19,9 @@ Compatibility
Bitcoin Core is extensively tested on multiple operating systems using
the Linux kernel, macOS 10.8+, and Windows Vista and later.
Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support).
Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support),
No attempt is made to prevent installing or running the software on Windows XP, you
can still do so at your own risk but be aware that there are known instabilities.
can still do so at your own risk but be aware that there are known instabilities and issues.
Please do not report issues about Windows XP to the issue tracker.
Bitcoin Core should also work on most other Unix-like systems but is not
@@ -33,72 +30,31 @@ frequently tested on them.
Notable changes
===============
Low-level RPC changes
----------------------
miniupnp CVE-2017-8798
----------------------------
- `importprunedfunds` only accepts two required arguments. Some versions accept
an optional third arg, which was always ignored. Make sure to never pass more
than two arguments.
Bundled miniupnpc was updated to 2.0.20170509. This fixes an integer signedness error
(present in MiniUPnPc v1.4.20101221 through v2.0) that allows remote attackers
(within the LAN) to cause a denial of service or possibly have unspecified
other impact.
Fee Estimation Changes
----------------------
This only affects users that have explicitly enabled UPnP through the GUI
setting or through the `-upnp` option, as since the last UPnP vulnerability
(in Bitcoin Core 0.10.3) it has been disabled by default.
- Since 0.13.2 fee estimation for a confirmation target of 1 block has been
disabled. This is only a minor behavior change as there was often insufficient
data for this target anyway. `estimatefee 1` will now always return -1 and
`estimatesmartfee 1` will start searching at a target of 2.
If you use this option, it is recommended to upgrade to this version as soon as
possible.
- The default target for fee estimation is changed to 6 blocks in both the GUI
(previously 25) and for RPC calls (previously 2).
Known Bugs
==========
Removal of Priority Estimation
-------------------------------
Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin
control and smart fee estimation does not reflect any change in target from the
smart fee slider. It will only present an approximate fee calculated using the
default target. The fee calculated using the correct target is still applied to
the transaction and shown in the final send confirmation dialog.
- Estimation of "priority" needed for a transaction to be included within a target
number of blocks has been removed. The rpc calls are deprecated and will either
return -1 or 1e24 appropriately. The format for `fee_estimates.dat` has also
changed to no longer save these priority estimates. It will automatically be
converted to the new format which is not readable by prior versions of the
software.
- The concept of "priority" (coin age) transactions is planned to be removed in
the next major version. To prepare for this, the default for the rate limit of
priority transactions (`-limitfreerelay`) has been set to `0` kB/minute. This
is not to be confused with the `prioritisetransaction` RPC which will remain
supported for adding fee deltas to transactions.
P2P connection management
--------------------------
- Peers manually added through the addnode option or addnode RPC now have their own
limit of eight connections which does not compete with other inbound or outbound
connection usage and is not subject to the maxconnections limitation.
- New connections to manually added peers are much faster.
Introduction of assumed-valid blocks
-------------------------------------
- A significant portion of the initial block download time is spent verifying
scripts/signatures. Although the verification must pass to ensure the security
of the system, no other result from this verification is needed: If the node
knew the history of a given block were valid it could skip checking scripts
for its ancestors.
- A new configuration option 'assumevalid' is provided to express this knowledge
to the software. Unlike the 'checkpoints' in the past this setting does not
force the use of a particular chain: chains that are consistent with it are
processed quicker, but other chains are still accepted if they'd otherwise
be chosen as best. Also unlike 'checkpoints' the user can configure which
block history is assumed true, this means that even outdated software can
sync more quickly if the setting is updated by the user.
- Because the validity of a chain history is a simple objective fact it is much
easier to review this setting. As a result the software ships with a default
value adjusted to match the current chain shortly before release. The use
of this default value can be disabled by setting -assumevalid=0
0.14.0 Change log
0.14.2 Change log
=================
Detailed release notes follow. This overview includes changes that affect
@@ -106,48 +62,41 @@ behavior, not code moves, refactors and string updates. For convenience in locat
the code changes and accompanying discussion, both the pull request and
git merge commit are mentioned.
### RPC and REST
UTXO set query (`GET /rest/getutxos/<checkmempool>/<txid>-<n>/<txid>-<n>/.../<txid>-<n>.<bin|hex|json>`) responses
were changed to return status code HTTP_BAD_REQUEST (400) instead of HTTP_INTERNAL_SERVER_ERROR (500) when requests
contain invalid parameters.
The first boolean argument to `getaddednodeinfo` has been removed. This is an incompatible change.
Call "getmininginfo" loses the "testnet" field in favor of the more generic "chain" (which has been present for years).
### Configuration and command-line options
### Block and transaction handling
### RPC and other APIs
- #10410 `321419b` Fix importwallet edge case rescan bug (ryanofsky)
### P2P protocol and network code
### Validation
- #10424 `37a8fc5` Populate services in GetLocalAddress (morcos)
- #10441 `9e3ad50` Only enforce expected services for half of outgoing connections (theuni)
### Build system
### Wallet
0.14.0 Fundrawtransaction change address reuse
==============================================
Before 0.14, `fundrawtransaction` was by default wallet stateless. In almost all cases `fundrawtransaction` does add a change-output to the outputs of the funded transaction. Before 0.14, the used keypool key was never marked as change-address key and directly returned to the keypool (leading to address reuse).
Before 0.14, calling `getnewaddress` directly after `fundrawtransaction` did generate the same address as the change-output address.
Since 0.14, fundrawtransaction does reserve the change-output-key from the keypool by default (optional by setting `reserveChangeKey`, default = `true`)
Users should also consider using `getrawchangeaddress()` in conjunction with `fundrawtransaction`'s `changeAddress` option.
### GUI
### Tests
- #10414 `ffb0c4b` miniupnpc 2.0.20170509 (fanquake)
- #10228 `ae479bc` Regenerate bitcoin-config.h as necessary (theuni)
### Miscellaneous
- #10245 `44a17f2` Minor fix in build documentation for FreeBSD 11 (shigeya)
- #10215 `0aee4a1` Check interruptNet during dnsseed lookups (TheBlueMatt)
### GUI
- #10231 `1e936d7` Reduce a significant cs_main lock freeze (jonasschnelli)
### Wallet
- #10294 `1847642` Unset change position when there is no change (instagibbs)
Credits
=======
Thanks to everyone who directly contributed to this release:
- Alex Morcos
- Cory Fields
- fanquake
- Gregory Sanders
- Jonas Schnelli
- Matt Corallo
- Russell Yanofsky
- Shigeya Suzuki
- Wladimir J. van der Laan
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).

View File

@@ -0,0 +1,143 @@
Bitcoin Core version 0.14.1 is now available from:
<https://bitcoin.org/bin/bitcoin-core-0.14.1/>
This is a new minor version release, including various bugfixes and
performance improvements, as well as updated translations.
Please report bugs using the issue tracker at github:
<https://github.com/bitcoin/bitcoin/issues>
To receive security and update notifications, please subscribe to:
<https://bitcoincore.org/en/list/announcements/join/>
Compatibility
==============
Bitcoin Core is extensively tested on multiple operating systems using
the Linux kernel, macOS 10.8+, and Windows Vista and later.
Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support),
No attempt is made to prevent installing or running the software on Windows XP, you
can still do so at your own risk but be aware that there are known instabilities and issues.
Please do not report issues about Windows XP to the issue tracker.
Bitcoin Core should also work on most other Unix-like systems but is not
frequently tested on them.
Notable changes
===============
RPC changes
-----------
- The first positional argument of `createrawtransaction` was renamed from
`transactions` to `inputs`.
- The argument of `disconnectnode` was renamed from `node` to `address`.
These interface changes break compatibility with 0.14.0, when the named
arguments functionality, introduced in 0.14.0, is used. Client software
using these calls with named arguments needs to be updated.
Mining
------
In previous versions, getblocktemplate required segwit support from downstream
clients/miners once the feature activated on the network. In this version, it
now supports non-segwit clients even after activation, by removing all segwit
transactions from the returned block template. This allows non-segwit miners to
continue functioning correctly even after segwit has activated.
Due to the limitations in previous versions, getblocktemplate also recommended
non-segwit clients to not signal for the segwit version-bit. Since this is no
longer an issue, getblocktemplate now always recommends signalling segwit for
all miners. This is safe because ability to enforce the rule is the only
required criteria for safe activation, not actually producing segwit-enabled
blocks.
UTXO memory accounting
----------------------
Memory usage for the UTXO cache is being calculated more accurately, so that
the configured limit (`-dbcache`) will be respected when memory usage peaks
during cache flushes. The memory accounting in prior releases is estimated to
only account for half the actual peak utilization.
The default `-dbcache` has also been changed in this release to 450MiB. Users
who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully
cached in memory) should consider increasing this setting in order to achieve
the same cache performance as prior releases. Users on low-memory systems
(such as systems with 1GB or less) should consider specifying a lower value for
this parameter.
Additional information relating to running on low-memory systems can be found
here:
[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7).
0.14.1 Change log
=================
Detailed release notes follow. This overview includes changes that affect
behavior, not code moves, refactors and string updates. For convenience in locating
the code changes and accompanying discussion, both the pull request and
git merge commit are mentioned.
### RPC and other APIs
- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke)
- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift)
- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell)
- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar)
- #10204 `3c79602` Rename disconnectnode argument (jnewbery)
### Block and transaction handling
- #10126 `0b5e162` Compensate for memory peak at flush time (sipa)
- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar)
- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos)
### P2P protocol and network code
- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt)
- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni)
### Build system
- #9973 `e9611d1` depends: fix zlib build on osx (theuni)
### GUI
- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101)
### Mining
- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar)
- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar)
### Tests and QA
- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar)
### Miscellaneous
- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike)
- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj)
- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery)
Credits
=======
Thanks to everyone who directly contributed to this release:
- Alex Morcos
- Andrew Chow
- Awemany
- Cory Fields
- Gregory Maxwell
- James Evans
- John Newbery
- MarcoFalke
- Matt Corallo
- Pieter Wuille
- practicalswift
- rawodb
- Suhas Daftuar
- Wladimir J. van der Laan
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).

View File

@@ -54,6 +54,11 @@ class RawTransactionsTest(BitcoinTestFramework):
self.nodes[0].generate(121)
self.sync_all()
# ensure that setting changePosition in fundraw with an exact match is handled properly
rawmatch = self.nodes[2].createrawtransaction([], {self.nodes[2].getnewaddress():50})
rawmatch = self.nodes[2].fundrawtransaction(rawmatch, {"changePosition":1, "subtractFeeFromOutputs":[0]})
assert_equal(rawmatch["changepos"], -1)
watchonly_address = self.nodes[0].getnewaddress()
watchonly_pubkey = self.nodes[0].validateaddress(watchonly_address)["pubkey"]
watchonly_amount = Decimal(200)
@@ -469,7 +474,9 @@ class RawTransactionsTest(BitcoinTestFramework):
# locked wallet test
self.nodes[1].encryptwallet("test")
self.nodes.pop(1)
stop_nodes(self.nodes)
stop_node(self.nodes[0], 0)
stop_node(self.nodes[1], 2)
stop_node(self.nodes[2], 3)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
# This test is not meant to test fee estimation and we'd like

View File

@@ -5,11 +5,11 @@
"""Test rescan behavior of importaddress, importpubkey, importprivkey, and
importmulti RPCs with different types of keys and rescan options.
In the first part of the test, node 0 creates an address for each type of
import RPC call and sends BTC to it. Then other nodes import the addresses,
and the test makes listtransactions and getbalance calls to confirm that the
importing node either did or did not execute rescans picking up the send
transactions.
In the first part of the test, node 1 creates an address for each type of
import RPC call and node 0 sends BTC to it. Then other nodes import the
addresses, and the test makes listtransactions and getbalance calls to confirm
that the importing node either did or did not execute rescans picking up the
send transactions.
In the second part of the test, node 0 sends more BTC to each address, and the
test makes more listtransactions and getbalance calls to confirm that the
@@ -81,6 +81,12 @@ class Variant(collections.namedtuple("Variant", "call data rescan prune")):
assert_equal(tx["txid"], txid)
assert_equal(tx["confirmations"], confirmations)
assert_equal("trusted" not in tx, True)
# Verify the transaction is correctly marked watchonly depending on
# whether the transaction pays to an imported public key or
# imported private key. The test setup ensures that transaction
# inputs will not be from watchonly keys (important because
# involvesWatchonly will be true if either the transaction output
# or inputs are watchonly).
if self.data != Data.priv:
assert_equal(tx["involvesWatchonly"], True)
else:
@@ -106,11 +112,11 @@ RESCAN_WINDOW = 2 * 60 * 60
class ImportRescanTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 1 + len(IMPORT_NODES)
self.num_nodes = 2 + len(IMPORT_NODES)
def setup_network(self):
extra_args = [["-debug=1"] for _ in range(self.num_nodes)]
for i, import_node in enumerate(IMPORT_NODES, 1):
for i, import_node in enumerate(IMPORT_NODES, 2):
if import_node.prune:
extra_args[i] += ["-prune=1"]
@@ -123,9 +129,9 @@ class ImportRescanTest(BitcoinTestFramework):
# each possible type of wallet import RPC.
for i, variant in enumerate(IMPORT_VARIANTS):
variant.label = "label {} {}".format(i, variant)
variant.address = self.nodes[0].validateaddress(self.nodes[0].getnewaddress(variant.label))
variant.key = self.nodes[0].dumpprivkey(variant.address["address"])
variant.initial_amount = 25 - (i + 1) / 4.0
variant.address = self.nodes[1].validateaddress(self.nodes[1].getnewaddress(variant.label))
variant.key = self.nodes[1].dumpprivkey(variant.address["address"])
variant.initial_amount = 10 - (i + 1) / 4.0
variant.initial_txid = self.nodes[0].sendtoaddress(variant.address["address"], variant.initial_amount)
# Generate a block containing the initial transactions, then another
@@ -142,7 +148,7 @@ class ImportRescanTest(BitcoinTestFramework):
for variant in IMPORT_VARIANTS:
variant.expect_disabled = variant.rescan == Rescan.yes and variant.prune and variant.call == Call.single
expect_rescan = variant.rescan == Rescan.yes and not variant.expect_disabled
variant.node = self.nodes[1 + IMPORT_NODES.index(ImportNode(variant.prune, expect_rescan))]
variant.node = self.nodes[2 + IMPORT_NODES.index(ImportNode(variant.prune, expect_rescan))]
variant.do_import(timestamp)
if expect_rescan:
variant.expected_balance = variant.initial_amount
@@ -156,7 +162,7 @@ class ImportRescanTest(BitcoinTestFramework):
# Create new transactions sending to each address.
fee = self.nodes[0].getnetworkinfo()["relayfee"]
for i, variant in enumerate(IMPORT_VARIANTS):
variant.sent_amount = 25 - (2 * i + 1) / 8.0
variant.sent_amount = 10 - (2 * i + 1) / 8.0
variant.sent_txid = self.nodes[0].sendtoaddress(variant.address["address"], variant.sent_amount)
# Generate a block containing the new transactions.

View File

@@ -102,6 +102,18 @@ class MempoolPackagesTest(BitcoinTestFramework):
assert_equal(mempool[x], v_descendants[x])
assert(chain[0] not in v_descendants.keys())
# Check that ancestor modified fees includes fee deltas from
# prioritisetransaction
self.nodes[0].prioritisetransaction(chain[0], 0, 1000)
mempool = self.nodes[0].getrawmempool(True)
ancestor_fees = 0
for x in chain:
ancestor_fees += mempool[x]['fee']
assert_equal(mempool[x]['ancestorfees'], ancestor_fees * COIN + 1000)
# Undo the prioritisetransaction for later tests
self.nodes[0].prioritisetransaction(chain[0], 0, -1000)
# Check that descendant modified fees includes fee deltas from
# prioritisetransaction
self.nodes[0].prioritisetransaction(chain[-1], 0, 1000)

View File

@@ -1701,9 +1701,11 @@ class SegWitTest(BitcoinTestFramework):
for node in [self.nodes[0], self.nodes[2]]:
gbt_results = node.getblocktemplate()
block_version = gbt_results['version']
# If we're not indicating segwit support, we should not be signalling
# for segwit activation, nor should we get a witness commitment.
assert_equal(block_version & (1 << VB_WITNESS_BIT), 0)
# If we're not indicating segwit support, we will still be
# signalling for segwit activation.
assert_equal((block_version & (1 << VB_WITNESS_BIT) != 0), node == self.nodes[0])
# If we don't specify the segwit rule, then we won't get a default
# commitment.
assert('default_witness_commitment' not in gbt_results)
# Workaround:

View File

@@ -18,6 +18,11 @@ import os
MIN_BLOCKS_TO_KEEP = 288
# Rescans start at the earliest block up to 2 hours before a key timestamp, so
# the manual prune RPC avoids pruning blocks in the same window to be
# compatible with pruning based on key creation time.
RESCAN_WINDOW = 2 * 60 * 60
def calc_usage(blockdir):
return sum(os.path.getsize(blockdir+f) for f in os.listdir(blockdir) if os.path.isfile(blockdir+f)) / (1024. * 1024.)
@@ -239,7 +244,7 @@ class PruneTest(BitcoinTestFramework):
def height(index):
if use_timestamp:
return node.getblockheader(node.getblockhash(index))["time"]
return node.getblockheader(node.getblockhash(index))["time"] + RESCAN_WINDOW
else:
return index

View File

@@ -35,11 +35,9 @@ class RPCBindTest(BitcoinTestFramework):
base_args += ['-rpcallowip=' + x for x in allow_ips]
binds = ['-rpcbind='+addr for addr in addresses]
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [base_args + binds], connect_to)
try:
pid = bitcoind_processes[0].pid
assert_equal(set(get_bind_addrs(pid)), set(expected))
finally:
stop_nodes(self.nodes)
pid = bitcoind_processes[0].pid
assert_equal(set(get_bind_addrs(pid)), set(expected))
stop_nodes(self.nodes)
def run_allowip_test(self, allow_ips, rpchost, rpcport):
'''
@@ -48,13 +46,10 @@ class RPCBindTest(BitcoinTestFramework):
'''
base_args = ['-disablewallet', '-nolisten'] + ['-rpcallowip='+x for x in allow_ips]
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [base_args])
try:
# connect to node through non-loopback interface
node = get_rpc_proxy(rpc_url(0, "%s:%d" % (rpchost, rpcport)), 0)
node.getnetworkinfo()
finally:
node = None # make sure connection will be garbage collected and closed
stop_nodes(self.nodes)
# connect to node through non-loopback interface
node = get_rpc_proxy(rpc_url(0, "%s:%d" % (rpchost, rpcport)), 0)
node.getnetworkinfo()
stop_nodes(self.nodes)
def run_test(self):
# due to OS-specific network stats queries, this test works only on Linux

View File

@@ -11,9 +11,9 @@ from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *
from test_framework.mininode import sha256, ripemd160, CTransaction, CTxIn, COutPoint, CTxOut
from test_framework.address import script_to_p2sh, key_to_p2pkh
from test_framework.script import CScript, OP_HASH160, OP_CHECKSIG, OP_0, hash160, OP_EQUAL, OP_DUP, OP_EQUALVERIFY, OP_1, OP_2, OP_CHECKMULTISIG
from test_framework.script import CScript, OP_HASH160, OP_CHECKSIG, OP_0, hash160, OP_EQUAL, OP_DUP, OP_EQUALVERIFY, OP_1, OP_2, OP_CHECKMULTISIG, OP_TRUE
from io import BytesIO
from test_framework.mininode import FromHex
from test_framework.mininode import ToHex, FromHex, COIN
NODE_0 = 0
NODE_1 = 1
@@ -130,10 +130,14 @@ class SegWitTest(BitcoinTestFramework):
print("Verify sigops are counted in GBT with pre-BIP141 rules before the fork")
txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
tmpl = self.nodes[0].getblocktemplate({})
assert(tmpl['sizelimit'] == 1000000)
assert('weightlimit' not in tmpl)
assert(tmpl['sigoplimit'] == 20000)
assert(tmpl['transactions'][0]['hash'] == txid)
assert(tmpl['transactions'][0]['sigops'] == 2)
tmpl = self.nodes[0].getblocktemplate({'rules':['segwit']})
assert(tmpl['sizelimit'] == 1000000)
assert('weightlimit' not in tmpl)
assert(tmpl['sigoplimit'] == 20000)
assert(tmpl['transactions'][0]['hash'] == txid)
assert(tmpl['transactions'][0]['sigops'] == 2)
@@ -241,22 +245,60 @@ class SegWitTest(BitcoinTestFramework):
print("Verify sigops are counted in GBT with BIP141 rules after the fork")
txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
tmpl = self.nodes[0].getblocktemplate({'rules':['segwit']})
assert(tmpl['sizelimit'] >= 3999577) # actual maximum size is lower due to minimum mandatory non-witness data
assert(tmpl['weightlimit'] == 4000000)
assert(tmpl['sigoplimit'] == 80000)
assert(tmpl['transactions'][0]['txid'] == txid)
assert(tmpl['transactions'][0]['sigops'] == 8)
print("Verify non-segwit miners get a valid GBT response after the fork")
send_to_witness(1, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[0], False, Decimal("49.998"))
try:
tmpl = self.nodes[0].getblocktemplate({})
assert(len(tmpl['transactions']) == 1) # Doesn't include witness tx
assert(tmpl['sigoplimit'] == 20000)
assert(tmpl['transactions'][0]['hash'] == txid)
assert(tmpl['transactions'][0]['sigops'] == 2)
assert(('!segwit' in tmpl['rules']) or ('segwit' not in tmpl['rules']))
except JSONRPCException:
# This is an acceptable outcome
pass
self.nodes[0].generate(1) # Mine a block to clear the gbt cache
print("Non-segwit miners are able to use GBT response after activation.")
# Create a 3-tx chain: tx1 (non-segwit input, paying to a segwit output) ->
# tx2 (segwit input, paying to a non-segwit output) ->
# tx3 (non-segwit input, paying to a non-segwit output).
# tx1 is allowed to appear in the block, but no others.
txid1 = send_to_witness(1, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[0], False, Decimal("49.996"))
hex_tx = self.nodes[0].gettransaction(txid)['hex']
tx = FromHex(CTransaction(), hex_tx)
assert(tx.wit.is_null()) # This should not be a segwit input
assert(txid1 in self.nodes[0].getrawmempool())
# Now create tx2, which will spend from txid1.
tx = CTransaction()
tx.vin.append(CTxIn(COutPoint(int(txid1, 16), 0), b''))
tx.vout.append(CTxOut(int(49.99*COIN), CScript([OP_TRUE])))
tx2_hex = self.nodes[0].signrawtransaction(ToHex(tx))['hex']
txid2 = self.nodes[0].sendrawtransaction(tx2_hex)
tx = FromHex(CTransaction(), tx2_hex)
assert(not tx.wit.is_null())
# Now create tx3, which will spend from txid2
tx = CTransaction()
tx.vin.append(CTxIn(COutPoint(int(txid2, 16), 0), b""))
tx.vout.append(CTxOut(int(49.95*COIN), CScript([OP_TRUE]))) # Huge fee
tx.calc_sha256()
txid3 = self.nodes[0].sendrawtransaction(ToHex(tx))
assert(tx.wit.is_null())
assert(txid3 in self.nodes[0].getrawmempool())
# Now try calling getblocktemplate() without segwit support.
template = self.nodes[0].getblocktemplate()
# Check that tx1 is the only transaction of the 3 in the template.
template_txids = [ t['txid'] for t in template['transactions'] ]
assert(txid2 not in template_txids and txid3 not in template_txids)
assert(txid1 in template_txids)
# Check that running with segwit support results in all 3 being included.
template = self.nodes[0].getblocktemplate({"rules": ["segwit"]})
template_txids = [ t['txid'] for t in template['transactions'] ]
assert(txid1 in template_txids)
assert(txid2 in template_txids)
assert(txid3 in template_txids)
# Mine a block to clear the gbt cache again.
self.nodes[0].generate(1)
print("Verify behaviour of importaddress, addwitnessaddress and listunspent")

View File

@@ -375,28 +375,19 @@ def stop_node(node, i):
node.stop()
except http.client.CannotSendRequest as e:
print("WARN: Unable to stop node: " + repr(e))
bitcoind_processes[i].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
return_code = bitcoind_processes[i].wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
assert_equal(return_code, 0)
del bitcoind_processes[i]
def stop_nodes(nodes):
for node in nodes:
try:
node.stop()
except http.client.CannotSendRequest as e:
print("WARN: Unable to stop node: " + repr(e))
del nodes[:] # Emptying array closes connections as a side effect
wait_bitcoinds()
for i, node in enumerate(nodes):
stop_node(node, i)
assert not bitcoind_processes.values() # All connections must be gone now
def set_node_times(nodes, t):
for node in nodes:
node.setmocktime(t)
def wait_bitcoinds():
# Wait for all bitcoinds to cleanly exit
for bitcoind in bitcoind_processes.values():
bitcoind.wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT)
bitcoind_processes.clear()
def connect_nodes(from_connection, node_num):
ip_port = "127.0.0.1:"+str(p2p_port(node_num))
from_connection.addnode(ip_port, "onetry")

View File

@@ -5,7 +5,7 @@
DIST_SUBDIRS = secp256k1 univalue
AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS)
AM_CXXFLAGS = $(HARDENED_CXXFLAGS)
AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS)
AM_CPPFLAGS = $(HARDENED_CPPFLAGS)
EXTRA_LIBRARIES =
@@ -457,6 +457,14 @@ DISTCLEANFILES = obj/build.h
EXTRA_DIST = $(CTAES_DIST)
config/bitcoin-config.h: config/stamp-h1
@$(MAKE) -C $(top_builddir) $(subdir)/$(@)
config/stamp-h1: $(top_srcdir)/$(subdir)/config/bitcoin-config.h.in $(top_builddir)/config.status
$(AM_V_at)$(MAKE) -C $(top_builddir) $(subdir)/$(@)
$(top_srcdir)/$(subdir)/config/bitcoin-config.h.in: $(am__configure_deps)
$(AM_V_at)$(MAKE) -C $(top_srcdir) $(subdir)/config/bitcoin-config.h.in
clean-local:
-$(MAKE) -C secp256k1 clean
-$(MAKE) -C univalue clean

View File

@@ -242,6 +242,9 @@ static void MutateTxAddOutAddr(CMutableTransaction& tx, const std::string& strIn
std::vector<std::string> vStrInputParts;
boost::split(vStrInputParts, strInput, boost::is_any_of(":"));
if (vStrInputParts.size() != 2)
throw std::runtime_error("TX output missing or too many separators");
// Extract and validate VALUE
CAmount value = ExtractAndValidateValue(vStrInputParts[0]);
@@ -264,6 +267,9 @@ static void MutateTxAddOutPubKey(CMutableTransaction& tx, const std::string& str
std::vector<std::string> vStrInputParts;
boost::split(vStrInputParts, strInput, boost::is_any_of(":"));
if (vStrInputParts.size() < 2 || vStrInputParts.size() > 3)
throw std::runtime_error("TX output missing or too many separators");
// Extract and validate VALUE
CAmount value = ExtractAndValidateValue(vStrInputParts[0]);

View File

@@ -15,12 +15,12 @@
//! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 0
#define CLIENT_VERSION_MINOR 13
#define CLIENT_VERSION_REVISION 99
#define CLIENT_VERSION_MINOR 14
#define CLIENT_VERSION_REVISION 2
#define CLIENT_VERSION_BUILD 0
//! Set to true for release, false for prerelease or test build
#define CLIENT_VERSION_IS_RELEASE false
#define CLIENT_VERSION_IS_RELEASE true
/**
* Copyright year (2009-this)

View File

@@ -25,9 +25,9 @@ public:
static const size_t OUTPUT_SIZE = CSHA256::OUTPUT_SIZE;
void Finalize(unsigned char hash[OUTPUT_SIZE]) {
unsigned char buf[sha.OUTPUT_SIZE];
unsigned char buf[CSHA256::OUTPUT_SIZE];
sha.Finalize(buf);
sha.Reset().Write(buf, sha.OUTPUT_SIZE).Finalize(hash);
sha.Reset().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(hash);
}
CHash256& Write(const unsigned char *data, size_t len) {
@@ -49,9 +49,9 @@ public:
static const size_t OUTPUT_SIZE = CRIPEMD160::OUTPUT_SIZE;
void Finalize(unsigned char hash[OUTPUT_SIZE]) {
unsigned char buf[sha.OUTPUT_SIZE];
unsigned char buf[CSHA256::OUTPUT_SIZE];
sha.Finalize(buf);
CRIPEMD160().Write(buf, sha.OUTPUT_SIZE).Finalize(hash);
CRIPEMD160().Write(buf, CSHA256::OUTPUT_SIZE).Finalize(hash);
}
CHash160& Write(const unsigned char *data, size_t len) {

View File

@@ -112,7 +112,7 @@ static bool multiUserAuthorized(std::string strUserPass)
std::string strSalt = vFields[1];
std::string strHash = vFields[2];
unsigned int KEY_SIZE = 32;
static const unsigned int KEY_SIZE = 32;
unsigned char out[KEY_SIZE];
CHMAC_SHA256(reinterpret_cast<const unsigned char*>(strSalt.c_str()), strSalt.size()).Write(reinterpret_cast<const unsigned char*>(strPass.c_str()), strPass.size()).Finalize(out);

View File

@@ -801,6 +801,19 @@ ServiceFlags nLocalServices = NODE_NETWORK;
}
[[noreturn]] static void new_handler_terminate()
{
// Rather than throwing std::bad-alloc if allocation fails, terminate
// immediately to (try to) avoid chain corruption.
// Since LogPrintf may itself allocate memory, set the handler directly
// to terminate first.
std::set_new_handler(std::terminate);
LogPrintf("Error: Out of memory. Terminating.\n");
// The log was successful, terminate now.
std::terminate();
};
bool AppInitBasicSetup()
{
// ********************************************************* Step 1: setup
@@ -853,6 +866,9 @@ bool AppInitBasicSetup()
// Ignore SIGPIPE, otherwise it will bring the daemon down if the client closes unexpectedly
signal(SIGPIPE, SIG_IGN);
#endif
std::set_new_handler(new_handler_terminate);
return true;
}

View File

@@ -127,8 +127,10 @@ void BlockAssembler::resetBlock()
blockFinished = false;
}
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn)
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx)
{
int64_t nTimeStart = GetTimeMicros();
resetBlock();
pblocktemplate.reset(new CBlockTemplate());
@@ -165,10 +167,14 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
// -promiscuousmempoolflags is used.
// TODO: replace this with a call to main to assess validity of a mempool
// transaction (which in most cases can be a no-op).
fIncludeWitness = IsWitnessEnabled(pindexPrev, chainparams.GetConsensus());
fIncludeWitness = IsWitnessEnabled(pindexPrev, chainparams.GetConsensus()) && fMineWitnessTx;
addPriorityTxs();
addPackageTxs();
int nPackagesSelected = 0;
int nDescendantsUpdated = 0;
addPackageTxs(nPackagesSelected, nDescendantsUpdated);
int64_t nTime1 = GetTimeMicros();
nLastBlockTx = nBlockTx;
nLastBlockSize = nBlockSize;
@@ -200,6 +206,9 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
if (!TestBlockValidity(state, chainparams, *pblock, pindexPrev, false, false)) {
throw std::runtime_error(strprintf("%s: TestBlockValidity failed: %s", __func__, FormatStateMessage(state)));
}
int64_t nTime2 = GetTimeMicros();
LogPrint("bench", "CreateNewBlock() packages: %.2fms (%d packages, %d updated descendants), validity: %.2fms (total %.2fms)\n", 0.001 * (nTime1 - nTimeStart), nPackagesSelected, nDescendantsUpdated, 0.001 * (nTime2 - nTime1), 0.001 * (nTime2 - nTimeStart));
return std::move(pblocktemplate);
}
@@ -340,9 +349,10 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
}
}
void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded,
int BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded,
indexed_modified_transaction_set &mapModifiedTx)
{
int nDescendantsUpdated = 0;
BOOST_FOREACH(const CTxMemPool::txiter it, alreadyAdded) {
CTxMemPool::setEntries descendants;
mempool.CalculateDescendants(it, descendants);
@@ -350,6 +360,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread
BOOST_FOREACH(CTxMemPool::txiter desc, descendants) {
if (alreadyAdded.count(desc))
continue;
++nDescendantsUpdated;
modtxiter mit = mapModifiedTx.find(desc);
if (mit == mapModifiedTx.end()) {
CTxMemPoolModifiedEntry modEntry(desc);
@@ -362,6 +373,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread
}
}
}
return nDescendantsUpdated;
}
// Skip entries in mapTx that are already in a block or are present
@@ -402,7 +414,7 @@ void BlockAssembler::SortForBlock(const CTxMemPool::setEntries& package, CTxMemP
// Each time through the loop, we compare the best transaction in
// mapModifiedTxs with the next transaction in the mempool to decide what
// transaction package to work on next.
void BlockAssembler::addPackageTxs()
void BlockAssembler::addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated)
{
// mapModifiedTx will store sorted packages after they are modified
// because some of their txs are already in the block
@@ -416,6 +428,13 @@ void BlockAssembler::addPackageTxs()
CTxMemPool::indexed_transaction_set::index<ancestor_score>::type::iterator mi = mempool.mapTx.get<ancestor_score>().begin();
CTxMemPool::txiter iter;
// Limit the number of attempts to add transactions to the block when it is
// close to full; this is just a simple heuristic to finish quickly if the
// mempool has a lot of entries.
const int64_t MAX_CONSECUTIVE_FAILURES = 1000;
int64_t nConsecutiveFailed = 0;
while (mi != mempool.mapTx.get<ancestor_score>().end() || !mapModifiedTx.empty())
{
// First try to find a new transaction in mapTx to evaluate.
@@ -477,6 +496,14 @@ void BlockAssembler::addPackageTxs()
mapModifiedTx.get<ancestor_score>().erase(modit);
failedTx.insert(iter);
}
++nConsecutiveFailed;
if (nConsecutiveFailed > MAX_CONSECUTIVE_FAILURES && nBlockWeight >
nBlockMaxWeight - 4000) {
// Give up if we're close to full and haven't succeeded in a while
break;
}
continue;
}
@@ -497,6 +524,9 @@ void BlockAssembler::addPackageTxs()
continue;
}
// This transaction will make it in; reset the failed counter.
nConsecutiveFailed = 0;
// Package can be added. Sort the entries in a valid order.
std::vector<CTxMemPool::txiter> sortedEntries;
SortForBlock(ancestors, iter, sortedEntries);
@@ -507,8 +537,10 @@ void BlockAssembler::addPackageTxs()
mapModifiedTx.erase(sortedEntries[i]);
}
++nPackagesSelected;
// Update transactions that depend on each of these
UpdatePackagesForAdded(ancestors, mapModifiedTx);
nDescendantsUpdated += UpdatePackagesForAdded(ancestors, mapModifiedTx);
}
}

View File

@@ -165,7 +165,7 @@ private:
public:
BlockAssembler(const CChainParams& chainparams);
/** Construct a new block template with coinbase to scriptPubKeyIn */
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn);
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn, bool fMineWitnessTx=true);
private:
// utility functions
@@ -177,8 +177,10 @@ private:
// Methods for how to add transactions to a block.
/** Add transactions based on tx "priority" */
void addPriorityTxs();
/** Add transactions based on feerate including unconfirmed ancestors */
void addPackageTxs();
/** Add transactions based on feerate including unconfirmed ancestors
* Increments nPackagesSelected / nDescendantsUpdated with corresponding
* statistics from the package selection (for logging statistics). */
void addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated);
// helper function for addPriorityTxs
/** Test if tx will still "fit" in the block */
@@ -202,8 +204,9 @@ private:
/** Sort the package in an order that is valid to appear in a block */
void SortForBlock(const CTxMemPool::setEntries& package, CTxMemPool::txiter entry, std::vector<CTxMemPool::txiter>& sortedEntries);
/** Add descendants of given transactions to mapModifiedTx with ancestor
* state updated assuming given transactions are inBlock. */
void UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, indexed_modified_transaction_set &mapModifiedTx);
* state updated assuming given transactions are inBlock. Returns number
* of updated descendants. */
int UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, indexed_modified_transaction_set &mapModifiedTx);
};
/** Modify the extranonce in a block */

View File

@@ -143,7 +143,7 @@ static std::vector<CAddress> convertSeed6(const std::vector<SeedSpec6> &vSeedsIn
// one by discovery.
CAddress GetLocalAddress(const CNetAddr *paddrPeer, ServiceFlags nLocalServices)
{
CAddress ret(CService(CNetAddr(),GetListenPort()), NODE_NONE);
CAddress ret(CService(CNetAddr(),GetListenPort()), nLocalServices);
CService addr;
if (GetLocal(addr, paddrPeer))
{
@@ -1579,6 +1579,9 @@ void CConnman::ThreadDNSAddressSeed()
LogPrintf("Loading addresses from DNS seeds (could take a while)\n");
BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) {
if (interruptNet) {
return;
}
if (HaveNameProxy()) {
AddOneShot(seed.host);
} else {
@@ -1596,6 +1599,9 @@ void CConnman::ThreadDNSAddressSeed()
found++;
}
}
if (interruptNet) {
return;
}
// TODO: The seed name resolve may fail, yielding an IP of [::], which results in
// addrman assigning the same source to results from different seeds.
// This should switch to a hard-coded stable dummy IP for each seed name, so that the
@@ -1716,11 +1722,17 @@ void CConnman::ThreadOpenConnections()
// Only connect out to one peer per network group (/16 for IPv4).
// Do this here so we don't have to critsect vNodes inside mapAddresses critsect.
int nOutbound = 0;
int nOutboundRelevant = 0;
std::set<std::vector<unsigned char> > setConnected;
{
LOCK(cs_vNodes);
BOOST_FOREACH(CNode* pnode, vNodes) {
if (!pnode->fInbound && !pnode->fAddnode) {
// Count the peers that have all relevant services
if (pnode->fSuccessfullyConnected && !pnode->fFeeler && ((pnode->nServices & nRelevantServices) == nRelevantServices)) {
nOutboundRelevant++;
}
// Netgroups for inbound and addnode peers are not excluded because our goal here
// is to not use multiple of our limited outbound slots on a single netgroup
// but inbound and addnode peers do not use our outbound slots. Inbound peers
@@ -1784,14 +1796,27 @@ void CConnman::ThreadOpenConnections()
continue;
// only consider nodes missing relevant services after 40 failed attempts and only if less than half the outbound are up.
if ((addr.nServices & nRelevantServices) != nRelevantServices && (nTries < 40 || nOutbound >= (nMaxOutbound >> 1)))
ServiceFlags nRequiredServices = nRelevantServices;
if (nTries >= 40 && nOutbound < (nMaxOutbound >> 1)) {
nRequiredServices = REQUIRED_SERVICES;
}
if ((addr.nServices & nRequiredServices) != nRequiredServices) {
continue;
}
// do not allow non-default ports, unless after 50 invalid addresses selected already
if (addr.GetPort() != Params().GetDefaultPort() && nTries < 50)
continue;
addrConnect = addr;
// regardless of the services assumed to be available, only require the minimum if half or more outbound have relevant services
if (nOutboundRelevant >= (nMaxOutbound >> 1)) {
addrConnect.nServices = REQUIRED_SERVICES;
} else {
addrConnect.nServices = nRequiredServices;
}
break;
}
@@ -2318,9 +2343,17 @@ void CConnman::Interrupt()
interruptNet();
InterruptSocks5(true);
if (semOutbound)
for (int i=0; i<(nMaxOutbound + nMaxFeeler); i++)
if (semOutbound) {
for (int i=0; i<(nMaxOutbound + nMaxFeeler); i++) {
semOutbound->post();
}
}
if (semAddnode) {
for (int i=0; i<nMaxAddnode; i++) {
semAddnode->post();
}
}
}
void CConnman::Stop()
@@ -2336,10 +2369,6 @@ void CConnman::Stop()
if (threadSocketHandler.joinable())
threadSocketHandler.join();
if (semAddnode)
for (int i=0; i<nMaxAddnode; i++)
semOutbound->post();
if (fAddressesInitialized)
{
DumpData();

View File

@@ -92,7 +92,7 @@ static const ServiceFlags REQUIRED_SERVICES = NODE_NETWORK;
// NOTE: When adjusting this, update rpcnet:setban's help ("24h")
static const unsigned int DEFAULT_MISBEHAVING_BANTIME = 60 * 60 * 24; // Default 24-hour ban
typedef int NodeId;
typedef int64_t NodeId;
struct AddedNodeInfo
{

View File

@@ -5,6 +5,7 @@
#ifndef _BITCOIN_PREVECTOR_H_
#define _BITCOIN_PREVECTOR_H_
#include <assert.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
@@ -170,10 +171,15 @@ private:
}
} else {
if (!is_direct()) {
/* FIXME: Because malloc/realloc here won't call new_handler if allocation fails, assert
success. These should instead use an allocator or new/delete so that handlers
are called as necessary, but performance would be slightly degraded by doing so. */
_union.indirect = static_cast<char*>(realloc(_union.indirect, ((size_t)sizeof(T)) * new_capacity));
assert(_union.indirect);
_union.capacity = new_capacity;
} else {
char* new_indirect = static_cast<char*>(malloc(((size_t)sizeof(T)) * new_capacity));
assert(new_indirect);
T* src = direct_ptr(0);
T* dst = reinterpret_cast<T*>(new_indirect);
memcpy(dst, src, size() * sizeof(T));

View File

@@ -69,6 +69,9 @@ uint256 CTransaction::ComputeHash() const
uint256 CTransaction::GetWitnessHash() const
{
if (!HasWitness()) {
return GetHash();
}
return SerializeHash(*this, SER_GETHASH, 0);
}

View File

@@ -478,6 +478,7 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel)
connect(_clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int)));
connect(_clientModel, SIGNAL(networkActiveChanged(bool)), this, SLOT(setNetworkActive(bool)));
modalOverlay->setKnownBestHeight(_clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(_clientModel->getHeaderTipTime()));
setNumBlocks(_clientModel->getNumBlocks(), _clientModel->getLastBlockDate(), _clientModel->getVerificationProgress(NULL), false);
connect(_clientModel, SIGNAL(numBlocksChanged(int,QDateTime,double,bool)), this, SLOT(setNumBlocks(int,QDateTime,double,bool)));
@@ -505,8 +506,6 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel)
// initialize the disable state of the tray icon with the current value in the model.
setTrayIconVisible(optionsModel->getHideTrayIcon());
}
modalOverlay->setKnownBestHeight(clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(clientModel->getHeaderTipTime()));
} else {
// Disable possibility to show main window via action
toggleHideAction->setEnabled(false);
@@ -518,7 +517,10 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel)
// Propagate cleared model to child objects
rpcConsole->setClientModel(nullptr);
#ifdef ENABLE_WALLET
walletFrame->setClientModel(nullptr);
if (walletFrame)
{
walletFrame->setClientModel(nullptr);
}
#endif // ENABLE_WALLET
unitDisplayControl->setOptionsModel(nullptr);
}

View File

@@ -36,6 +36,8 @@ ClientModel::ClientModel(OptionsModel *_optionsModel, QObject *parent) :
banTableModel(0),
pollTimer(0)
{
cachedBestHeaderHeight = -1;
cachedBestHeaderTime = -1;
peerTableModel = new PeerTableModel(this);
banTableModel = new BanTableModel(this);
pollTimer = new QTimer(this);
@@ -74,18 +76,28 @@ int ClientModel::getNumBlocks() const
int ClientModel::getHeaderTipHeight() const
{
LOCK(cs_main);
if (!pindexBestHeader)
return 0;
return pindexBestHeader->nHeight;
if (cachedBestHeaderHeight == -1) {
// make sure we initially populate the cache via a cs_main lock
// otherwise we need to wait for a tip update
LOCK(cs_main);
if (pindexBestHeader) {
cachedBestHeaderHeight = pindexBestHeader->nHeight;
cachedBestHeaderTime = pindexBestHeader->GetBlockTime();
}
}
return cachedBestHeaderHeight;
}
int64_t ClientModel::getHeaderTipTime() const
{
LOCK(cs_main);
if (!pindexBestHeader)
return 0;
return pindexBestHeader->GetBlockTime();
if (cachedBestHeaderTime == -1) {
LOCK(cs_main);
if (pindexBestHeader) {
cachedBestHeaderHeight = pindexBestHeader->nHeight;
cachedBestHeaderTime = pindexBestHeader->GetBlockTime();
}
}
return cachedBestHeaderTime;
}
quint64 ClientModel::getTotalBytesRecv() const
@@ -283,6 +295,11 @@ static void BlockTipChanged(ClientModel *clientmodel, bool initialSync, const CB
int64_t& nLastUpdateNotification = fHeader ? nLastHeaderTipUpdateNotification : nLastBlockTipUpdateNotification;
if (fHeader) {
// cache best headers time and height to reduce future cs_main locks
clientmodel->cachedBestHeaderHeight = pIndex->nHeight;
clientmodel->cachedBestHeaderTime = pIndex->GetBlockTime();
}
// if we are in-sync, update the UI regardless of last update time
if (!initialSync || now - nLastUpdateNotification > MODEL_UPDATE_DELAY) {
//pass a async signal to the UI thread

View File

@@ -8,6 +8,8 @@
#include <QObject>
#include <QDateTime>
#include <atomic>
class AddressTableModel;
class BanTableModel;
class OptionsModel;
@@ -81,6 +83,10 @@ public:
QString formatClientStartupTime() const;
QString dataDir() const;
// caches for the best header
mutable std::atomic<int> cachedBestHeaderHeight;
mutable std::atomic<int64_t> cachedBestHeaderTime;
private:
OptionsModel *optionsModel;
PeerTableModel *peerTableModel;

View File

@@ -73,6 +73,10 @@
<source>&amp;Copy Address</source>
<translation>&amp;Dupliseer Adres</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Kopieer &amp;Etiket</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Verander</translation>
@@ -199,6 +203,14 @@
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation>U het die verkeerde wagwoord ingetik.</translation>
</message>
<message>
<source>Wallet decryption failed</source>
<translation>Beursie-dekripsie het misluk</translation>
</message>
<message>
<source>Wallet passphrase was successfully changed.</source>
<translation>Beursie wagwoordfrase is suksesvol verander.</translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
<translation>WAARSKUWING: Outomatiese Kapitalisering is aktief op u sleutelbord!</translation>
@@ -206,6 +218,10 @@
</context>
<context>
<name>BanTableModel</name>
<message>
<source>IP/Netmask</source>
<translation>IP/Netmasker</translation>
</message>
<message>
<source>Banned Until</source>
<translation>Verban tot</translation>
@@ -213,6 +229,10 @@
</context>
<context>
<name>BitcoinGUI</name>
<message>
<source>Sign &amp;message...</source>
<translation>Teken &amp;boodskap...</translation>
</message>
<message>
<source>Synchronizing with network...</source>
<translation>Netwerk-sinkronisasie...</translation>
@@ -293,6 +313,18 @@
<source>Open &amp;URI...</source>
<translation>Oop &amp; URI...</translation>
</message>
<message>
<source>Click to disable network activity.</source>
<translation>Kliek om netwerkaktiwiteit af te skakel.</translation>
</message>
<message>
<source>Network activity disabled.</source>
<translation>Netwerkaktiwiteit gedeaktiveer.</translation>
</message>
<message>
<source>Click to enable network activity again.</source>
<translation>Kliek om netwerkaktiwiteit weer aan te skakel.</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>Besig met herindeksering van blokke op hardeskyf...</translation>
@@ -309,6 +341,14 @@
<source>Change the passphrase used for wallet encryption</source>
<translation>Verander die wagwoord wat ek vir kodifikasie van my beursie gebruik</translation>
</message>
<message>
<source>&amp;Debug window</source>
<translation>&amp;Ontfout venster</translation>
</message>
<message>
<source>Open debugging and diagnostic console</source>
<translation>Maak ontfouting en diagnostiese konsole oop</translation>
</message>
<message>
<source>Bitcoin</source>
<translation>Bitcoin</translation>

View File

@@ -5,6 +5,10 @@
<source>Create a new address</source>
<translation>Skep 'n nuwe adres</translation>
</message>
<message>
<source>&amp;New</source>
<translation>&amp;Nuwe</translation>
</message>
<message>
<source>Copy the currently selected address to the system clipboard</source>
<translation>Maak 'n kopie van die huidige adres na die stelsel klipbord</translation>
@@ -17,6 +21,14 @@
<source>Delete the currently selected address from the list</source>
<translation>Verwyder die huidiglik gekieste address van die lys</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
<translation>Voer inligting uit van die huidige blad na n lêer</translation>
</message>
<message>
<source>&amp;Export</source>
<translation>&amp;Uitvoer</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>&amp;Verwyder</translation>
@@ -25,6 +37,42 @@
<source>Choose the address to send coins to</source>
<translation>Kies die address na wie die muntstukke gestuur moet word</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>K&amp;ies</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Stuur adresse</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Ontvang adresse</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>&amp;Kopie adres</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Kopie &amp;Etiket</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Wysig</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Voer adres lys uit</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Koma geskeide lêers (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Uitvoering Misluk</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
@@ -660,6 +708,10 @@
<source>Copy amount</source>
<translation>Kopieer bedrag</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Koma geskeide lêers (*.csv)</translation>
</message>
<message>
<source>Date</source>
<translation>Datum</translation>
@@ -680,6 +732,10 @@
<source>ID</source>
<translation>ID</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Uitvoering Misluk</translation>
</message>
<message>
<source>Range:</source>
<translation>Reeks:</translation>
@@ -704,6 +760,14 @@
</context>
<context>
<name>WalletView</name>
<message>
<source>&amp;Export</source>
<translation>&amp;Uitvoer</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
<translation>Voer inligting uit van die huidige blad na n lêer</translation>
</message>
</context>
<context>
<name>bitcoin-core</name>

View File

@@ -3,7 +3,7 @@
<name>AddressBookPage</name>
<message>
<source>Right-click to edit address or label</source>
<translation>Højreklik for at redigere adresse eller mærke</translation>
<translation>Højreklik for at redigere adresse eller mærkat</translation>
</message>
<message>
<source>Create a new address</source>
@@ -604,7 +604,7 @@
</message>
<message>
<source>Received with label</source>
<translation>Modtaget med mærke</translation>
<translation>Modtaget med mærkat</translation>
</message>
<message>
<source>Received with address</source>
@@ -3123,7 +3123,7 @@
</message>
<message>
<source>Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, &gt;%u = automatically prune block files to stay under the specified target size in MiB)</source>
<translation>Reducér pladskravene ved at beskære (slette, "prune") gamle blokke. Dette tillader pruneblockchain-RPC'en at blive kaldt for at slette specifikke blokke, og det aktiverer automatisk beskæring af gamle blokke, hvis en målstørrelse i MiB er angivet. Denne tilstand er ikke kompatibel med -txindex og -rescan. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, 1 = tillad manuel beskæring via RPC, &gt;%u = beskær automatisk blokfiler for at bliver under den angivne målstørrelse i MiB)</translation>
<translation>Reducér pladskravene ved at beskære (slette, prune) gamle blokke. Dette tillader pruneblockchain-RPC'en at blive kaldt for at slette specifikke blokke, og det aktiverer automatisk beskæring af gamle blokke, hvis en målstørrelse i MiB er angivet. Denne tilstand er ikke kompatibel med -txindex og -rescan. Advarsel: Fortrydelse af denne indstilling kræver download af hele blokkæden igen. (standard: 0 = slå beskæring af blokke fra, 1 = tillad manuel beskæring via RPC, &gt;%u = beskær automatisk blokfiler for at bliver under den angivne målstørrelse i MiB)</translation>
</message>
<message>
<source>Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)</source>

View File

@@ -79,7 +79,7 @@
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Editieren</translation>
<translation>B&amp;earbeiten</translation>
</message>
<message>
<source>Export Address List</source>
@@ -133,7 +133,7 @@
</message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation>Geben Sie die neue Passphrase für die Wallet ein.&lt;br&gt;Bitte benutzen Sie eine Passphrase bestehend aus &lt;b&gt;zehn oder mehr zufälligen Zeichen&lt;/b&gt; oder &lt;b&gt;acht oder mehr Wörtern&lt;/b&gt;.</translation>
<translation>Geben Sie die neue Passphrase für die Brieftasche ein.&lt;br&gt;Bitte benutzen Sie eine Passphrase bestehend aus &lt;b&gt;zehn oder mehr zufälligen Zeichen&lt;/b&gt; oder &lt;b&gt;acht oder mehr Wörtern&lt;/b&gt;.</translation>
</message>
<message>
<source>Encrypt wallet</source>
@@ -141,7 +141,7 @@
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
<translation>Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entsperren.</translation>
<translation>Dieser Vorgang benötigt ihre Passphrase, um die Brieftasche zu entsperren.</translation>
</message>
<message>
<source>Unlock wallet</source>
@@ -149,11 +149,11 @@
</message>
<message>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
<translation>Dieser Vorgang benötigt Ihre Passphrase, um die Wallet zu entschlüsseln.</translation>
<translation>Dieser Vorgang benötigt Ihre Passphrase, um die Brieftasche zu entschlüsseln.</translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation>Wallet entschlüsseln</translation>
<translation>Brieftasche entschlüsseln</translation>
</message>
<message>
<source>Change passphrase</source>
@@ -161,39 +161,39 @@
</message>
<message>
<source>Enter the old passphrase and new passphrase to the wallet.</source>
<translation>Geben Sie die alte und neue Wallet-Passphrase ein.</translation>
<translation>Geben Sie die alte und neue Brieftschen-Passphrase ein.</translation>
</message>
<message>
<source>Confirm wallet encryption</source>
<translation>Wallet-Verschlüsselung bestätigen</translation>
<translation>Brieftaschen-Verschlüsselung bestätigen</translation>
</message>
<message>
<source>Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
<translation>Warnung: Wenn Sie Ihre Wallet verschlüsseln und Ihre Passphrase verlieren, werden Sie &lt;b&gt;alle Ihre Bitcoins verlieren&lt;/b&gt;!</translation>
<translation>Warnung: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie &lt;b&gt;alle Ihre Bitcoins verlieren&lt;/b&gt;!</translation>
</message>
<message>
<source>Are you sure you wish to encrypt your wallet?</source>
<translation>Sind Sie sich sicher, dass Sie Ihre Wallet verschlüsseln möchten?</translation>
<translation>Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten?</translation>
</message>
<message>
<source>Wallet encrypted</source>
<translation>Wallet verschlüsselt</translation>
<translation>Brieftasche verschlüsselt</translation>
</message>
<message>
<source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
<translation>%1 wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt.</translation>
<translation>%1 wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Brieftaschen-Verschlüsselung nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadprogramme schützt, die Ihren Computer befällt.</translation>
</message>
<message>
<source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
<translation>WICHTIG: Alle vorherigen Wallet-Sicherungen sollten durch die neu erzeugte, verschlüsselte Wallet ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Wallet nutzlos, sobald Sie die neue, verschlüsselte Wallet verwenden.</translation>
<translation>WICHTIG: Alle vorherigen Brieftaschen-Sicherungen sollten durch die neu erzeugte, verschlüsselte Brieftasche ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Brieftasche nutzlos, sobald Sie die neue, verschlüsselte Brieftasche verwenden.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
<translation>Wallet-Verschlüsselung fehlgeschlagen</translation>
<translation>Brieftaschen-Verschlüsselung fehlgeschlagen</translation>
</message>
<message>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
<translation>Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt.</translation>
<translation>Die Brieftaschen-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt.</translation>
</message>
<message>
<source>The supplied passphrases do not match.</source>
@@ -201,19 +201,19 @@
</message>
<message>
<source>Wallet unlock failed</source>
<translation>Wallet-Entsperrung fehlgeschlagen</translation>
<translation>Brieftaschen-Entsperrung fehlgeschlagen</translation>
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation>Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt.</translation>
<translation>Die eingegebene Passphrase zur Brieftaschen-Entschlüsselung war nicht korrekt.</translation>
</message>
<message>
<source>Wallet decryption failed</source>
<translation>Wallet-Entschlüsselung fehlgeschlagen</translation>
<translation>Brieftaschen-Entschlüsselung fehlgeschlagen</translation>
</message>
<message>
<source>Wallet passphrase was successfully changed.</source>
<translation>Die Wallet-Passphrase wurde erfolgreich geändert.</translation>
<translation>Die Brieftaschen-Passphrase wurde erfolgreich geändert.</translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
@@ -439,7 +439,7 @@
</message>
<message>
<source>Indexing blocks on disk...</source>
<translation>Reindiziere Blöcke auf Datenträger...</translation>
<translation>Indiziere Blöcke auf Datenträger...</translation>
</message>
<message>
<source>Processing blocks on disk...</source>
@@ -636,7 +636,7 @@
</message>
<message>
<source>Copy transaction ID</source>
<translation>Transaktionskennung kopieren</translation>
<translation>Transaktions-ID kopieren</translation>
</message>
<message>
<source>Lock unspent</source>
@@ -660,7 +660,7 @@
</message>
<message>
<source>Copy bytes</source>
<translation>Byte kopieren</translation>
<translation>Bytes kopieren</translation>
</message>
<message>
<source>Copy dust</source>
@@ -751,7 +751,7 @@
</message>
<message>
<source>Could not unlock wallet.</source>
<translation>Wallet konnte nicht entsperrt werden.</translation>
<translation>Brieftasche konnte nicht entsperrt werden.</translation>
</message>
<message>
<source>New key generation failed.</source>
@@ -817,7 +817,7 @@
</message>
<message>
<source>Set language, for example "de_DE" (default: system locale)</source>
<translation>Sprache einstellen, zum Beispiel "de_DE" (default: system locale)</translation>
<translation>Sprache einstellen, zum Beispiel "de_DE" (Standard: Systemgebietsschema)</translation>
</message>
<message>
<source>Start minimized</source>
@@ -825,7 +825,7 @@
</message>
<message>
<source>Set SSL root certificates for payment request (default: -system-)</source>
<translation>SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: -system-)</translation>
<translation>SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: Systemstandard)</translation>
</message>
<message>
<source>Show splash screen on startup (default: %u)</source>
@@ -885,6 +885,14 @@
<source>Form</source>
<translation>Formular</translation>
</message>
<message>
<source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below.</source>
<translation>Neueste Transaktionen werden eventuell noch nicht angezeigt, daher könnte Ihr Kontostand veraltet sein. Er wird korrigiert, sobald Ihr Wallet die Synchronisation mit dem Bitcoin-Netzwerk erfolgreich abgeschlossen. Details dazu finden sich weiter unten.</translation>
</message>
<message>
<source>Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
<translation>Versuche, Bitcoins aus noch nicht angezeigten Transaktionen auszugeben, werden vom Netzwerk nicht akzeptiert.</translation>
</message>
<message>
<source>Number of blocks left</source>
<translation>Anzahl verbleibender Blöcke</translation>
@@ -2200,6 +2208,10 @@
<source>Confirm custom change address</source>
<translation>Bestätige benutzerdefinierte Wechselgeld-Adresse</translation>
</message>
<message>
<source>The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure?</source>
<translation>Die ausgewählte Wechselgeld-Adresse ist nicht Bestandteil dieses Wallets. Einige oder alle Mittel aus Ihrem Wallet könnten an diese Adresse gesendet werden. Wollen Sie das wirklich?</translation>
</message>
<message>
<source>(no label)</source>
<translation>(keine Bezeichnung)</translation>
@@ -2997,6 +3009,10 @@
<source>Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect)</source>
<translation>Eingehende Verbindungen annehmen (Standard: 1, wenn nicht -proxy oder -connect/-noconnect)</translation>
</message>
<message>
<source>Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections</source>
<translation>Verbindungen nur zu spezifizierten Node(s); verwenden Sie -noconnect oder -connect=0 alleine um automatische Verbindungen zu deaktivieren</translation>
</message>
<message>
<source>Distributed under the MIT software license, see the accompanying file %s or %s</source>
<translation>Veröffentlicht unter der MIT-Softwarelizenz, siehe beiligende Datei %s oder %s.</translation>
@@ -3073,6 +3089,14 @@
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
<translation>Befehl ausführen wenn sich eine Wallet-Transaktion verändert (%s im Befehl wird durch die Transaktions-ID ersetzt)</translation>
</message>
<message>
<source>Extra transactions to keep in memory for compact block reconstructions (default: %u)</source>
<translation>Zusätzliche Transaktionen für kompakten Block-Nachbau im Speicher vorhalten (default: %u)</translation>
</message>
<message>
<source>If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s)</source>
<translation>Sofern dieser Block Bestandteil der Blockchain ist, nehme an das er und seine Vorgänger gültig sind und überspringe ggf. dessen Skriptverifikation (0 um alle zu verifizieren, default: %s, testnet: %s)</translation>
</message>
<message>
<source>Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)</source>
<translation>Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)</translation>
@@ -3089,6 +3113,14 @@
<source>Please contribute if you find %s useful. Visit %s for further information about the software.</source>
<translation>Wenn sie %s nützlich finden, sind Helfer sehr gern gesehen. Besuchen Sie %s um mehr über das Softwareprojekt zu erfahren.</translation>
</message>
<message>
<source>Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, &gt;%u = automatically prune block files to stay under the specified target size in MiB)</source>
<translation>Speicherplatzanforderung durch Kürzen (Pruning) alter Blöcke reduzieren. Dies erlaubt das Aufrufen des sogenannten Pruneblockchain RPC zum Löschen spezifischer Blöcke und und aktiviert das automatische Pruning alter Blöcke, sofern eine Zielgröße in MIB angegeben wird. Dieser Modus ist nicht mit -txindex und -resacan kompatibel. Warnung: Das Rücksetzen dieser Einstellung erfordert das erneute Herunterladen der gesamten Blockchain. (Standard: 0 = deaktiviert das Pruning, 1 = erlaubt manuelles Pruning via RPC, &gt;%u = automatisches Pruning der Blockdateien, um angegebene Maximalgröße nicht zu überschreiten)</translation>
</message>
<message>
<source>Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)</source>
<translation>Niedrigste Gebühr (in %s/kB) für Transaktionen einstellen, die bei der Blockerzeugung berücksichtigt werden sollen. (default: %s)</translation>
</message>
<message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, &lt;0 = so viele Kerne frei lassen, Standard: %d)</translation>
@@ -3113,6 +3145,10 @@
<source>Username and hashed password for JSON-RPC connections. The field &lt;userpw&gt; comes in the format: &lt;USERNAME&gt;:&lt;SALT&gt;$&lt;HASH&gt;. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=&lt;USERNAME&gt;/rpcpassword=&lt;PASSWORD&gt; pair of arguments. This option can be specified multiple times</source>
<translation>Benutzername und gehashtes Passwort für JSON-RPC Verbindungen. Das Feld &lt;userpw&gt; kommt im Format: &lt;USERNAME&gt;:&lt;SALT&gt;$&lt;HASH&gt;. Ein kanonisches Pythonskript ist in share/rpcuser inbegriffen. Der client benutzt wie gehabt, die rpcuser/rpcpassword Parameter. Diese Option kann mehrere Male spezifiziert werden</translation>
</message>
<message>
<source>Wallet will not create transactions that violate mempool chain limits (default: %u)</source>
<translation>Das Wallet erzeugt keine Transaktionen, die das Mempool Chain Limit überschreiten (Standardeinstellung: %u)</translation>
</message>
<message>
<source>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</source>
<translation>Warnung: Das Netzwerk scheint nicht vollständig übereinzustimmen! Einige Miner scheinen Probleme zu haben.</translation>
@@ -3153,6 +3189,10 @@
<source>Cannot resolve -%s address: '%s'</source>
<translation>Kann Adresse in -%s nicht auflösen: '%s'</translation>
</message>
<message>
<source>Chain selection options:</source>
<translation>Chain Auswahloptionen:</translation>
</message>
<message>
<source>Change index out of range</source>
<translation>Position des Wechselgelds außerhalb des Bereichs</translation>
@@ -3645,6 +3685,10 @@
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect)</source>
<translation>Adressen von Gegenstellen via DNS-Namensauflösung finden, falls zu wenige Adressen verfügbar sind (Standard: 1, außer bei -connect/-noconnect)</translation>
</message>
<message>
<source>Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: %d)</source>
<translation>Setzt die Serialisierung von Rohtransaktionen oder Block Hex-Daten auf non-verbose mode, nicht-Segwit(0) oder Segwit(1) (default: %d)</translation>
</message>
<message>
<source>Support filtering of blocks and transaction with bloom filters (default: %u)</source>
<translation>Unterstütze Blöcke und Transaktionen mit Bloomfiltern zu filtern (default: %u)</translation>
@@ -3705,6 +3749,10 @@
<source>Invalid -proxy address: '%s'</source>
<translation>Ungültige Adresse in -proxy: '%s'</translation>
</message>
<message>
<source>Keypool ran out, please call keypoolrefill first</source>
<translation>Der Keypool ist erschöpft. Bitte rufen Sie zunächst keypoolrefill auf.</translation>
</message>
<message>
<source>Listen for JSON-RPC connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation>&lt;port&gt; nach JSON-RPC-Verbindungen abhören (Standard: %u oder Testnetz: %u)</translation>
@@ -3773,6 +3821,14 @@
<source>Spend unconfirmed change when sending transactions (default: %u)</source>
<translation>Unbestätigtes Wechselgeld darf beim Senden von Transaktionen ausgegeben werden (Standard: %u)</translation>
</message>
<message>
<source>Starting network threads...</source>
<translation>Netzwerk-Threads werden gestartet...</translation>
</message>
<message>
<source>The wallet will avoid paying less than the minimum relay fee.</source>
<translation>Das Wallet verhindert Zahlungen, die die Mindesttransaktionsgebühr nicht berücksichtigen.</translation>
</message>
<message>
<source>This is the minimum transaction fee you pay on every transaction.</source>
<translation>Dies ist die minimale Gebühr die beim Senden einer Transaktion fällig wird.</translation>
@@ -3789,6 +3845,14 @@
<source>Transaction amounts must not be negative</source>
<translation>Transaktionsbeträge dürfen nicht negativ sein.</translation>
</message>
<message>
<source>Transaction has too long of a mempool chain</source>
<translation>Die Speicherpoolkette der Transaktion ist zu lang.</translation>
</message>
<message>
<source>Transaction must have at least one recipient</source>
<translation>Die Transaktion muss mindestens einen Empfänger enthalten.</translation>
</message>
<message>
<source>Unknown network specified in -onlynet: '%s'</source>
<translation>Unbekannter Netztyp in -onlynet angegeben: '%s'</translation>

View File

@@ -41,10 +41,58 @@
<source>&amp;Delete</source>
<translation>&amp;Διαγραφή</translation>
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>Επιλέξτε διεύθυνση αποστολής των νομισμάτων σας</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Επιλέξτε διεύθυνση παραλαβής νομισμάτων</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Διευθύνσεις αποστολής</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Διευθύνσεις λήψης</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>&amp;Αντιγραφή Διεύθυνσης</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Αντιγραφή&amp;Ετικέτα</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Διόρθωση</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Εξαγωγή Λίστας Διεύθυνσεων</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Αποτυχία Εξαγωγής</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Ετικέτα</translation>
</message>
<message>
<source>Address</source>
<translation>Διεύθυνση</translation>
</message>
<message>
<source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -63,6 +111,18 @@
<source>Repeat new passphrase</source>
<translation>Επανέλαβε τον νέο κωδικό πρόσβασης</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>Ξεκλειδωσε το πορτοφολι</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>Αλλάξτε Φράση Πρόσβασης</translation>
</message>
<message>
<source>Wallet unlock failed</source>
<translation>Το Ξεκλείδωμα του Πορτοφολιού Απέτυχε</translation>
</message>
</context>
<context>
<name>BanTableModel</name>
@@ -394,6 +454,26 @@
<source>Confirmed</source>
<translation>Επικυρωμένες</translation>
</message>
<message>
<source>Copy address</source>
<translation>Αντιγραφή διεύθυνσης</translation>
</message>
<message>
<source>Copy label</source>
<translation>Αντιγραφή ετικέτας</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Αντιγραφή ποσού</translation>
</message>
<message>
<source>Copy transaction ID</source>
<translation>Αντιγραφή ταυτότητας συναλλαγής</translation>
</message>
<message>
<source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -417,6 +497,18 @@
<source>&amp;Address</source>
<translation>&amp;Διεύθυνση</translation>
</message>
<message>
<source>New receiving address</source>
<translation>Νέα Διεύθυνση Λήψης</translation>
</message>
<message>
<source>New sending address</source>
<translation>Νέα Διεύθυνση Αποστολής</translation>
</message>
<message>
<source>Edit receiving address</source>
<translation>Διόρθωση Διεύθυνσης Λήψης</translation>
</message>
</context>
<context>
<name>FreespaceChecker</name>
@@ -1064,7 +1156,15 @@
<source>Remove</source>
<translation>Αφαίρεση</translation>
</message>
</context>
<message>
<source>Copy label</source>
<translation>Αντιγραφή ετικέτας</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Αντιγραφή ποσού</translation>
</message>
</context>
<context>
<name>ReceiveRequestDialog</name>
<message>
@@ -1083,9 +1183,29 @@
<source>&amp;Save Image...</source>
<translation>&amp;Αποθήκευση εικόνας...</translation>
</message>
<message>
<source>Address</source>
<translation>Διεύθυνση</translation>
</message>
<message>
<source>Label</source>
<translation>Ετικέτα</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Date</source>
<translation>Ημερομήνια</translation>
</message>
<message>
<source>Label</source>
<translation>Ετικέτα</translation>
</message>
<message>
<source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -1209,7 +1329,15 @@
<source>S&amp;end</source>
<translation>Αποστολη</translation>
</message>
</context>
<message>
<source>Copy amount</source>
<translation>Αντιγραφή ποσού</translation>
</message>
<message>
<source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
@@ -1374,6 +1502,70 @@
</context>
<context>
<name>TransactionDesc</name>
<message>
<source>Open until %1</source>
<translation>Ανοιχτό μέχρι %1</translation>
</message>
<message>
<source>%1/offline</source>
<translation>%1/αποσυνδεδεμένο</translation>
</message>
<message>
<source>0/unconfirmed, %1</source>
<translation>0/ανεπιβεβαίωτο, %1</translation>
</message>
<message>
<source>Date</source>
<translation>Ημερομηνία</translation>
</message>
<message>
<source>Source</source>
<translation>Πηγή</translation>
</message>
<message>
<source>Generated</source>
<translation>Παράχθηκε</translation>
</message>
<message>
<source>From</source>
<translation>Από</translation>
</message>
<message>
<source>unknown</source>
<translation>Άγνωστο</translation>
</message>
<message>
<source>To</source>
<translation>Προς</translation>
</message>
<message>
<source>own address</source>
<translation>δική σας διεύθυνση</translation>
</message>
<message>
<source>watch-only</source>
<translation>παρακολούθηση-μόνο</translation>
</message>
<message>
<source>label</source>
<translation>ετικέτα</translation>
</message>
<message>
<source>Credit</source>
<translation>Πίστωση</translation>
</message>
<message>
<source>not accepted</source>
<translation>μη έγκυρο</translation>
</message>
<message>
<source>Total credit</source>
<translation>Συνολική πίστωση</translation>
</message>
<message>
<source>Transaction fee</source>
<translation>Κόστος συναλλαγής</translation>
</message>
</context>
<context>
<name>TransactionDescDialog</name>
@@ -1384,9 +1576,69 @@
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Date</source>
<translation>Ημερομήνια</translation>
</message>
<message>
<source>Label</source>
<translation>Ετικέτα</translation>
</message>
<message>
<source>Open until %1</source>
<translation>Ανοιχτό μέχρι %1</translation>
</message>
<message>
<source>watch-only</source>
<translation>παρακολούθηση-μόνο</translation>
</message>
<message>
<source>(no label)</source>
<translation>(χωρίς ετικέτα)</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Copy address</source>
<translation>Αντιγραφή διεύθυνσης</translation>
</message>
<message>
<source>Copy label</source>
<translation>Αντιγραφή ετικέτας</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Αντιγραφή ποσού</translation>
</message>
<message>
<source>Copy transaction ID</source>
<translation>Αντιγραφή ταυτότητας συναλλαγής</translation>
</message>
<message>
<source>Copy raw transaction</source>
<translation>Αντιγραφή ανεπεξέργαστης συναλλαγής</translation>
</message>
<message>
<source>Edit label</source>
<translation>Επεξεργασία ετικέτας</translation>
</message>
<message>
<source>Date</source>
<translation>Ημερομήνια</translation>
</message>
<message>
<source>Label</source>
<translation>Ετικέτα</translation>
</message>
<message>
<source>Address</source>
<translation>Διεύθυνση</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Αποτυχία Εξαγωγής</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -304,12 +304,12 @@
<translation>Sign &amp;message...</translation>
</message>
<message>
<location line="+427"/>
<location line="+429"/>
<source>Synchronizing with network...</source>
<translation>Synchronizing with network...</translation>
</message>
<message>
<location line="-505"/>
<location line="-507"/>
<source>&amp;Overview</source>
<translation>&amp;Overview</translation>
</message>
@@ -404,7 +404,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+357"/>
<location line="+359"/>
<source>Click to disable network activity.</source>
<translation type="unfinished"></translation>
</message>
@@ -429,7 +429,7 @@
<translation>Reindexing blocks on disk...</translation>
</message>
<message>
<location line="-508"/>
<location line="-510"/>
<source>Send coins to a Bitcoin address</source>
<translation>Send coins to a Bitcoin address</translation>
</message>
@@ -459,12 +459,12 @@
<translation>&amp;Verify message...</translation>
</message>
<message>
<location line="+514"/>
<location line="+516"/>
<source>Bitcoin</source>
<translation>Bitcoin</translation>
</message>
<message>
<location line="-739"/>
<location line="-741"/>
<source>Wallet</source>
<translation>Wallet</translation>
</message>
@@ -549,7 +549,7 @@
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location line="+354"/>
<location line="+356"/>
<source>%n active connection(s) to Bitcoin network</source>
<translation>
<numerusform>%n active connection to Bitcoin network</numerusform>
@@ -610,12 +610,12 @@
<translation>Up to date</translation>
</message>
<message>
<location line="-438"/>
<location line="-440"/>
<source>Show the %1 help message to get a list with possible Bitcoin command-line options</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+197"/>
<location line="+199"/>
<source>%1 client</source>
<translation type="unfinished"></translation>
</message>
@@ -849,7 +849,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+183"/>
<location line="+181"/>
<source>yes</source>
<translation type="unfinished"></translation>
</message>
@@ -1499,7 +1499,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<location line="+28"/>
<source>The supplied proxy address is invalid.</source>
<translation>The supplied proxy address is invalid.</translation>
</message>
@@ -1601,7 +1601,7 @@
<context>
<name>PaymentServer</name>
<message>
<location filename="../paymentserver.cpp" line="+328"/>
<location filename="../paymentserver.cpp" line="+326"/>
<location line="+216"/>
<location line="+42"/>
<location line="+113"/>
@@ -1760,7 +1760,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+759"/>
<location line="+762"/>
<source>%1 d</source>
<translation type="unfinished"></translation>
</message>
@@ -2030,7 +2030,7 @@
</message>
<message>
<location line="+60"/>
<location filename="../rpcconsole.cpp" line="+456"/>
<location filename="../rpcconsole.cpp" line="+460"/>
<location line="+719"/>
<source>Select a peer to view detailed information.</source>
<translation type="unfinished"></translation>

View File

@@ -41,10 +41,78 @@
<source>&amp;Delete</source>
<translation>&amp;Forigi</translation>
</message>
</context>
<message>
<source>Choose the address to send coins to</source>
<translation>Elekti la adreson por sendi monerojn</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Elekti la adreson ricevi monerojn kun</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>&amp;Elekti</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Sendaj adresoj</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Ricevaj adresoj</translation>
</message>
<message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Jen viaj Bitmon-adresoj por sendi pagojn. Zorge kontrolu la sumon kaj la alsendan adreson antaŭ ol sendi.</translation>
</message>
<message>
<source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
<translation>Jen viaj bitmonaj adresoj por ricevi pagojn. Estas konsilinde uzi apartan ricevan adreson por ĉiu transakcio.</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>&amp;Kopii Adreson</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Kopii &amp;Etikedon</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Redakti</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Eksporti Adresliston</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Perkome disigita dosiero (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>ekspotado malsukcesinta</translation>
</message>
<message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation>Okazis eraron dum konservo de adreslisto al %1. Bonvolu provi denove.</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Etikedo</translation>
</message>
<message>
<source>Address</source>
<translation>Adreso</translation>
</message>
<message>
<source>(no label)</source>
<translation>(neniu etikedo)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -386,6 +454,10 @@
<source>Confirmed</source>
<translation>Konfirmita</translation>
</message>
<message>
<source>(no label)</source>
<translation>(neniu etikedo)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -934,9 +1006,25 @@
<source>&amp;Save Image...</source>
<translation>&amp;Konservi Bildon...</translation>
</message>
<message>
<source>Address</source>
<translation>Adreso</translation>
</message>
<message>
<source>Label</source>
<translation>Etikedo</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Label</source>
<translation>Etikedo</translation>
</message>
<message>
<source>(no label)</source>
<translation>(neniu etikedo)</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -1016,7 +1104,11 @@
<source>S&amp;end</source>
<translation>Ŝendi</translation>
</message>
</context>
<message>
<source>(no label)</source>
<translation>(neniu etikedo)</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
@@ -1179,9 +1271,33 @@
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Label</source>
<translation>Etikedo</translation>
</message>
<message>
<source>(no label)</source>
<translation>(neniu etikedo)</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Perkome disigita dosiero (*.csv)</translation>
</message>
<message>
<source>Label</source>
<translation>Etikedo</translation>
</message>
<message>
<source>Address</source>
<translation>Adreso</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>ekspotado malsukcesinta</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -485,6 +485,10 @@
<source>%1 client</source>
<translation>%1 cliente</translation>
</message>
<message>
<source>Connecting to peers...</source>
<translation>Conectando a pares...</translation>
</message>
<message>
<source>Catching up...</source>
<translation>Actualizando...</translation>
@@ -891,7 +895,7 @@
</message>
<message>
<source>Number of blocks left</source>
<translation>Número de bloques dejados</translation>
<translation>Número de bloques restantes</translation>
</message>
<message>
<source>Unknown...</source>
@@ -1722,7 +1726,7 @@
</message>
<message>
<source>WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command.</source>
<translation>ADVERTENCIA: Los estafadores han sido activados, diciéndoles a los usuarios que escriban comandos aquí, robando el contenido de sus monederos. No utilice esta consola sin entender completamente la repercusión de un comando.</translation>
<translation>ADVERTENCIA: Hay estafadores activos diciendo a los usuarios que escriban comandos aquí y robando el contenido de sus monederos. No utilice esta consola sin entender completamente la repercusión de un comando.</translation>
</message>
<message>
<source>Network activity disabled</source>
@@ -2473,6 +2477,10 @@
</context>
<context>
<name>TransactionDesc</name>
<message numerus="yes">
<source>Open for %n more block(s)</source>
<translation><numerusform>Abrir para %n bloque más</numerusform><numerusform>Abrir para %n bloques más</numerusform></translation>
</message>
<message>
<source>Open until %1</source>
<translation>Abierto hasta %1</translation>
@@ -2517,6 +2525,10 @@
<source>, has not been successfully broadcast yet</source>
<translation>, no ha sido emitido con éxito aún</translation>
</message>
<message numerus="yes">
<source>, broadcast through %n node(s)</source>
<translation><numerusform>, transmitir a través de %n nodo</numerusform><numerusform>, transmitir a través de %n nodos</numerusform></translation>
</message>
<message>
<source>Date</source>
<translation>Fecha</translation>
@@ -2557,6 +2569,10 @@
<source>Credit</source>
<translation>Credito</translation>
</message>
<message numerus="yes">
<source>matures in %n more block(s)</source>
<translation><numerusform>disponible en %n bloque más</numerusform><numerusform>disponible en %n bloques más</numerusform></translation>
</message>
<message>
<source>not accepted</source>
<translation>no aceptada</translation>
@@ -2593,6 +2609,10 @@
<source>Transaction ID</source>
<translation>Identificador de transacción (ID)</translation>
</message>
<message>
<source>Transaction total size</source>
<translation>Tamaño total de transacción</translation>
</message>
<message>
<source>Output index</source>
<translation>Indice de salida</translation>
@@ -2655,6 +2675,10 @@
<source>Label</source>
<translation>Etiqueta</translation>
</message>
<message numerus="yes">
<source>Open for %n more block(s)</source>
<translation><numerusform>Abrir para %n bloque más</numerusform><numerusform>Abrir para %n bloques más</numerusform></translation>
</message>
<message>
<source>Open until %1</source>
<translation>Abierto hasta %1</translation>
@@ -2987,6 +3011,18 @@
<translation>Aceptar comandos consola y JSON-RPC
</translation>
</message>
<message>
<source>Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect)</source>
<translation>Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect/-desconectar)</translation>
</message>
<message>
<source>Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections</source>
<translation>Conectar sólo al nodo(s) especificado; -no conectar or -conectar=solo 0 para deshabilitar conexiones automáticas</translation>
</message>
<message>
<source>Distributed under the MIT software license, see the accompanying file %s or %s</source>
<translation>Distribuido bajo la licencia de software MIT, vea el archivo adjunto %s o %s</translation>
</message>
<message>
<source>If &lt;category&gt; is not supplied or if &lt;category&gt; = 1, output all debugging information.</source>
<translation>Si &lt;category&gt; no es proporcionado o si &lt;category&gt; =1, muestra toda la información de depuración.</translation>
@@ -3064,6 +3100,14 @@
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
<translation>Ejecutar comando cuando una transacción del monedero cambia (%s en cmd se remplazará por TxID)</translation>
</message>
<message>
<source>Extra transactions to keep in memory for compact block reconstructions (default: %u)</source>
<translation>Transacciones extra a mantener en la memoria para reconstrucciones de bloque compacto (predeterminado: %u)</translation>
</message>
<message>
<source>If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s)</source>
<translation>Si este bloque está en la cadena asuma que sus predecesores y él son válidos y potencialmente se saltan su script de verificación (0 para verificar todo, predeterminado: %s, testnet: %s)</translation>
</message>
<message>
<source>Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)</source>
<translation>Ajuste máximo permitido del tiempo offset medio de pares. La perspectiva local de tiempo se verá influenciada por los pares anteriores y posteriores a esta cantidad. (Por defecto: %u segundos)</translation>
@@ -3080,6 +3124,14 @@
<source>Please contribute if you find %s useful. Visit %s for further information about the software.</source>
<translation>Contribuya si encuentra %s de utilidad. Visite %s para mas información acerca del programa.</translation>
</message>
<message>
<source>Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, &gt;%u = automatically prune block files to stay under the specified target size in MiB)</source>
<translation>Reducir los requerimientos de almacenamiento habilitando la poda (eliminación) de los bloques viejos. Esto permite que la cadena de bloqueo RPC sea llamada para eliminar bloques específicos, y habilita la poda automática de bloques viejos si se provee el tamaño de un objetivo en MiB. Este modo es incompatible con -txindex and -rescan. Precaución: Revertir este ajuste requiere volver a descargar la cadena de bloqueo completa. (predefinido: 0 = deshabilita bloques de poda, 1 = permite la poda manual mediante RPC, &gt;%u = elimina automáticamente los archivos de bloqueo para permanecer bajo el tamaño del objetivo especificado en MiB)</translation>
</message>
<message>
<source>Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)</source>
<translation>Establecer la tasa más baja (en %s/kB) por transacciones para incluirse en la creación de bloque. (predeterminado: %s)</translation>
</message>
<message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Establecer el número de hilos (threads) de verificación de scripts (entre %u y %d, 0 = automático, &lt;0 = dejar libres ese número de núcleos; predeterminado: %d)</translation>
@@ -3088,6 +3140,10 @@
<source>The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source>
<translation>La base de datos de bloques contiene un bloque que parece ser del futuro. Esto puede ser porque la fecha y hora de tu ordenador están mal ajustados. Reconstruye la base de datos de bloques solo si estas seguro de que la fecha y hora de tu ordenador estan ajustados correctamente.</translation>
</message>
<message>
<source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source>
<translation>Esta es una versión de prueba prelanzada - utilícelo a su propio riesgo - no lo utilice para aplicaciones de minería o comerciales</translation>
</message>
<message>
<source>Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source>
<translation>No es posible reconstruir la base de datos a un estado anterior. Debe descargar de nuevo la cadena de bloques.</translation>
@@ -3096,6 +3152,22 @@
<source>Use UPnP to map the listening port (default: 1 when listening and no -proxy)</source>
<translation>Utiliza UPnP para asignar el puerto de escucha (predeterminado: 1 cuando esta escuchando sin -proxy)</translation>
</message>
<message>
<source>Username and hashed password for JSON-RPC connections. The field &lt;userpw&gt; comes in the format: &lt;USERNAME&gt;:&lt;SALT&gt;$&lt;HASH&gt;. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=&lt;USERNAME&gt;/rpcpassword=&lt;PASSWORD&gt; pair of arguments. This option can be specified multiple times</source>
<translation>Nombre de usuario y contraseña numerada para conexiones JSON-RPC. El campo &lt;userpw&gt; viene en el formato: &lt;USERNAME&gt;:&lt;SALT&gt;$&lt;HASH&gt;. Un script canónico de python está incluído en compartir/usuario rpc. Entonces el cliente se conecta normalmente utilizando la pareja de argumentos usuario rpc=&lt;USERNAME&gt;/contraseña rpc=&lt;PASSWORD&gt;. Esta opción puede ser especificada múltiples veces</translation>
</message>
<message>
<source>Wallet will not create transactions that violate mempool chain limits (default: %u)</source>
<translation>El monedero no creará transacciones que violen los límites de la cadena mempool (predeterminado: %u)</translation>
</message>
<message>
<source>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</source>
<translation>Advertencia: ¡La red no parece coincidir del todo! Algunos mineros parecen estar experimentando problemas.</translation>
</message>
<message>
<source>Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source>
<translation>Advertencia: ¡No parecemos estar del todo con nuestros pares! Puede que necesite actualizarse, o puede que otros nodos necesiten actualizarse.</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex-chainstate to change -txindex</source>
<translation>Necesita reconstruir la base de datos usando -reindex-chainstate para cambiar -txindex</translation>
@@ -3128,6 +3200,10 @@
<source>Cannot resolve -%s address: '%s'</source>
<translation>No se puede resolver -%s direccion: '%s'</translation>
</message>
<message>
<source>Chain selection options:</source>
<translation>Opciones de selección en cadena:</translation>
</message>
<message>
<source>Change index out of range</source>
<translation>Cambio de indice fuera de rango</translation>
@@ -3324,6 +3400,10 @@
<source>Use UPnP to map the listening port (default: %u)</source>
<translation>Usar UPnP para asignar el puerto de escucha (predeterminado:: %u)</translation>
</message>
<message>
<source>Use the test chain</source>
<translation>Utilice la cadena de prueba</translation>
</message>
<message>
<source>User Agent comment (%s) contains unsafe characters.</source>
<translation>El comentario del Agente de Usuario (%s) contiene caracteres inseguros.</translation>
@@ -3618,6 +3698,10 @@
<source>Output debugging information (default: %u, supplying &lt;category&gt; is optional)</source>
<translation>Mostrar depuración (por defecto: %u, proporcionar &lt;category&gt; es opcional)</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect)</source>
<translation>Preguntar por direcciones pares al buscar DNS, si baja en las direcciones (predeterminado: 1 a menos que -connect/-noconnect)</translation>
</message>
<message>
<source>Sets the serialization of raw transaction or block hex returned in non-verbose mode, non-segwit(0) or segwit(1) (default: %d)</source>
<translation>https://www.transifex.com/joyful-world/breaking-english/
@@ -3627,6 +3711,14 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d
<source>Support filtering of blocks and transaction with bloom filters (default: %u)</source>
<translation>Admite filtrado de bloques, y transacciones con filtros Bloom. Reduce la carga de red. ( por defecto :%u)</translation>
</message>
<message>
<source>This is the transaction fee you may pay when fee estimates are not available.</source>
<translation>Esta es la tarifa de cuota que debe pagar cuando las estimaciones de tarifas no estén disponibles.</translation>
</message>
<message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Este producto incluye software desarrollado por el Proyecto OpenSSL para utilizarlo en el juego de herramientas OpenSSL %s y software criptográfico escrito por Eric Young y software UPnP escrito por Thomas Bernard.</translation>
</message>
<message>
<source>Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source>
<translation>La longitud total de la cadena de versión de red ( %i ) supera la longitud máxima ( %i ) . Reducir el número o tamaño de uacomments .</translation>
@@ -3659,6 +3751,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d
<source>Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times.</source>
<translation>Los pares de listas blancas que se conectan desde la dirección IP dada (por ejemplo, 1.2.3.4) o la red marcada CIDR (por ejemplo, 1.2.3.0/24). Se puede especificar varias veces.</translation>
</message>
<message>
<source>%s is set very high!</source>
<translation>¡%s se establece muy alto!</translation>
</message>
<message>
<source>(default: %s)</source>
<translation>(predeterminado: %s)</translation>
@@ -3679,6 +3775,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d
<source>Invalid -proxy address: '%s'</source>
<translation>Dirección -proxy inválida: '%s'</translation>
</message>
<message>
<source>Keypool ran out, please call keypoolrefill first</source>
<translation>Keypool se ha agotado, llame a keypoolrefill primero</translation>
</message>
<message>
<source>Listen for JSON-RPC connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation>Escuchar conexiones JSON-RPC en &lt;puerto&gt; (predeterminado: %u o testnet: %u)</translation>
@@ -3715,6 +3815,10 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d
<source>Relay non-P2SH multisig (default: %u)</source>
<translation>Relay non-P2SH multisig (default: %u)</translation>
</message>
<message>
<source>Send transactions with full-RBF opt-in enabled (default: %u)</source>
<translation>Enviar transacciones con full-RBF opt-in habilitado (predeterminado: %u)</translation>
</message>
<message>
<source>Set key pool size to &lt;n&gt; (default: %u)</source>
<translation>Ajustar el número de claves en reserva &lt;n&gt; (predeterminado: %u)</translation>
@@ -3747,10 +3851,34 @@ Establecer la serialización de las transacciones sin procesar o el bloque hex d
<source>Starting network threads...</source>
<translation>Iniciando funciones de red...</translation>
</message>
<message>
<source>The wallet will avoid paying less than the minimum relay fee.</source>
<translation>El monedero evitará pagar menos que la cuota de retransmisión mínima.</translation>
</message>
<message>
<source>This is the minimum transaction fee you pay on every transaction.</source>
<translation>Esta es la tarifa mínima de transacción que usted paga en cada transacción.</translation>
</message>
<message>
<source>This is the transaction fee you will pay if you send a transaction.</source>
<translation>Esta es la cuota de transacción que pagará si envía una transacción.</translation>
</message>
<message>
<source>Threshold for disconnecting misbehaving peers (default: %u)</source>
<translation>Umbral para la desconexión de pares con mal comportamiento (predeterminado: %u)</translation>
</message>
<message>
<source>Transaction amounts must not be negative</source>
<translation>Las cantidades de transacción no deben ser negativa</translation>
</message>
<message>
<source>Transaction has too long of a mempool chain</source>
<translation>La transacción tiene demasiado tiempo de una cadena de mempool</translation>
</message>
<message>
<source>Transaction must have at least one recipient</source>
<translation>La transacción debe de tener al menos un receptor</translation>
</message>
<message>
<source>Unknown network specified in -onlynet: '%s'</source>
<translation>La red especificada en -onlynet '%s' es desconocida</translation>

View File

@@ -317,6 +317,22 @@
<source>Open &amp;URI...</source>
<translation>Abrir &amp;URI...</translation>
</message>
<message>
<source>Click to disable network activity.</source>
<translation>Haz click para desactivar la actividad de red.</translation>
</message>
<message>
<source>Network activity disabled.</source>
<translation>Actividad de red desactivada.</translation>
</message>
<message>
<source>Click to enable network activity again.</source>
<translation>Haz click para reactivar la actividad de red.</translation>
</message>
<message>
<source>Syncing Headers (%1%)...</source>
<translation>Sincronizando cabeceras (%1%)...</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>Reindexando bloques en disco...</translation>
@@ -519,7 +535,11 @@
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
<translation>El monedero está &lt;b&gt;cifrado&lt;/b&gt; y actualmente &lt;b&gt;bloqueado&lt;/b&gt;</translation>
</message>
</context>
<message>
<source>A fatal error occurred. Bitcoin can no longer continue safely and will quit.</source>
<translation>Ha ocurrido un error fatal. Bitcoin no puede continuar de manera segura y se cerrará.</translation>
</message>
</context>
<context>
<name>CoinControlDialog</name>
<message>
@@ -853,15 +873,43 @@
<source>Form</source>
<translation>Formulario</translation>
</message>
<message>
<source>Number of blocks left</source>
<translation>Número de bloques restantes</translation>
</message>
<message>
<source>Unknown...</source>
<translation>Desconocido...</translation>
</message>
<message>
<source>Last block time</source>
<translation>Hora del último bloque</translation>
</message>
<message>
<source>Progress</source>
<translation>Progreso</translation>
</message>
<message>
<source>Progress increase per hour</source>
<translation>Incremento del progreso por hora</translation>
</message>
<message>
<source>calculating...</source>
<translation>calculando...</translation>
</message>
<message>
<source>Estimated time left until synced</source>
<translation>Tiempo estimado restante hasta sincronización completa</translation>
</message>
<message>
<source>Hide</source>
<translation>Ocultar</translation>
</message>
</context>
<message>
<source>Unknown. Syncing Headers (%1)...</source>
<translation>Desconocido. Sincronizando cabeceras (%1)...</translation>
</message>
</context>
<context>
<name>OpenURIDialog</name>
<message>
@@ -1296,6 +1344,10 @@
<source>Node/Service</source>
<translation>Nodo/Servicio</translation>
</message>
<message>
<source>NodeId</source>
<translation>NodeId</translation>
</message>
</context>
<context>
<name>QObject</name>
@@ -1339,9 +1391,17 @@
<source>%1 and %2</source>
<translation>%1 y %2</translation>
</message>
</context>
<message>
<source>%1 didn't yet exit safely...</source>
<translation>%1 aún no ha salido de manera segura...</translation>
</message>
</context>
<context>
<name>QObject::QObject</name>
<message>
<source>Error: Specified data directory "%1" does not exist.</source>
<translation>Error: directorio especificado "%1" no existe.</translation>
</message>
</context>
<context>
<name>QRImageWidget</name>
@@ -1936,6 +1996,10 @@
<source>Dust:</source>
<translation>Polvo:</translation>
</message>
<message>
<source>Confirmation time target:</source>
<translation>Tiempo objetivo de confirmación:</translation>
</message>
<message>
<source>Clear &amp;All</source>
<translation>Vaciar &amp;todo</translation>
@@ -3482,6 +3546,10 @@
<source>Warning: Wallet file corrupt, data salvaged! Original %s saved as %s in %s; if your balance or transactions are incorrect you should restore from a backup.</source>
<translation>Aviso: fichero de monedero corrupto, datos recuperados! Original %s guardado como %s en %s; si su balance de transacciones es incorrecto, debe restaurar desde una copia de seguridad.</translation>
</message>
<message>
<source>%s is set very high!</source>
<translation>%s es demasiado alto!</translation>
</message>
<message>
<source>(default: %s)</source>
<translation>(predeterminado: %s)</translation>
@@ -3538,6 +3606,10 @@
<source>Relay non-P2SH multisig (default: %u)</source>
<translation>Relay non-P2SH multisig (default: %u)</translation>
</message>
<message>
<source>Send transactions with full-RBF opt-in enabled (default: %u)</source>
<translation>Enviar transaciones con RBF-completo opt-in activado (default: %u)</translation>
</message>
<message>
<source>Set key pool size to &lt;n&gt; (default: %u)</source>
<translation>Ajustar el número de claves en reserva &lt;n&gt; (predeterminado: %u)</translation>

View File

@@ -87,6 +87,10 @@
<source>The supplied passphrases do not match.</source>
<translation>Sisestatud paroolid ei kattu.</translation>
</message>
<message>
<source>Wallet unlock failed</source>
<translation>Rahakoti lahtilukustamine ebaõnnestus</translation>
</message>
<message>
<source>Wallet decryption failed</source>
<translation>Rahakoti dekrüpteerimine ebaõnnestus</translation>
@@ -109,6 +113,14 @@
<source>&amp;Overview</source>
<translation>&amp;Ülevaade</translation>
</message>
<message>
<source>Quit application</source>
<translation>Välju rakendusest</translation>
</message>
<message>
<source>&amp;Options...</source>
<translation>&amp;Valikud...</translation>
</message>
<message>
<source>Open &amp;URI...</source>
<translation>Ava &amp;URI...</translation>
@@ -125,14 +137,30 @@
<source>Wallet</source>
<translation>Rahakott</translation>
</message>
<message>
<source>&amp;Send</source>
<translation>&amp;Saada</translation>
</message>
<message>
<source>&amp;Show / Hide</source>
<translation>&amp;Näita / Peida</translation>
</message>
<message>
<source>&amp;File</source>
<translation>&amp;Fail</translation>
</message>
<message>
<source>&amp;Settings</source>
<translation>&amp;Seaded</translation>
</message>
<message>
<source>&amp;Help</source>
<translation>&amp;Abi</translation>
</message>
<message>
<source>&amp;Command-line options</source>
<translation>&amp;Käsurea valikud</translation>
</message>
<message>
<source>%1 behind</source>
<translation>%1 ajast maas</translation>
@@ -203,6 +231,10 @@
</context>
<context>
<name>EditAddressDialog</name>
<message>
<source>&amp;Address</source>
<translation>&amp;Aadress</translation>
</message>
<message>
<source>New key generation failed.</source>
<translation>Uue võtme genereerimine ebaõnnestus.</translation>

View File

@@ -61,6 +61,14 @@
<source>Receiving addresses</source>
<translation>آدرس های گیرنده</translation>
</message>
<message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>اینها آدرس های شما برای فرستادن پرداخت هاست. همیشه قبل از فرستادن سکه ها مقدار و آدرس دریافت کننده را چک کنید.</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>کپی کردن آدرس</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>کپی و برچسب&amp;گذاری</translation>
@@ -69,6 +77,14 @@
<source>&amp;Edit</source>
<translation>&amp;ویرایش</translation>
</message>
<message>
<source>Export Address List</source>
<translation>صدور لیست آدرس ها</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>صدور موفق نبود</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
@@ -107,14 +123,30 @@
<source>Encrypt wallet</source>
<translation>رمزنگاری کیف پول</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
<translation>این عملیات نیاز به عبارت کیف پول شما برای بازگشایی کیف پول دارد</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>باز کردن قفل کیف پول</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
<translation>این عملیات نیاز به عبارت کیف پول شما برای رمزگشایی کیف پول دارد.</translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation>رمزگشایی کیف پول</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>تغییر گذرواژه</translation>
</message>
<message>
<source>Enter the old passphrase and new passphrase to the wallet.</source>
<translation>عبارت کهنه و جدید کیف پول را وارد کنید.</translation>
</message>
<message>
<source>Confirm wallet encryption</source>
<translation>تأیید رمزنگاری کیف پول</translation>
@@ -249,6 +281,18 @@
<source>Open &amp;URI...</source>
<translation>باز کردن &amp;آدرس</translation>
</message>
<message>
<source>Click to disable network activity.</source>
<translation>برای غیر فعال کردن فعالیت شبکه کلیک کنید.</translation>
</message>
<message>
<source>Network activity disabled.</source>
<translation>فعالیت شبکه غیر فعال شد.</translation>
</message>
<message>
<source>Click to enable network activity again.</source>
<translation>برای فعال کردن دوباره فعالیت شبکه کلیک کنید.</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>بازنشانی بلوکها روی دیسک...</translation>
@@ -506,6 +550,10 @@
<source>Confirmed</source>
<translation>تأیید شده</translation>
</message>
<message>
<source>Copy address</source>
<translation>کپی ادرس</translation>
</message>
<message>
<source>Copy label</source>
<translation>کپی برچسب</translation>
@@ -530,6 +578,18 @@
<source>Copy quantity</source>
<translation>کپی تعداد</translation>
</message>
<message>
<source>Copy fee</source>
<translation>رونوشت کارمزد</translation>
</message>
<message>
<source>Copy bytes</source>
<translation>کپی کردن بایت ها</translation>
</message>
<message>
<source>Copy change</source>
<translation>کپی کردن تغییر</translation>
</message>
<message>
<source>(%1 locked)</source>
<translation>(%1 قفل شده)</translation>
@@ -697,10 +757,30 @@
<source>Form</source>
<translation>فرم</translation>
</message>
<message>
<source>Unknown...</source>
<translation>مشخص نیست</translation>
</message>
<message>
<source>Last block time</source>
<translation>زمان آخرین بلوک</translation>
</message>
<message>
<source>Progress</source>
<translation>پیشروی</translation>
</message>
<message>
<source>Progress increase per hour</source>
<translation>پیشروی در هر ساعت بیشتر میشود</translation>
</message>
<message>
<source>calculating...</source>
<translation>در حال محاسبه...</translation>
</message>
<message>
<source>Estimated time left until synced</source>
<translation>زمان تخمینی تا سینک شدن</translation>
</message>
<message>
<source>Hide</source>
<translation>پنهان کردن</translation>
@@ -921,6 +1001,10 @@
</context>
<context>
<name>PaymentServer</name>
<message>
<source>Invalid payment request.</source>
<translation>درخواست پرداخت نامعتبر.</translation>
</message>
</context>
<context>
<name>PeerTableModel</name>
@@ -1084,6 +1168,10 @@
<source>In:</source>
<translation>در:</translation>
</message>
<message>
<source>Out:</source>
<translation>خروجی:</translation>
</message>
<message>
<source>Debug log file</source>
<translation>فایلِ لاگِ اشکال زدایی</translation>
@@ -1092,6 +1180,26 @@
<source>Clear console</source>
<translation>پاکسازی کنسول</translation>
</message>
<message>
<source>1 &amp;hour</source>
<translation>1 ساعت</translation>
</message>
<message>
<source>1 &amp;day</source>
<translation>1 روز</translation>
</message>
<message>
<source>1 &amp;week</source>
<translation>1 هفته</translation>
</message>
<message>
<source>1 &amp;year</source>
<translation>1 سال</translation>
</message>
<message>
<source>Ban for</source>
<translation>محدود شده برای</translation>
</message>
<message>
<source>Use up and down arrows to navigate history, and &lt;b&gt;Ctrl-L&lt;/b&gt; to clear screen.</source>
<translation>دکمههای بالا و پایین برای پیمایش تاریخچه و &lt;b&gt;Ctrl-L&lt;/b&gt; برای پاک کردن صفحه.</translation>
@@ -1328,6 +1436,18 @@
<source>Copy amount</source>
<translation>کپی مقدار</translation>
</message>
<message>
<source>Copy fee</source>
<translation>رونوشت کارمزد</translation>
</message>
<message>
<source>Copy bytes</source>
<translation>کپی کردن بایت ها</translation>
</message>
<message>
<source>Copy change</source>
<translation>کپی کردن تغییر</translation>
</message>
<message>
<source>(no label)</source>
<translation>(بدون برچسب)</translation>
@@ -1514,6 +1634,10 @@
</context>
<context>
<name>TransactionView</name>
<message>
<source>Copy address</source>
<translation>کپی ادرس</translation>
</message>
<message>
<source>Copy label</source>
<translation>کپی برچسب</translation>
@@ -1534,6 +1658,10 @@
<source>Address</source>
<translation>آدرس</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>صدور موفق نبود</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -887,7 +887,7 @@
</message>
<message>
<source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below.</source>
<translation>Les transactions récentes ne sont peut-être pas encore visibles, et par conséquent, le solde de votre porte-monnaie est peut-être erroné. Cette information sera juste une fois que votre porte-monnaie aura fini de se synchroniser avec le réseau Bitcoin, tel que décrit ci-dessous. </translation>
<translation>Les transactions récentes ne sont peut-être pas encore visibles, et par conséquent, le solde de votre porte-monnaie est peut-être erroné. Cette information sera juste une fois que votre porte-monnaie aura fini de se synchroniser avec le réseau Bitcoin, comme décrit ci-dessous. </translation>
</message>
<message>
<source>Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
@@ -903,7 +903,7 @@
</message>
<message>
<source>Last block time</source>
<translation>Horodatage du dernier bloc</translation>
<translation>Estampille temporelle du dernier bloc</translation>
</message>
<message>
<source>Progress</source>
@@ -1366,7 +1366,7 @@
</message>
<message>
<source>NodeId</source>
<translation>NodeId</translation>
<translation>ID de nœud</translation>
</message>
<message>
<source>Ping</source>
@@ -1646,7 +1646,7 @@
</message>
<message>
<source>Last block time</source>
<translation>Horodatage du dernier bloc</translation>
<translation>Estampille temporelle du dernier bloc</translation>
</message>
<message>
<source>&amp;Open</source>
@@ -2178,7 +2178,7 @@
</message>
<message>
<source>The transaction was rejected with the following reason: %1</source>
<translation>La transaction a é rejetée pour la raison suivante: %1</translation>
<translation>La transaction a é rejetée pour la raison suivante : %1</translation>
</message>
<message>
<source>A fee higher than %1 is considered an absurdly high fee.</source>
@@ -3795,7 +3795,7 @@
</message>
<message>
<source>Prepend debug output with timestamp (default: %u)</source>
<translation>Ajouter l'horodatage au début de la sortie de débogage (par défaut : %u)</translation>
<translation>Ajouter l'estampille temporelle au début de la sortie de débogage (par défaut : %u)</translation>
</message>
<message>
<source>Relay and mine data carrier transactions (default: %u)</source>

View File

@@ -41,10 +41,46 @@
<source>&amp;Delete</source>
<translation>&amp;Supprimer</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>C&amp;oisir</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Copier &amp;Étiquette </translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Éditer </translation>
</message>
<message>
<source>Export Address List</source>
<translation>Exporter la liste d'adresses</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Valeurs séparées par des virgules (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Échec de l'export</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Étiquette</translation>
</message>
<message>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<source>(no label)</source>
<translation>(aucune étiquette)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -63,6 +99,22 @@
<source>Repeat new passphrase</source>
<translation>Répétez la phrase de passe</translation>
</message>
<message>
<source>Encrypt wallet</source>
<translation>Chiffrer le porte-monnaie</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>Déverrouiller le porte-monnaie</translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation>Décrypter le porte-monnaie</translation>
</message>
<message>
<source>Wallet encrypted</source>
<translation>Porte-monnaie chiffré</translation>
</message>
</context>
<context>
<name>BanTableModel</name>
@@ -414,6 +466,42 @@
<source>Confirmed</source>
<translation>Confirmée</translation>
</message>
<message>
<source>Copy address</source>
<translation>Copier l'adresse</translation>
</message>
<message>
<source>Copy label</source>
<translation>Copier l'étiquette</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copier le montant</translation>
</message>
<message>
<source>Copy fee</source>
<translation>Copier les frais</translation>
</message>
<message>
<source>Copy after fee</source>
<translation>Copier après les frais</translation>
</message>
<message>
<source>Copy bytes</source>
<translation>Copier les octets</translation>
</message>
<message>
<source>yes</source>
<translation>oui</translation>
</message>
<message>
<source>no</source>
<translation>non</translation>
</message>
<message>
<source>(no label)</source>
<translation>(aucune étiquette)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -797,6 +885,14 @@
</context>
<context>
<name>QRImageWidget</name>
<message>
<source>&amp;Copy Image</source>
<translation>&amp;Copier image</translation>
</message>
<message>
<source>Save QR Code</source>
<translation>Sauvegarder QR code</translation>
</message>
</context>
<context>
<name>RPCConsole</name>
@@ -1055,7 +1151,15 @@
<source>Remove</source>
<translation>Retirer</translation>
</message>
</context>
<message>
<source>Copy label</source>
<translation>Copier l'étiquette</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copier le montant</translation>
</message>
</context>
<context>
<name>ReceiveRequestDialog</name>
<message>
@@ -1074,9 +1178,37 @@
<source>&amp;Save Image...</source>
<translation>&amp;Sauvegarder image</translation>
</message>
<message>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<source>Label</source>
<translation>Étiquette</translation>
</message>
<message>
<source>Message</source>
<translation>Message</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<source>Label</source>
<translation>Étiquette</translation>
</message>
<message>
<source>Message</source>
<translation>Message</translation>
</message>
<message>
<source>(no label)</source>
<translation>(aucune étiquette)</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -1180,7 +1312,27 @@
<source>S&amp;end</source>
<translation>E&amp;voyer</translation>
</message>
</context>
<message>
<source>Copy amount</source>
<translation>Copier le montant</translation>
</message>
<message>
<source>Copy fee</source>
<translation>Copier les frais</translation>
</message>
<message>
<source>Copy after fee</source>
<translation>Copier après les frais</translation>
</message>
<message>
<source>Copy bytes</source>
<translation>Copier les octets</translation>
</message>
<message>
<source>(no label)</source>
<translation>(aucune étiquette)</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
@@ -1305,7 +1457,83 @@
</context>
<context>
<name>TransactionDesc</name>
</context>
<message>
<source>Status</source>
<translation>État</translation>
</message>
<message>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<source>Source</source>
<translation>Source</translation>
</message>
<message>
<source>Generated</source>
<translation>Généré</translation>
</message>
<message>
<source>From</source>
<translation>De</translation>
</message>
<message>
<source>unknown</source>
<translation>inconnu</translation>
</message>
<message>
<source>To</source>
<translation>Á</translation>
</message>
<message>
<source>own address</source>
<translation>Votre adresse</translation>
</message>
<message>
<source>watch-only</source>
<translation>Lecture uniquement</translation>
</message>
<message>
<source>label</source>
<translation>Étiquette </translation>
</message>
<message>
<source>Credit</source>
<translation>Crédit</translation>
</message>
<message>
<source>Debit</source>
<translation>Débit</translation>
</message>
<message>
<source>Total debit</source>
<translation>Débit total</translation>
</message>
<message>
<source>Total credit</source>
<translation>Crédit total </translation>
</message>
<message>
<source>Net amount</source>
<translation>Montant net</translation>
</message>
<message>
<source>Message</source>
<translation>Message</translation>
</message>
<message>
<source>Comment</source>
<translation>Commentaire </translation>
</message>
<message>
<source>true</source>
<translation>vrai</translation>
</message>
<message>
<source>false</source>
<translation>faux</translation>
</message>
</context>
<context>
<name>TransactionDescDialog</name>
<message>
@@ -1315,9 +1543,85 @@
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<source>Label</source>
<translation>Étiquette</translation>
</message>
<message>
<source>watch-only</source>
<translation>Lecture uniquement</translation>
</message>
<message>
<source>(no label)</source>
<translation>(aucune étiquette)</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>All</source>
<translation>Toutes</translation>
</message>
<message>
<source>Today</source>
<translation>Aujourd'hui</translation>
</message>
<message>
<source>This week</source>
<translation>Cette semaine</translation>
</message>
<message>
<source>This month</source>
<translation>Ce mois</translation>
</message>
<message>
<source>Last month</source>
<translation>Mois dernier</translation>
</message>
<message>
<source>This year</source>
<translation>Cette année</translation>
</message>
<message>
<source>Other</source>
<translation>Autres</translation>
</message>
<message>
<source>Copy address</source>
<translation>Copier l'adresse</translation>
</message>
<message>
<source>Copy label</source>
<translation>Copier l'étiquette</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copier le montant</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Valeurs séparées par des virgules (*.csv)</translation>
</message>
<message>
<source>Date</source>
<translation>Date</translation>
</message>
<message>
<source>Label</source>
<translation>Étiquette</translation>
</message>
<message>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Échec de l'export</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -41,10 +41,74 @@
<source>&amp;Delete</source>
<translation>&amp;Hapus</translation>
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>Pilih alamat untuk mengirim koin</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Piih alamat untuk menerima koin</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>&amp;Pilih</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Alamat-alamat pengirim</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Alamat-alamat penerima</translation>
</message>
<message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Ini adalah alamat- alamat Bitcoin Anda untuk mengirimkan pembayaran. Selalu periksa jumlah dan alamat penerima sebelum mengirimkan koin.</translation>
</message>
<message>
<source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
<translation>Ini adalah alamat- alamat Bitcoin Anda untuk menerima pembayaran. Dianjurkan untuk menggunakan alamat penerima yang baru setiap melakukan transaksi.</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>&amp;Salin Alamat</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Salin&amp; Label</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Ubah</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Ekspor Daftar Alamat</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>File yang berformat(*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Mengekspor Gagal</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>Address</source>
<translation>Alamat</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tidak ada label)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -63,7 +127,95 @@
<source>Repeat new passphrase</source>
<translation>Ulangi kata kunci baru</translation>
</message>
</context>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation>Masukan kata sandi baru ke dompet.&lt;br/&gt;Mohon gunakan kata sandi &lt;b&gt;sepuluh karakter acak atau lebih&lt;/b&gt;, atau &lt;b&gt; delapan atau lebih beberapa kata &lt;/b&gt;.</translation>
</message>
<message>
<source>Encrypt wallet</source>
<translation>Enkripsi dompet</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
<translation>Operasi ini memerlukan kata sandi dompet Anda untuk membuka dompet.</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>Buka dompet</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
<translation>Operasi ini memerlukan kata sandi dompet Anda untuk mendekripsikan dompet.</translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation>Dekripsi dompet</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>Ganti kata sandi</translation>
</message>
<message>
<source>Enter the old passphrase and new passphrase to the wallet.</source>
<translation>Masukkan kata sandi lama dan kata sandi baru ke dompet.</translation>
</message>
<message>
<source>Confirm wallet encryption</source>
<translation>Konfirmasi pengenkripsian dompet</translation>
</message>
<message>
<source>Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
<translation>Peringatan: Jika Anda enkripsi dompet Anda dan lupa kata sandi anda, Anda akan &lt;b&gt;KEHILANGAN SEMUA BITCOIN ANDA&lt;/b&gt;!</translation>
</message>
<message>
<source>Are you sure you wish to encrypt your wallet?</source>
<translation>Apakah Anda yakin ingin enkripsi dompet Anda?</translation>
</message>
<message>
<source>Wallet encrypted</source>
<translation>Dompet terenkripsi</translation>
</message>
<message>
<source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
<translation>%1 sekarang akan ditutup untuk menyelesaikan proses enkripsi. Ingatlah bahwa mengenkripsi dompet Anda tidak dapat sepenuhnya melindungi komputer Anda dari pencurian malware yang menginfeksi komputer Anda.</translation>
</message>
<message>
<source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
<translation>PENTING: Backup sebelumnya yang Anda buat dari file dompet Anda harus diganti dengan file dompet terenkripsi yang baru dibuat. Demi keamanan, backup file dompet sebelumnya yang tidak dienkripsi sebelumnya akan menjadi tidak berguna begitu Anda mulai menggunakan dompet terenkripsi yang baru.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
<translation>Pengenkripsian dompet gagal</translation>
</message>
<message>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
<translation>Pengenkripsian dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi.</translation>
</message>
<message>
<source>The supplied passphrases do not match.</source>
<translation>Kata sandi yang dimasukkan tidak cocok.</translation>
</message>
<message>
<source>Wallet unlock failed</source>
<translation>Membuka dompet gagal</translation>
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation>Kata sandi yang dimasukkan untuk dekripsi dompet salah.</translation>
</message>
<message>
<source>Wallet decryption failed</source>
<translation>Dekripsi dompet gagal</translation>
</message>
<message>
<source>Wallet passphrase was successfully changed.</source>
<translation>Kata sandi berhasil diganti.</translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
<translation>Peringatan: Tombol Caps Lock aktif!</translation>
</message>
</context>
<context>
<name>BanTableModel</name>
<message>
@@ -113,6 +265,14 @@
<source>Quit application</source>
<translation>Keluar dari aplikasi</translation>
</message>
<message>
<source>&amp;About %1</source>
<translation>&amp;Tentang%1</translation>
</message>
<message>
<source>Show information about %1</source>
<translation>Tampilkan informasi perihal %1</translation>
</message>
<message>
<source>About &amp;Qt</source>
<translation>Mengenai &amp;Qt</translation>
@@ -125,6 +285,10 @@
<source>&amp;Options...</source>
<translation>&amp;Pilihan...</translation>
</message>
<message>
<source>Modify configuration options for %1</source>
<translation>Pengubahan opsi konfigurasi untuk %1</translation>
</message>
<message>
<source>&amp;Encrypt Wallet...</source>
<translation>&amp;Enkripsi Dompet...</translation>
@@ -149,6 +313,22 @@
<source>Open &amp;URI...</source>
<translation>Buka &amp;URI</translation>
</message>
<message>
<source>Click to disable network activity.</source>
<translation>Klik untuk menonaktifkan aktivitas jaringan.</translation>
</message>
<message>
<source>Network activity disabled.</source>
<translation>Aktivitas jaringan dinonaktifkan.</translation>
</message>
<message>
<source>Click to enable network activity again.</source>
<translation>Klik untuk mengaktifkan aktivitas jaringan lagi.</translation>
</message>
<message>
<source>Syncing Headers (%1%)...</source>
<translation>Menyinkronkan Header (%1%) ...</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>Mengindex ulang blok di dalam disk...</translation>
@@ -253,6 +433,14 @@
<source>%n active connection(s) to Bitcoin network</source>
<translation><numerusform>%n koneksi aktif ke jaringan Bitcoin</numerusform></translation>
</message>
<message>
<source>Indexing blocks on disk...</source>
<translation>Pengindeksan blok pada disk ...</translation>
</message>
<message>
<source>Processing blocks on disk...</source>
<translation>Memproses blok pada disk ...</translation>
</message>
<message numerus="yes">
<source>Processed %n block(s) of transaction history.</source>
<translation><numerusform>%n blok dari riwayat transaksi diproses.</numerusform></translation>
@@ -285,6 +473,18 @@
<source>Up to date</source>
<translation>Terbaru</translation>
</message>
<message>
<source>Show the %1 help message to get a list with possible Bitcoin command-line options</source>
<translation>Tampilkan %1 pesan bantuan untuk mendapatkan daftar opsi baris perintah Bitcoin yang memungkinkan</translation>
</message>
<message>
<source>%1 client</source>
<translation>%1 klien</translation>
</message>
<message>
<source>Connecting to peers...</source>
<translation>Menghubungkan ke peer...</translation>
</message>
<message>
<source>Catching up...</source>
<translation>Menyusul...</translation>
@@ -406,6 +606,22 @@
<source>Confirmed</source>
<translation>Terkonfirmasi</translation>
</message>
<message>
<source>Copy address</source>
<translation>Salin alamat</translation>
</message>
<message>
<source>Copy label</source>
<translation>Salin label</translation>
</message>
<message>
<source>Copy fee</source>
<translation>Salin biaya</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tidak ada label)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -1065,6 +1281,10 @@
<source>Remove</source>
<translation>Menghapus</translation>
</message>
<message>
<source>Copy label</source>
<translation>Salin label</translation>
</message>
</context>
<context>
<name>ReceiveRequestDialog</name>
@@ -1084,13 +1304,29 @@
<source>&amp;Save Image...</source>
<translation>&amp;Simpan Gambaran...</translation>
</message>
<message>
<source>Address</source>
<translation>Alamat</translation>
</message>
<message>
<source>Amount</source>
<translation>Jumlah</translation>
</message>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tidak ada label)</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -1194,7 +1430,15 @@
<source>S&amp;end</source>
<translation>K&amp;irim</translation>
</message>
</context>
<message>
<source>Copy fee</source>
<translation>Salin biaya</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tidak ada label)</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
@@ -1357,9 +1601,41 @@
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tidak ada label)</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Copy address</source>
<translation>Salin alamat</translation>
</message>
<message>
<source>Copy label</source>
<translation>Salin label</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Berkas yang berformat(*.csv)</translation>
</message>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>Address</source>
<translation>Alamat</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Mengekspor Gagal</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

File diff suppressed because it is too large Load Diff

View File

@@ -41,9 +41,21 @@
<source>&amp;Delete</source>
<translation>Cancella</translation>
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>Scegli l'indirizzo a cui inviare denaro</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>Scegli</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
<message>
<source>Address</source>
<translation>Indirizzo</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
@@ -132,6 +144,10 @@
</context>
<context>
<name>ReceiveRequestDialog</name>
<message>
<source>Address</source>
<translation>Indirizzo</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
@@ -168,6 +184,10 @@
</context>
<context>
<name>TransactionView</name>
<message>
<source>Address</source>
<translation>Indirizzo</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,10 @@
<TS language="ms_MY" version="2.1">
<context>
<name>AddressBookPage</name>
<message>
<source>Right-click to edit address or label</source>
<translation>Klik-kanan untuk edit alamat ataupun label</translation>
</message>
<message>
<source>Create a new address</source>
<translation>Cipta alamat baru</translation>
@@ -17,6 +21,10 @@
<source>&amp;Copy</source>
<translation>&amp;Salin</translation>
</message>
<message>
<source>C&amp;lose</source>
<translation>&amp;Tutup</translation>
</message>
<message>
<source>Delete the currently selected address from the list</source>
<translation>Padam alamat semasa yang dipilih dari senaraiyang dipilih dari senarai</translation>
@@ -34,25 +42,301 @@ Alihkan fail data ke dalam tab semasa</translation>
<source>&amp;Delete</source>
<translation>&amp;Padam</translation>
</message>
</context>
<message>
<source>Choose the address to send coins to</source>
<translation>Pilih alamat untuk hantar koin kepada</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Pilih alamat untuk menerima koin dengan</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>&amp;Pilih</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>alamat-alamat penghantaran</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>alamat-alamat penerimaan</translation>
</message>
<message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Ini adalah alamat Bitcoin anda untuk pembayaran. Periksa jumlah dan alamat penerima sebelum membuat penghantaran koin sentiasa.</translation>
</message>
<message>
<source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
<translation>Ini adalah alamat Bitcoin anda untuk menerima pembayaraan. Anda disyorkan untuk menguna alamat menerima untuk setiap transaksi.</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>&amp;Salin Aamat</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Salin &amp; Label</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Edit</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Eskport Senarai Alamat</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Fail dibahagi oleh koma(*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Mengeksport Gagal</translation>
</message>
<message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation>Terdapat ralat semasa cubaan menyimpan senarai alamat kepada %1. Sila cuba lagi.</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>Address</source>
<translation>Alamat</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tiada label)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
</context>
<message>
<source>Passphrase Dialog</source>
<translation>Dialog frasa laluan</translation>
</message>
<message>
<source>Enter passphrase</source>
<translation>memasukkan frasa laluan</translation>
</message>
<message>
<source>New passphrase</source>
<translation>Frasa laluan baru</translation>
</message>
<message>
<source>Repeat new passphrase</source>
<translation>Ulangi frasa laluan baru</translation>
</message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation>Memasukkan frasa laluan baru kepada dompet.&lt;br/&gt;Sila mengunakkan frasa laluan yang&lt;b&gt;mengandungi 10 atau lebih aksara rawak&lt;/b&gt;,ataupun&lt;b&gt;lapan atau lebih perkataan.&lt;/b&gt;</translation>
</message>
<message>
<source>Encrypt wallet</source>
<translation>Dompet encrypt</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
<translation>Operasi ini perlukan frasa laluan dompet anda untuk membuka kunci dompet.</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>Membuka kunci dompet</translation>
</message>
<message>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
<translation>Operasi ini memerlukan frasa laluan dompet anda untuk menyahsulit dompet.</translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation>Menyahsulit dompet</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>Menukar frasa laluan</translation>
</message>
<message>
<source>Enter the old passphrase and new passphrase to the wallet.</source>
<translation>Memasukkan frasa laluan lama dan frasa laluan baru untuk.</translation>
</message>
<message>
<source>Confirm wallet encryption</source>
<translation>Mengesahkan enkripsi dompet</translation>
</message>
<message>
<source>Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
<translation>Amaran: Jika anda enkripkan dompet anda dan hilangkan frasa laluan, anda akan &lt;b&gt;ANDA AKAN HILANGKAN SEMUA BITCOIN ANDA&lt;/b&gt;!</translation>
</message>
<message>
<source>Are you sure you wish to encrypt your wallet?</source>
<translation>Anda pasti untuk membuat enkripsi dompet anda?</translation>
</message>
<message>
<source>Wallet encrypted</source>
<translation>Dompet dienkripsi</translation>
</message>
<message>
<source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
<translation>%1 akan tutup untuk menyelesaikan proses enkripsi. Ingat bahawa enkripsi tidak boleh melidungi sepenuhnya bitcoins anda daripada dicuri oleh malware yang menjangkiti komputer anda.</translation>
</message>
<message>
<source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
<translation>PENTING: Apa-apa sandaran yang anda buat sebelum ini untuk fail dompet anda hendaklah digantikan dengan fail dompet enkripsi yang dijana baru. Untuk sebab-sebab keselamatan , sandaran fail dompet yang belum dibuat enkripsi sebelum ini akan menjadi tidak berguna secepat anda mula guna dompet enkripsi baru.</translation>
</message>
<message>
<source>Wallet encryption failed</source>
<translation>Enkripsi dompet gagal</translation>
</message>
<message>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
<translation>Enkripsi dompet gagal kerana ralat dalaman. Dompet anda tidak dienkripkan.</translation>
</message>
<message>
<source>The supplied passphrases do not match.</source>
<translation>Frasa laluan yang dibekalkan tidak sepadan.</translation>
</message>
<message>
<source>Wallet unlock failed</source>
<translation>Pembukaan kunci dompet gagal</translation>
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation>Frasa laluan dimasukki untuk dekripsi dompet adalah tidak betul.</translation>
</message>
<message>
<source>Wallet decryption failed</source>
<translation>Dekripsi dompet gagal</translation>
</message>
<message>
<source>Wallet passphrase was successfully changed.</source>
<translation>Frasa laluan dompet berjaya ditukar.</translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
<translation>Amaran: Kunci Caps Lock buka!</translation>
</message>
</context>
<context>
<name>BanTableModel</name>
</context>
<message>
<source>IP/Netmask</source>
<translation>IP/Netmask</translation>
</message>
<message>
<source>Banned Until</source>
<translation>Diharamkan sehingga</translation>
</message>
</context>
<context>
<name>BitcoinGUI</name>
<message>
<source>Sign &amp;message...</source>
<translation>Tandatangan &amp; mesej...</translation>
</message>
<message>
<source>Synchronizing with network...</source>
<translation>Penyegerakan dengan rangkaian...</translation>
</message>
<message>
<source>&amp;Overview</source>
<translation>&amp;Gambaran Keseluruhan</translation>
</message>
<message>
<source>Node</source>
<translation>Nod</translation>
</message>
<message>
<source>Show general overview of wallet</source>
<translation>Tunjuk gambaran keseluruhan umum dompet</translation>
</message>
<message>
<source>&amp;Transactions</source>
<translation>&amp;Transaksi</translation>
</message>
<message>
<source>Browse transaction history</source>
<translation>Menyemak imbas sejarah transaksi </translation>
</message>
<message>
<source>E&amp;xit</source>
<translation>&amp;Keluar</translation>
</message>
<message>
<source>Quit application</source>
<translation>Berhenti aplikasi</translation>
</message>
<message>
<source>&amp;About %1</source>
<translation>&amp;Mengenai%1</translation>
</message>
<message>
<source>Show information about %1</source>
<translation>Menunjuk informasi mengenai%1</translation>
</message>
<message>
<source>About &amp;Qt</source>
<translation>Mengenai &amp;Qt</translation>
</message>
<message>
<source>Show information about Qt</source>
<translation>Menunjuk informasi megenai Qt</translation>
</message>
<message>
<source>&amp;Options...</source>
<translation>Pilihan</translation>
</message>
<message>
<source>Modify configuration options for %1</source>
<translation>Mengubah suai pilihan konfigurasi untuk %1</translation>
</message>
<message>
<source>&amp;Encrypt Wallet...</source>
<translation>&amp;Enkripsi Dompet</translation>
</message>
<message>
<source>&amp;Backup Wallet...</source>
<translation>&amp;Dompet Sandaran...</translation>
</message>
<message>
<source>&amp;Change Passphrase...</source>
<translation>&amp;Menukar frasa-laluan</translation>
</message>
<message>
<source>&amp;Sending addresses...</source>
<translation>&amp;Menghantar frasa-laluan</translation>
</message>
<message>
<source>&amp;Receiving addresses...</source>
<translation>&amp;Menerima frasa-laluan...</translation>
</message>
<message>
<source>Open &amp;URI...</source>
<translation>Buka &amp;URI...</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>Reindexi blok pada cakera...</translation>
</message>
<message>
<source>Send coins to a Bitcoin address</source>
<translation>Menghantar koin kepada alamat Bitcoin</translation>
</message>
<message>
<source>Backup wallet to another location</source>
<translation>Wallet sandaran ke lokasi lain</translation>
</message>
</context>
<context>
<name>CoinControlDialog</name>
<message>
<source>(no label)</source>
<translation>(tiada label)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -113,9 +397,25 @@ Alihkan fail data ke dalam tab semasa</translation>
<source>Copy &amp;Address</source>
<translation>&amp;Salin Alamat</translation>
</message>
<message>
<source>Address</source>
<translation>Alamat</translation>
</message>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tiada label)</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -123,7 +423,11 @@ Alihkan fail data ke dalam tab semasa</translation>
<source>Balance:</source>
<translation>Baki</translation>
</message>
</context>
<message>
<source>(no label)</source>
<translation>(tiada label)</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
</context>
@@ -150,9 +454,33 @@ Alihkan fail data ke dalam tab semasa</translation>
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>(no label)</source>
<translation>(tiada label)</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Fail dibahagi oleh koma(*.csv)</translation>
</message>
<message>
<source>Label</source>
<translation>Label</translation>
</message>
<message>
<source>Address</source>
<translation>Alamat</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Mengeksport Gagal</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -41,10 +41,74 @@
<source>&amp;Delete</source>
<translation>&amp;Slett</translation>
</message>
</context>
<message>
<source>Choose the address to send coins to</source>
<translation>Velg adressen å sende mynter til</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Velg adressen til å motta mynter med</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Utsendingsadresser</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Mottaksadresser</translation>
</message>
<message>
<source>These are your Bitcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.</source>
<translation>Dette er dine Bitcoin-adresser for sending av betalinger. Sjekk alltid beløpet og mottakeradressen før sending av mynter.</translation>
</message>
<message>
<source>These are your Bitcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.</source>
<translation>Dette er dine Bitcoin-adresser for å sende betalinger med. Det er anbefalt å bruke en ny mottaksadresse for hver transaksjon.</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>&amp;Kopier Adresse</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Kopier &amp;Merkelapp</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Rediger</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Eksporter adresseliste</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Kommaseparert fil (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Eksportering feilet</translation>
</message>
<message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation>Det oppstod en feil under lagring av adresselisten til %1. Vennligst prøv nytt.</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Merkelapp</translation>
</message>
<message>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<source>(no label)</source>
<translation>(ingen merkelapp)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -63,6 +127,26 @@
<source>Repeat new passphrase</source>
<translation>Gjenta ny adgangsfrase</translation>
</message>
<message>
<source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;ten or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
<translation>Oppgi adgangsfrasen til lommeboken.&lt;br/&gt;Vennligst bruk en adgangsfrase med &lt;b&gt;ti eller flere tilfeldige tegn&lt;/b&gt;, eller &lt;b&gt;åtte eller flere ord&lt;/b&gt;.</translation>
</message>
<message>
<source>Encrypt wallet</source>
<translation>Krypter lommebok</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>Lås opp lommebok</translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation>Dekrypter lommebok</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>Endre adgangsfrase</translation>
</message>
</context>
<context>
<name>BanTableModel</name>
@@ -422,6 +506,10 @@
<source>Confirmed</source>
<translation>Bekreftet</translation>
</message>
<message>
<source>(no label)</source>
<translation>(ingen merkelapp)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -1302,9 +1390,25 @@
<source>&amp;Save Image...</source>
<translation>&amp;Lagre Bilde...</translation>
</message>
<message>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<source>Label</source>
<translation>Merkelapp</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Label</source>
<translation>Merkelapp</translation>
</message>
<message>
<source>(no label)</source>
<translation>(ingen merkelapp)</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -1448,7 +1552,11 @@
<source>S&amp;end</source>
<translation>S&amp;end</translation>
</message>
</context>
<message>
<source>(no label)</source>
<translation>(ingen merkelapp)</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
@@ -1651,9 +1759,33 @@
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Label</source>
<translation>Merkelapp</translation>
</message>
<message>
<source>(no label)</source>
<translation>(ingen merkelapp)</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Kommaseparert fil (*.csv)</translation>
</message>
<message>
<source>Label</source>
<translation>Merkelapp</translation>
</message>
<message>
<source>Address</source>
<translation>Adresse</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Eksportering feilet</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -41,6 +41,23 @@
<source>&amp;Delete</source>
<translation>&amp;amp;</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation> ...</translation>
</message>
<message>
<source>Sending addresses</source>
<translation> ...</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation> ...</translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation>
</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
@@ -192,6 +209,11 @@
<source>Amount</source>
<translation></translation>
</message>
<message>
<source>Copy address</source>
<translation>
</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -204,6 +226,10 @@
</context>
<context>
<name>Intro</name>
<message>
<source>%1 will download and store a copy of the Bitcoin block chain. At least %2GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory.</source>
<translation>%1 ि ििि िि ि ि %2GB ि, ि िि ि </translation>
</message>
</context>
<context>
<name>ModalOverlay</name>
@@ -213,6 +239,10 @@
</context>
<context>
<name>OptionsDialog</name>
<message>
<source>Choose the default subdivision unit to show in the interface and when sending coins.</source>
<translation> ि ि ि ि </translation>
</message>
</context>
<context>
<name>OverviewPage</name>
@@ -281,6 +311,10 @@
<source>Amount</source>
<translation></translation>
</message>
<message>
<source>Enter a Bitcoin address (e.g. %1)</source>
<translation> ि ( %1)</translation>
</message>
</context>
<context>
<name>QObject::QObject</name>
@@ -310,13 +344,25 @@
</context>
<context>
<name>SendCoinsDialog</name>
<message>
<source>Choose...</source>
<translation> ...</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
<source>Choose previously used address</source>
<translation>ि ि </translation>
</message>
<message>
<source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
<translation> ि ि ि िि ि </translation>
</message>
<message>
<source>Enter a label for this address to add it to the list of used addresses</source>
<translation> ि ि </translation>
</message>
<message>
<source>A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network.</source>
<translation>ि ि सन्देश: तप ि ि URI : ि </translation>
@@ -334,6 +380,18 @@
<source>You can sign messages/agreements with your addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to.</source>
<translation> ि ि ि / िि ि ि ि ि- </translation>
</message>
<message>
<source>Choose previously used address</source>
<translation>ि ि </translation>
</message>
<message>
<source>Copy the current signature to the system clipboard</source>
<translation> ि </translation>
</message>
<message>
<source>Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction!</source>
<translation>सन्देश प्रमाणित गर्न, तल दिइएको स्थानमा प्राप्तकर्ता ठेगाना, सन्देश (लाइन ब्रेक, स्पेस, ट्याब, आदि उस्तै गरी कपी गर्ने कुरा सुनिश्चित गर्नुहोस्) र हस्ताक्षर &amp;apos;s प्रविष्ट गर्नुहोस् । बीचमा-मानिसको-आक्रमणबाट बच्न हस्ताक्षर पढ्दा हस्ताक्षर गरिएको सन्देशमा जे छ त्यो भन्दा धेरै कुरामा ध्यान नदिनुहोस् । यो कार्यले हस्ताक्षर गर्ने पक्षले मात्र यो ठेगानाले प्राप्त गर्छ भन्ने कुरा प्रमाणित गर्छ, यसले कुनै पनि कारोबारको प्रेषककर्तालाई प्रमाणित गर्न सक्दैन भन्ने कुरा याद गर्नुहोस्!</translation>
</message>
</context>
<context>
<name>SplashScreen</name>
@@ -352,6 +410,11 @@
</context>
<context>
<name>TransactionView</name>
<message>
<source>Copy address</source>
<translation>ठेगाना कपी गर्नुहोस्
</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>
@@ -364,9 +427,22 @@
</context>
<context>
<name>WalletView</name>
<message>
<source>&amp;Export</source>
<translation>&amp;amp;निर्यात गर्नुहोस्
</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
<translation>वर्तमान ट्याबको डाटालाई फाइलमा निर्यात गर्नुहोस्</translation>
</message>
</context>
<context>
<name>bitcoin-core</name>
<message>
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
<translation>वालेटको सबै कारोबार मेटाउनुहोस् र -स्टार्टअपको पुनः स्क्यान मार्फत ब्लकचेनका ती भागहरूलाई मात्र पुनः प्राप्त गर्नुहोस्</translation>
</message>
<message>
<source>The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source>
<translation>ब्लक डाटाबेसमा भविष्यबाट आए जस्तो देखिने एउटा ब्लक हुन्छ । तपाईंको कम्प्युटरको मिति र समय गलत तरिकाले सेट गरिएकाले यस्तो हुन सक्छ । तपाईं आफ्नो कम्प्युटरको मिति र समय सही छ भनेर पक्का हुनुहुन्छ भने मात्र ब्लक डाटाबेस पुनर्निर्माण गर्नुहोस् ।</translation>

View File

@@ -3,7 +3,7 @@
<name>AddressBookPage</name>
<message>
<source>Right-click to edit address or label</source>
<translation>Klik met de rechtermuisknop om het adres of label te wijzigen</translation>
<translation>Rechtermuisklik om het adres of label te wijzigen</translation>
</message>
<message>
<source>Create a new address</source>
@@ -317,6 +317,22 @@
<source>Open &amp;URI...</source>
<translation>Open &amp;URI...</translation>
</message>
<message>
<source>Click to disable network activity.</source>
<translation>Klik om de netwerkactiviteit te stoppen.</translation>
</message>
<message>
<source>Network activity disabled.</source>
<translation>Netwerkactiviteit gestopt.</translation>
</message>
<message>
<source>Click to enable network activity again.</source>
<translation>Klik om de netwerkactiviteit opnieuw te starten.</translation>
</message>
<message>
<source>Syncing Headers (%1%)...</source>
<translation>Kopteksten synchroniseren (%1%)...</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>Bezig met herindexeren van blokken op harde schijf...</translation>
@@ -469,6 +485,10 @@
<source>%1 client</source>
<translation>%1 client</translation>
</message>
<message>
<source>Connecting to peers...</source>
<translation>Gelijke worden verbonden...</translation>
</message>
<message>
<source>Catching up...</source>
<translation>Aan het bijwerken...</translation>
@@ -511,6 +531,14 @@
<source>Incoming transaction</source>
<translation>Binnenkomende transactie</translation>
</message>
<message>
<source>HD key generation is &lt;b&gt;enabled&lt;/b&gt;</source>
<translation>HD sleutel voortbrenging is &lt;b&gt;ingeschakeld&lt;/b&gt;</translation>
</message>
<message>
<source>HD key generation is &lt;b&gt;disabled&lt;/b&gt;</source>
<translation>HD sleutel voortbrenging is &lt;b&gt;uitgeschakeld&lt;/b&gt;</translation>
</message>
<message>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
<translation>Portemonnee is &lt;b&gt;versleuteld&lt;/b&gt; en momenteel &lt;b&gt;geopend&lt;/b&gt;</translation>
@@ -519,7 +547,11 @@
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
<translation>Portemonnee is &lt;b&gt;versleuteld&lt;/b&gt; en momenteel &lt;b&gt;gesloten&lt;/b&gt;</translation>
</message>
</context>
<message>
<source>A fatal error occurred. Bitcoin can no longer continue safely and will quit.</source>
<translation>Een fatale fout heeft zich voorgedaan. Bitcoin kan niet veilig worden verdergezet en wordt afgesloten.</translation>
</message>
</context>
<context>
<name>CoinControlDialog</name>
<message>
@@ -853,15 +885,51 @@
<source>Form</source>
<translation>Vorm</translation>
</message>
<message>
<source>Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below.</source>
<translation>Recente transacties zijn mogelijk nog niet zichtbaar. De balans van de geldbeugel is daarom mogelijk niet correct. Deze informatie is correct van zodra de synchronisatie met het Bitcoin-netwerk werd voltooid, zoals onderaan beschreven.</translation>
</message>
<message>
<source>Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network.</source>
<translation>Poging om bitcoins te besteden die door "nog niet weergegeven" transacties worden beïnvloed, worden niet door het netwerk geaccepteerd.</translation>
</message>
<message>
<source>Number of blocks left</source>
<translation>Aantal blokken resterend.</translation>
</message>
<message>
<source>Unknown...</source>
<translation>Onbekend...</translation>
</message>
<message>
<source>Last block time</source>
<translation>Tijd laatste blok</translation>
</message>
<message>
<source>Progress</source>
<translation>Vooruitgang</translation>
</message>
<message>
<source>Progress increase per hour</source>
<translation>Vooruitgang per uur</translation>
</message>
<message>
<source>calculating...</source>
<translation>Berekenen...</translation>
</message>
<message>
<source>Estimated time left until synced</source>
<translation>Geschatte tijd tot volledig synchroon</translation>
</message>
<message>
<source>Hide</source>
<translation>Verbergen</translation>
</message>
</context>
<message>
<source>Unknown. Syncing Headers (%1)...</source>
<translation>Onbekend. Kopteksten synchroniseren (%1%)...</translation>
</message>
</context>
<context>
<name>OpenURIDialog</name>
<message>
@@ -1296,7 +1364,15 @@
<source>Node/Service</source>
<translation>Node/Dienst</translation>
</message>
</context>
<message>
<source>NodeId</source>
<translation>Node ID</translation>
</message>
<message>
<source>Ping</source>
<translation>Ping</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
@@ -1335,14 +1411,54 @@
<source>%1 ms</source>
<translation>%1 ms</translation>
</message>
<message numerus="yes">
<source>%n second(s)</source>
<translation><numerusform>%n seconde</numerusform><numerusform>%n seconden</numerusform></translation>
</message>
<message numerus="yes">
<source>%n minute(s)</source>
<translation><numerusform>%n minuut</numerusform><numerusform>%n minuten</numerusform></translation>
</message>
<message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n uur</numerusform><numerusform>%n uren</numerusform></translation>
</message>
<message numerus="yes">
<source>%n day(s)</source>
<translation><numerusform>%n dag</numerusform><numerusform>%n dagen</numerusform></translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%n week</numerusform><numerusform>%n weken</numerusform></translation>
</message>
<message>
<source>%1 and %2</source>
<translation>%1 en %2</translation>
</message>
</context>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n jaar</numerusform><numerusform>%n jaren</numerusform></translation>
</message>
<message>
<source>%1 didn't yet exit safely...</source>
<translation>%1 sloot nog niet veilig af...</translation>
</message>
</context>
<context>
<name>QObject::QObject</name>
</context>
<message>
<source>Error: Specified data directory "%1" does not exist.</source>
<translation>Fout: Opgegeven gegevensmap "%1" bestaat niet.</translation>
</message>
<message>
<source>Error: Cannot parse configuration file: %1. Only use key=value syntax.</source>
<translation>Fout: Kan configuratiebestand niet verwerken: %1. Gebruik enkel de key=value syntax.</translation>
</message>
<message>
<source>Error: %1</source>
<translation>Fout: %1</translation>
</message>
</context>
<context>
<name>QRImageWidget</name>
<message>
@@ -1520,6 +1636,10 @@
<source>Ping Wait</source>
<translation>Pingwachttijd</translation>
</message>
<message>
<source>Min Ping</source>
<translation>Min Ping</translation>
</message>
<message>
<source>Time Offset</source>
<translation>Tijdcompensatie</translation>
@@ -1580,6 +1700,18 @@
<source>1 &amp;year</source>
<translation>1 &amp;jaar</translation>
</message>
<message>
<source>&amp;Disconnect</source>
<translation>&amp;Verbreek verbinding</translation>
</message>
<message>
<source>Ban for</source>
<translation>Ban Node voor</translation>
</message>
<message>
<source>&amp;Unban</source>
<translation>&amp;Maak ban voor Node ongedaan</translation>
</message>
<message>
<source>Welcome to the %1 RPC console.</source>
<translation>Welkom bij de %1 RPC-console.</translation>
@@ -1592,6 +1724,14 @@
<source>Type &lt;b&gt;help&lt;/b&gt; for an overview of available commands.</source>
<translation>Typ &lt;b&gt;help&lt;/b&gt; voor een overzicht van de beschikbare opdrachten.</translation>
</message>
<message>
<source>WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramification of a command.</source>
<translation>WAARSCHUWING: Er zijn Scammers actief geweest, die gebruikers vragen om hier commando's te typen, waardoor de inhoud van hun portefeuille werd gestolen. Gebruik deze console niet zonder de toedracht van een opdracht volledig te begrijpen.</translation>
</message>
<message>
<source>Network activity disabled</source>
<translation>Netwerkactiviteit uitgeschakeld</translation>
</message>
<message>
<source>%1 B</source>
<translation>%1 B</translation>
@@ -1711,6 +1851,10 @@
<source>Remove</source>
<translation>Verwijder</translation>
</message>
<message>
<source>Copy URI</source>
<translation>Kopieer URI</translation>
</message>
<message>
<source>Copy label</source>
<translation>Kopieer label</translation>
@@ -1936,6 +2080,10 @@
<source>Dust:</source>
<translation>Stof:</translation>
</message>
<message>
<source>Confirmation time target:</source>
<translation>Bevestigingstijddoel:</translation>
</message>
<message>
<source>Clear &amp;All</source>
<translation>Verwijder &amp;Alles</translation>
@@ -2028,6 +2176,10 @@
<source>Transaction creation failed!</source>
<translation>Transactiecreatie mislukt</translation>
</message>
<message>
<source>The transaction was rejected with the following reason: %1</source>
<translation>De transactie werd afgewezen om de volgende reden: %1</translation>
</message>
<message>
<source>A fee higher than %1 is considered an absurdly high fee.</source>
<translation>Een vergoeding van meer dan %1 wordt beschouwd als een absurd hoge vergoeding.</translation>
@@ -2036,10 +2188,18 @@
<source>Payment request expired.</source>
<translation>Betalingsverzoek verlopen.</translation>
</message>
<message numerus="yes">
<source>%n block(s)</source>
<translation><numerusform>%n blok</numerusform><numerusform>%n blokken</numerusform></translation>
</message>
<message>
<source>Pay only the required fee of %1</source>
<translation>Betaal alleen de verplichte transactiekosten van %1</translation>
</message>
<message numerus="yes">
<source>Estimated to begin confirmation within %n block(s).</source>
<translation><numerusform>Schatting is dat bevestiging begint over %n blok.</numerusform><numerusform>Schatting is dat bevestiging begint over %n blokken.</numerusform></translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Waarschuwing: Ongeldig Bitcoinadres</translation>
@@ -2048,6 +2208,14 @@
<source>Warning: Unknown change address</source>
<translation>Waarschuwing: Onbekend wisselgeldadres</translation>
</message>
<message>
<source>Confirm custom change address</source>
<translation>Bevestig aangepast wisselgeldadres</translation>
</message>
<message>
<source>The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure?</source>
<translation>Het wisselgeldadres dat u heeft geselecteerd maakt geen deel uit van deze portemonnee. Een deel of zelfs alle geld in uw portemonnee kan mogelijk naar dit adres worden verzonden. Weet je het zeker?</translation>
</message>
<message>
<source>(no label)</source>
<translation>(geen label)</translation>
@@ -2309,6 +2477,10 @@
</context>
<context>
<name>TransactionDesc</name>
<message numerus="yes">
<source>Open for %n more block(s)</source>
<translation><numerusform>Open voor nog %n blok</numerusform><numerusform>Open voor nog %n blokken</numerusform></translation>
</message>
<message>
<source>Open until %1</source>
<translation>Open tot %1</translation>
@@ -2393,6 +2565,10 @@
<source>Credit</source>
<translation>Credit</translation>
</message>
<message numerus="yes">
<source>matures in %n more block(s)</source>
<translation><numerusform>komt beschikbaar na %n nieuwe blok</numerusform><numerusform>komt beschikbaar na %n nieuwe blokken</numerusform></translation>
</message>
<message>
<source>not accepted</source>
<translation>niet geaccepteerd</translation>
@@ -2429,6 +2605,10 @@
<source>Transaction ID</source>
<translation>Transactie-ID</translation>
</message>
<message>
<source>Transaction total size</source>
<translation>Transactie totale grootte</translation>
</message>
<message>
<source>Output index</source>
<translation>Output index</translation>
@@ -2491,6 +2671,10 @@
<source>Label</source>
<translation>Label</translation>
</message>
<message numerus="yes">
<source>Open for %n more block(s)</source>
<translation><numerusform>Open voor nog %n blok</numerusform><numerusform>Open voor nog %n blokken</numerusform></translation>
</message>
<message>
<source>Open until %1</source>
<translation>Open tot %1</translation>
@@ -2821,6 +3005,18 @@
<source>Accept command line and JSON-RPC commands</source>
<translation>Aanvaard opdrachtregel- en JSON-RPC-opdrachten</translation>
</message>
<message>
<source>Accept connections from outside (default: 1 if no -proxy or -connect/-noconnect)</source>
<translation>Accepteer verbindingen van buitenaf (standaard: 1 indien geen -proxy of -connect/-noconnect werd opgegeven)</translation>
</message>
<message>
<source>Connect only to the specified node(s); -noconnect or -connect=0 alone to disable automatic connections</source>
<translation>Verbind enkel met de opgegeven knooppunt(en); -noconnect of -connect = 0 alleen om automatische verbindingen uit te schakelen</translation>
</message>
<message>
<source>Distributed under the MIT software license, see the accompanying file %s or %s</source>
<translation>Uitgegeven onder de MIT software licentie, zie het bijgevoegde bestand %s of %s</translation>
</message>
<message>
<source>If &lt;category&gt; is not supplied or if &lt;category&gt; = 1, output all debugging information.</source>
<translation>Als er geen &lt;categorie&gt; is opgegeven of als de &lt;categorie&gt; 1 is, laat dan alle debugginginformatie zien.</translation>
@@ -2897,6 +3093,14 @@
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
<translation>Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID)</translation>
</message>
<message>
<source>Extra transactions to keep in memory for compact block reconstructions (default: %u)</source>
<translation>Extra transacties wordt bijgehouden voor compacte blokreconstructie (standaard: %u)</translation>
</message>
<message>
<source>If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s)</source>
<translation>Als dit blok in de keten staat, gaat het ervan uit dat dit blok en zijn voorouders geldig zijn en mogelijk hun script verificatie overslaan (0 om alles te verifiëren, standaard:%s, testnet:%s)</translation>
</message>
<message>
<source>Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)</source>
<translation>Maximum toegestane peer tijd compensatie. Lokaal perspectief van tijd mag worden beinvloed door peers die met deze hoeveelheid voor of achter lopen. (standaard: %u seconden)</translation>
@@ -2913,6 +3117,14 @@
<source>Please contribute if you find %s useful. Visit %s for further information about the software.</source>
<translation>Gelieve bij te dragen als je %s nuttig vindt. Bezoek %s voor meer informatie over de software.</translation>
</message>
<message>
<source>Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, &gt;%u = automatically prune block files to stay under the specified target size in MiB)</source>
<translation>Beperk benodigde opslag door trimmen (verwijderen) van oude blokken in te schakelen. Dit maakt het mogelijk om de pruneblockchain RPC aan te roepen om specifieke blokken te verwijderen, en maakt het automatische trimmen van oude blokken mogelijk wanneer een doelgrootte in MiB is voorzien. Deze modus is niet compatibele met -txindex en -rescan. Waarschuwing: Terugzetten van deze instellingen vereist het opnieuw downloaden van gehele de blokketen. (standaard:0 = uitzetten trimmodus, 1 = manueel trimmen via RPC toestaan, &gt;%u = automatisch blokbestanden trimmen om beneden de gespecificeerde doelgrootte in MiB te blijven)</translation>
</message>
<message>
<source>Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)</source>
<translation>Specificeer het laagste tarief (in %s/kB) voor transacties die bij het maken van een blok moeten worden in rekening worden gebracht (standaard: %s)</translation>
</message>
<message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Kies het aantal scriptverificatie processen (%u tot %d, 0 = auto, &lt;0 = laat dit aantal kernen vrij, standaard: %d)</translation>
@@ -2921,6 +3133,10 @@
<source>The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source>
<translation>De blokdatabase bevat een blok dat lijkt uit de toekomst te komen. Dit kan gebeuren omdat de datum en tijd van uw computer niet goed staat. Herbouw de blokdatabase pas nadat u de datum en tijd van uw computer correct heeft ingesteld.</translation>
</message>
<message>
<source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source>
<translation>Dit is een pre-release testversie - gebruik op eigen risico! Gebruik deze niet voor het delven van munten of handelsdoeleinden</translation>
</message>
<message>
<source>Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source>
<translation>Niet mogelijk om de databank terug te draaien naar een staat voor de vork. Je zal je blokketen opnieuw moeten downloaden</translation>
@@ -2929,6 +3145,22 @@
<source>Use UPnP to map the listening port (default: 1 when listening and no -proxy)</source>
<translation>Gebruik UPnP om de luisterende poort te mappen (standaard: 1 als er geluisterd worden en geen -proxy is meegegeven)</translation>
</message>
<message>
<source>Username and hashed password for JSON-RPC connections. The field &lt;userpw&gt; comes in the format: &lt;USERNAME&gt;:&lt;SALT&gt;$&lt;HASH&gt;. A canonical python script is included in share/rpcuser. The client then connects normally using the rpcuser=&lt;USERNAME&gt;/rpcpassword=&lt;PASSWORD&gt; pair of arguments. This option can be specified multiple times</source>
<translation>Gebruikersnaam en gehasht wachtwoord voor JSON-RPC-verbindingen. De velden &lt;userpw&gt; is in het formaat: &lt;GEBRUIKERSNAAM&gt;:&lt;SALT&gt;$&lt;HASH&gt;. Een kanoniek Pythonscript is inbegrepen in de share/rpcuser. De klant connecteert dan normaal via de rpcuser=&lt;GEBRUIKERSNAAM&gt;/rpcpassword=&lt;PASWOORD&gt; argumenten. Deze optie kan meerdere keren worden meegegeven</translation>
</message>
<message>
<source>Wallet will not create transactions that violate mempool chain limits (default: %u)</source>
<translation>Portemonnee creëert geen transacties die mempool-ketenlimieten schenden (standaard: %u)</translation>
</message>
<message>
<source>Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues.</source>
<translation>Waarschuwing: Het lijkt erop dat het netwerk geen consensus kan vinden! Sommige delvers lijken problemen te ondervinden.</translation>
</message>
<message>
<source>Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade.</source>
<translation>Waarschuwing: Het lijkt erop dat we geen consensus kunnen vinden met onze peers! Mogelijk dient u te upgraden, of andere nodes moeten wellicht upgraden.</translation>
</message>
<message>
<source>You need to rebuild the database using -reindex-chainstate to change -txindex</source>
<translation>Om -txindex te kunnen veranderen dient u de database opnieuw te bouwen met gebruik van -reindex-chainstate.</translation>
@@ -2961,6 +3193,10 @@
<source>Cannot resolve -%s address: '%s'</source>
<translation>Kan -%s adres niet herleiden: '%s'</translation>
</message>
<message>
<source>Chain selection options:</source>
<translation>Keten selectie opties:</translation>
</message>
<message>
<source>Change index out of range</source>
<translation>Wijzigingsindex buiten bereik</translation>
@@ -3157,6 +3393,10 @@
<source>Use UPnP to map the listening port (default: %u)</source>
<translation>Gebruik UPnP om de luisterende poort te mappen (standaard: %u)</translation>
</message>
<message>
<source>Use the test chain</source>
<translation>Gebruik de test keten</translation>
</message>
<message>
<source>User Agent comment (%s) contains unsafe characters.</source>
<translation>User Agentcommentaar (%s) bevat onveilige karakters.</translation>
@@ -3449,10 +3689,22 @@
<source>Output debugging information (default: %u, supplying &lt;category&gt; is optional)</source>
<translation>Output extra debugginginformatie (standaard: %u, het leveren van &lt;categorie&gt; is optioneel)</translation>
</message>
<message>
<source>Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect/-noconnect)</source>
<translation>Query voor peer-adressen via DNS-lookup , indien laag aan adressen (default: 1 unless -connect/-noconnect)</translation>
</message>
<message>
<source>Support filtering of blocks and transaction with bloom filters (default: %u)</source>
<translation>Ondersteun filtering van blokken en transacties met bloomfilters (standaard: %u)</translation>
</message>
<message>
<source>This is the transaction fee you may pay when fee estimates are not available.</source>
<translation>Dit is de transactiekost die je mogelijk betaald indien geschatte tarief niet beschikbaar is</translation>
</message>
<message>
<source>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit %s and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.</source>
<translation>Dit product bevat software dat ontwikkeld is door het OpenSSL Project voor gebruik in de OpenSSL Toolkit %s en cryptografische software geschreven door Eric Young en UPnP software geschreven door Thomas Bernard.</translation>
</message>
<message>
<source>Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments.</source>
<translation>Totale lengte van netwerkversiestring (%i) overschrijdt maximale lengte (%i). Verminder het aantal of grootte van uacomments.</translation>
@@ -3481,6 +3733,14 @@
<source>Warning: Wallet file corrupt, data salvaged! Original %s saved as %s in %s; if your balance or transactions are incorrect you should restore from a backup.</source>
<translation>Waarschuwing: portomonee bestand is corrupt, data is veiliggesteld! Originele %s is opgeslagen als %s in %s; als uw balans of transacties incorrect zijn dient u een backup terug te zetten.</translation>
</message>
<message>
<source>Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times.</source>
<translation>Goedgekeurde peers die verbinden vanaf een bepaald IP adres (vb. 1.2.3.4) of CIDR genoteerd netwerk (vb. 1.2.3.0/24). Kan meerdere keren worden gespecificeerd.</translation>
</message>
<message>
<source>%s is set very high!</source>
<translation>%s is zeer hoog ingesteld!</translation>
</message>
<message>
<source>(default: %s)</source>
<translation>(standaard: %s)</translation>
@@ -3501,6 +3761,10 @@
<source>Invalid -proxy address: '%s'</source>
<translation>Ongeldig -proxy adres: '%s'</translation>
</message>
<message>
<source>Keypool ran out, please call keypoolrefill first</source>
<translation>Keypool op geraakt, roep alsjeblieft eerst keypoolrefill functie aan</translation>
</message>
<message>
<source>Listen for JSON-RPC connections on &lt;port&gt; (default: %u or testnet: %u)</source>
<translation>Luister naar JSON-RPC-verbindingen op &lt;poort&gt; (standaard: %u of testnet: %u)</translation>
@@ -3537,6 +3801,10 @@
<source>Relay non-P2SH multisig (default: %u)</source>
<translation>Geef non-P2SH multisig door (standaard: %u)</translation>
</message>
<message>
<source>Send transactions with full-RBF opt-in enabled (default: %u)</source>
<translation>Verstuur transacties met full-RBF opt-in ingeschakeld (standaard: %u)</translation>
</message>
<message>
<source>Set key pool size to &lt;n&gt; (default: %u)</source>
<translation>Stel sleutelpoelgrootte in op &lt;n&gt; (standaard: %u)</translation>
@@ -3569,10 +3837,34 @@
<source>Starting network threads...</source>
<translation>Netwerkthread starten...</translation>
</message>
<message>
<source>The wallet will avoid paying less than the minimum relay fee.</source>
<translation>De portemonnee vermijdt minder te betalen dan het minimale relay vergoeding.</translation>
</message>
<message>
<source>This is the minimum transaction fee you pay on every transaction.</source>
<translation>Dit is het minimum transactietarief dat je betaald op elke transactie.</translation>
</message>
<message>
<source>This is the transaction fee you will pay if you send a transaction.</source>
<translation>Dit is het transactietarief dat je betaald wanneer je een transactie verstuurt.</translation>
</message>
<message>
<source>Threshold for disconnecting misbehaving peers (default: %u)</source>
<translation>Drempel om verbinding te verbreken naar zich misdragende peers (standaard: %u)</translation>
</message>
<message>
<source>Transaction amounts must not be negative</source>
<translation>Transactiebedragen moeten positief zijn</translation>
</message>
<message>
<source>Transaction has too long of a mempool chain</source>
<translation>Transactie heeft een te lange mempoolketen</translation>
</message>
<message>
<source>Transaction must have at least one recipient</source>
<translation>Transactie moet ten minste één ontvanger hebben</translation>
</message>
<message>
<source>Unknown network specified in -onlynet: '%s'</source>
<translation>Onbekend netwerk gespecificeerd in -onlynet: '%s'</translation>

View File

@@ -419,7 +419,7 @@
</message>
<message numerus="yes">
<source>%n active connection(s) to Bitcoin network</source>
<translation><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform></translation>
<translation><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform><numerusform>%n aktywnych połączeń do sieci Bitcoin</numerusform></translation>
</message>
<message>
<source>Indexing blocks on disk...</source>
@@ -431,7 +431,7 @@
</message>
<message numerus="yes">
<source>Processed %n block(s) of transaction history.</source>
<translation><numerusform>Przetworzono %n bloków historii transakcji.</numerusform><numerusform>Przetworzono %n bloków historii transakcji.</numerusform><numerusform>Przetworzono %n bloków historii transakcji.</numerusform></translation>
<translation><numerusform>Przetworzono %n bloków historii transakcji.</numerusform><numerusform>Przetworzono %n bloków historii transakcji.</numerusform><numerusform>Przetworzono %n bloków historii transakcji.</numerusform><numerusform>Przetworzono %n bloków historii transakcji.</numerusform></translation>
</message>
<message>
<source>%1 behind</source>
@@ -832,11 +832,11 @@
</message>
<message numerus="yes">
<source>%n GB of free space available</source>
<translation><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform></translation>
<translation><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform><numerusform>%n GB dostępnego wolnego miejsca</numerusform></translation>
</message>
<message numerus="yes">
<source>(of %n GB needed)</source>
<translation><numerusform>(z %n GB potrzebnych)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform></translation>
<translation><numerusform>(z %n GB potrzebnych)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform><numerusform>(z %n GB potrzebnych)</numerusform></translation>
</message>
</context>
<context>
@@ -1325,11 +1325,11 @@
</message>
<message numerus="yes">
<source>%n second(s)</source>
<translation><numerusform>%n sekunda</numerusform><numerusform>%n sekund</numerusform><numerusform>%n sekund</numerusform></translation>
<translation><numerusform>%n sekunda</numerusform><numerusform>%n sekund</numerusform><numerusform>%n sekund</numerusform><numerusform>%n sekund</numerusform></translation>
</message>
<message numerus="yes">
<source>%n minute(s)</source>
<translation><numerusform>%n minuta</numerusform><numerusform>%n minut</numerusform><numerusform>%n minut</numerusform></translation>
<translation><numerusform>%n minuta</numerusform><numerusform>%n minut</numerusform><numerusform>%n minut</numerusform><numerusform>%n minut</numerusform></translation>
</message>
<message>
<source>%1 and %2</source>

View File

@@ -329,6 +329,10 @@
<source>Click to enable network activity again.</source>
<translation>Кликните, чтобы снова разрешить сетевую активность.</translation>
</message>
<message>
<source>Syncing Headers (%1%)...</source>
<translation>Синхронизация заголовков (%1%)...</translation>
</message>
<message>
<source>Reindexing blocks on disk...</source>
<translation>Идёт переиндексация блоков на диске...</translation>
@@ -3089,6 +3093,14 @@
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
<translation>Выполнить команду, когда меняется транзакция в бумажнике (%s в команде заменяется на TxID)</translation>
</message>
<message>
<source>Extra transactions to keep in memory for compact block reconstructions (default: %u)</source>
<translation>Хранить в памяти дополнительные транзакции для реконструкции компактных блоков (по умолчанию: %u)</translation>
</message>
<message>
<source>If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet: %s)</source>
<translation>Если этот блок в цепи, считать его и последующие блоки верными и потенциально пропускать проверку их скриптов (0 для проверки всех, по умолчанию: %s, тестовая сеть: %s)</translation>
</message>
<message>
<source>Maximum allowed median peer time offset adjustment. Local perspective of time may be influenced by peers forward or backward by this amount. (default: %u seconds)</source>
<translation>Максимально допустимое среднее отклонение времени участников. Локальное представление времени может меняться вперед или назад на это количество. (по умолчанию: %u секунд)</translation>
@@ -3105,6 +3117,14 @@
<source>Please contribute if you find %s useful. Visit %s for further information about the software.</source>
<translation>Пожалуйста, внести свой вклад, если вы найдете %s полезными. Посетите %s для получения дополнительной информации о программном обеспечении.</translation>
</message>
<message>
<source>Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, &gt;%u = automatically prune block files to stay under the specified target size in MiB)</source>
<translation>Уменьшить размер хранилища за счёт обрезания (удаления) старых блоков. Будет разрешён вызов RPC метода pruneblockchain для удаления определённых блоков и разрешено автоматическое обрезание старых блоков, если указан целевой размер в Мб. Этот режим несовместим с -txindex и -rescan. Внимание: переключение этой опции обратно потребует полной загрузки цепи блоков. (по умолчанию: 0 = отключить обрезание блоков, 1 = разрешить ручное обрезание через RPC, &gt;%u = автоматически обрезать файлы блоков, чтобы они были меньше указанного размера в Мб)</translation>
</message>
<message>
<source>Set lowest fee rate (in %s/kB) for transactions to be included in block creation. (default: %s)</source>
<translation>Задать минимальный курс комиссии (в %s/Кб) для транзакцийб включаемых в создаваемый блок. (по умолчанию: %s)</translation>
</message>
<message>
<source>Set the number of script verification threads (%u to %d, 0 = auto, &lt;0 = leave that many cores free, default: %d)</source>
<translation>Задать число потоков проверки скрипта (от %u до %d, 0=авто, &lt;0 = оставить столько ядер свободными, по умолчанию: %d)</translation>

View File

@@ -3,7 +3,7 @@
<name>AddressBookPage</name>
<message>
<source>Right-click to edit address or label</source>
<translation>Кликните правой кнопкой мыши для редоктирования адреса или ярлыка</translation>
<translation>Кликните правой кнопкой мыши для редактирования адреса или метки</translation>
</message>
<message>
<source>Create a new address</source>
@@ -15,7 +15,7 @@
</message>
<message>
<source>Copy the currently selected address to the system clipboard</source>
<translation>Copy the currently selected address to the system clipboardый адрес в буфер</translation>
<translation>Скопировать текущий выбранный адрес в буфер обмена системы</translation>
</message>
<message>
<source>&amp;Copy</source>
@@ -41,6 +41,14 @@
<source>&amp;Delete</source>
<translation>Удалить</translation>
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>Выбрать адрес для отправки монет</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Выбрать адрес для получения монет</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>

File diff suppressed because it is too large Load Diff

View File

@@ -540,7 +540,11 @@ Var vänlig och försök igen.</translation>
<source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
<translation>Denna plånbok är &lt;b&gt;krypterad&lt;/b&gt; och för närvarande &lt;b&gt;låst&lt;/b&gt;</translation>
</message>
</context>
<message>
<source>A fatal error occurred. Bitcoin can no longer continue safely and will quit.</source>
<translation>Ett kritiskt fel uppstod. Bitcoin kan inte fortsätta att köra säkert och kommer att avslutas.</translation>
</message>
</context>
<context>
<name>CoinControlDialog</name>
<message>
@@ -679,7 +683,7 @@ Var vänlig och försök igen.</translation>
</message>
<message>
<source>Directory already exists. Add %1 if you intend to create a new directory here.</source>
<translation>Katalogen finns redan. Läggtill %1 om du vill skapa en ny katalog här.</translation>
<translation>Katalogen finns redan. Lägg till %1 om du vill skapa en ny katalog här.</translation>
</message>
<message>
<source>Path already exists, and is not a directory.</source>
@@ -2099,6 +2103,18 @@ Var vänlig och försök igen.</translation>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Enter address or label to search</source>
<translation>Ange en adress eller etikett att söka efter</translation>
</message>
<message>
<source>Min amount</source>
<translation>Minsta belopp</translation>
</message>
<message>
<source>Abandon transaction</source>
<translation>Avbryt transaktionen</translation>
</message>
<message>
<source>Copy address</source>
<translation>Kopiera adress</translation>

View File

@@ -295,15 +295,15 @@
</message>
<message>
<source>&amp;Encrypt Wallet...</source>
<translation>Cüzdanı &amp;Şifrele...</translation>
<translation>&amp;Cüzdanı Şifrele...</translation>
</message>
<message>
<source>&amp;Backup Wallet...</source>
<translation>Cüzdanı &amp;Yedekle...</translation>
<translation>&amp;Cüzdanı Yedekle...</translation>
</message>
<message>
<source>&amp;Change Passphrase...</source>
<translation>Parolayı &amp;Değiştir...</translation>
<translation>&amp;Parolayı Değiştir...</translation>
</message>
<message>
<source>&amp;Sending addresses...</source>

View File

@@ -41,10 +41,62 @@
<source>&amp;Delete</source>
<translation>&amp;Видалити</translation>
</message>
</context>
<message>
<source>Choose the address to send coins to</source>
<translation>Оберіть адресу для відправки монет</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Оберіть адресу для отримання монет</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>О&amp;брати</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Адреса відправлення</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Адреса отримання</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation>Зкопіювати&amp;Створити мітку</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Редагувати</translation>
</message>
<message>
<source>Export Address List</source>
<translation>Експотувати список адрес</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Файли (*.csv) розділеі комами</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Експортування пройшло не успішно</translation>
</message>
<message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation>Виникла помилка при спрбі збереження списку адрес %1. Будь-ласка, спробувати пізніше. </translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation>Мітка</translation>
</message>
<message>
<source>(no label)</source>
<translation>(немає мітки)</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -410,6 +462,10 @@
<source>Confirmed</source>
<translation>Підтверджені</translation>
</message>
<message>
<source>(no label)</source>
<translation>немає мітки</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -1270,9 +1326,21 @@
<source>&amp;Save Image...</source>
<translation>&amp;Зберегти зображення...</translation>
</message>
<message>
<source>Label</source>
<translation>Мітка</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Label</source>
<translation>Мітка</translation>
</message>
<message>
<source>(no label)</source>
<translation>немає мітки</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
@@ -1416,7 +1484,11 @@
<source>S&amp;end</source>
<translation>&amp;Відправити</translation>
</message>
</context>
<message>
<source>(no label)</source>
<translation>немає мітки</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
<message>
@@ -1619,9 +1691,29 @@
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Label</source>
<translation>Мітка</translation>
</message>
<message>
<source>(no label)</source>
<translation>немає мітки</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Файли (*.csv) розділеі комами</translation>
</message>
<message>
<source>Label</source>
<translation>Мітка</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Експортування пройшло не успішно</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -41,9 +41,25 @@
<source>&amp;Delete</source>
<translation>مٹا</translation>
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>کوئین وصول کرنے والے کا پتہ</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>کوئین وصول کرنے والے کا پتہ</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>چننا</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
<message>
<source>Address</source>
<translation> پتہ</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
@@ -152,6 +168,10 @@
<source>Copy &amp;Address</source>
<translation>کاپی پتہ</translation>
</message>
<message>
<source>Address</source>
<translation> پتہ</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
@@ -200,6 +220,10 @@
</context>
<context>
<name>TransactionView</name>
<message>
<source>Address</source>
<translation> پتہ</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>

View File

@@ -41,6 +41,26 @@
<source>&amp;Delete</source>
<translation>&amp;&amp;a</translation>
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>Chọn đa chỉ đ gửi coin đến</translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation>Chọn đa chỉ đ nhận coin</translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation>Chọn</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Đa chỉ gửi đến</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Đa chỉ nhận</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>

View File

@@ -3240,6 +3240,10 @@
<source>Wallet %s resides outside data directory %s</source>
<translation>钱包 %s 在外部的数据目录 %s</translation>
</message>
<message>
<source>Wallet debugging/testing options:</source>
<translation>钱包调试/测试选项:</translation>
</message>
<message>
<source>Wallet options:</source>
<translation>钱包选项:</translation>

View File

@@ -41,10 +41,70 @@
<source>&amp;Delete</source>
<translation> &amp;D</translation>
</message>
</context>
<message>
<source>Choose the address to send coins to</source>
<translation></translation>
</message>
<message>
<source>Choose the address to receive coins with</source>
<translation></translation>
</message>
<message>
<source>C&amp;hoose</source>
<translation> &amp;h</translation>
</message>
<message>
<source>Sending addresses</source>
<translation></translation>
</message>
<message>
<source>Receiving addresses</source>
<translation></translation>
</message>
<message>
<source>&amp;Copy Address</source>
<translation> &amp;C</translation>
</message>
<message>
<source>Copy &amp;Label</source>
<translation> &amp;L</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation> &amp;E</translation>
</message>
<message>
<source>Export Address List</source>
<translation></translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation> (*.csv)</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation></translation>
</message>
<message>
<source>There was an error trying to save the address list to %1. Please try again.</source>
<translation> %1 </translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
</context>
<message>
<source>Label</source>
<translation></translation>
</message>
<message>
<source>Address</source>
<translation></translation>
</message>
<message>
<source>(no label)</source>
<translation>()</translation>
</message>
</context>
<context>
<name>AskPassphraseDialog</name>
<message>
@@ -63,7 +123,91 @@
<source>Repeat new passphrase</source>
<translation></translation>
</message>
</context>
<message>
<source>Encrypt wallet</source>
<translation></translation>
</message>
<message>
<source>This operation needs your wallet passphrase to unlock the wallet.</source>
<translation></translation>
</message>
<message>
<source>Unlock wallet</source>
<translation></translation>
</message>
<message>
<source>This operation needs your wallet passphrase to decrypt the wallet.</source>
<translation></translation>
</message>
<message>
<source>Decrypt wallet</source>
<translation></translation>
</message>
<message>
<source>Change passphrase</source>
<translation></translation>
</message>
<message>
<source>Enter the old passphrase and new passphrase to the wallet.</source>
<translation></translation>
</message>
<message>
<source>Confirm wallet encryption</source>
<translation></translation>
</message>
<message>
<source>Warning: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!</source>
<translation>警告: 如果你將錢包加密後又忘記密碼&lt;b&gt; Bitcoin &lt;/b&gt;</translation>
</message>
<message>
<source>Are you sure you wish to encrypt your wallet?</source>
<translation></translation>
</message>
<message>
<source>Wallet encrypted</source>
<translation></translation>
</message>
<message>
<source>%1 will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
<translation>%1 Bitcoins </translation>
</message>
<message>
<source>IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet.</source>
<translation>重要: 請改用新產生的加密錢包檔使使</translation>
</message>
<message>
<source>Wallet encryption failed</source>
<translation></translation>
</message>
<message>
<source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
<translation></translation>
</message>
<message>
<source>The supplied passphrases do not match.</source>
<translation></translation>
</message>
<message>
<source>Wallet unlock failed</source>
<translation></translation>
</message>
<message>
<source>The passphrase entered for the wallet decryption was incorrect.</source>
<translation></translation>
</message>
<message>
<source>Wallet decryption failed</source>
<translation></translation>
</message>
<message>
<source>Wallet passphrase was successfully changed.</source>
<translation></translation>
</message>
<message>
<source>Warning: The Caps Lock key is on!</source>
<translation>警告: Caps Lock </translation>
</message>
</context>
<context>
<name>BanTableModel</name>
<message>
@@ -113,6 +257,14 @@
<source>Quit application</source>
<translation></translation>
</message>
<message>
<source>&amp;About %1</source>
<translation> %1 &amp;A</translation>
</message>
<message>
<source>Show information about %1</source>
<translation> %1 </translation>
</message>
<message>
<source>About &amp;Qt</source>
<translation> Qt &amp;Q</translation>
@@ -125,6 +277,10 @@
<source>&amp;Options...</source>
<translation>... &amp;O</translation>
</message>
<message>
<source>Modify configuration options for %1</source>
<translation> %1 </translation>
</message>
<message>
<source>&amp;Encrypt Wallet...</source>
<translation>... &amp;E</translation>
@@ -201,9 +357,51 @@
<source>Show or hide the main Window</source>
<translation></translation>
</message>
<message>
<source>&amp;File</source>
<translation> &amp;F</translation>
</message>
<message>
<source>&amp;Settings</source>
<translation> &amp;S</translation>
</message>
<message>
<source>&amp;Help</source>
<translation> &amp;H</translation>
</message>
<message>
<source>Request payments (generates QR codes and bitcoin: URIs)</source>
<translation> (QR碼 bitcoin: URIs)</translation>
</message>
<message>
<source>Indexing blocks on disk...</source>
<translation>...</translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Warning</source>
<translation></translation>
</message>
<message>
<source>Information</source>
<translation></translation>
</message>
<message>
<source>Date: %1
</source>
<translation>: %1
</translation>
</message>
</context>
<context>
<name>CoinControlDialog</name>
<message>
<source>(no label)</source>
<translation>()</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
@@ -216,6 +414,10 @@
</context>
<context>
<name>Intro</name>
<message>
<source>Error</source>
<translation></translation>
</message>
</context>
<context>
<name>ModalOverlay</name>
@@ -237,28 +439,144 @@
</context>
<context>
<name>QObject</name>
<message>
<source>Enter a Bitcoin address (e.g. %1)</source>
<translation> Bitcoin ( %1)</translation>
</message>
<message>
<source>%1 d</source>
<translation>%1 </translation>
</message>
<message>
<source>%1 h</source>
<translation>%1 </translation>
</message>
<message>
<source>%1 m</source>
<translation>%1 </translation>
</message>
<message>
<source>%1 s</source>
<translation>%1 </translation>
</message>
<message>
<source>None</source>
<translation></translation>
</message>
<message>
<source>N/A</source>
<translation>N/A</translation>
</message>
<message>
<source>%1 ms</source>
<translation>%1 </translation>
</message>
<message numerus="yes">
<source>%n second(s)</source>
<translation><numerusform>%n </numerusform></translation>
</message>
<message numerus="yes">
<source>%n minute(s)</source>
<translation><numerusform>%n </numerusform></translation>
</message>
<message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n </numerusform></translation>
</message>
<message numerus="yes">
<source>%n day(s)</source>
<translation><numerusform>%n </numerusform></translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%n </numerusform></translation>
</message>
<message>
<source>%1 and %2</source>
<translation>%1 %2</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n </numerusform></translation>
</message>
</context>
<context>
<name>QObject::QObject</name>
</context>
<context>
<name>QRImageWidget</name>
</context>
<message>
<source>Save QR Code</source>
<translation> QR </translation>
</message>
<message>
<source>PNG Image (*.png)</source>
<translation>PNG (*.png)</translation>
</message>
</context>
<context>
<name>RPCConsole</name>
<message>
<source>N/A</source>
<translation>N/A</translation>
</message>
<message>
<source>&amp;Information</source>
<translation> &amp;I</translation>
</message>
<message>
<source>Debug window</source>
<translation></translation>
</message>
<message>
<source>General</source>
<translation></translation>
</message>
<message>
<source>Received</source>
<translation></translation>
</message>
<message>
<source>Sent</source>
<translation></translation>
</message>
<message>
<source>Version</source>
<translation></translation>
</message>
</context>
<context>
<name>ReceiveCoinsDialog</name>
</context>
<context>
<name>ReceiveRequestDialog</name>
<message>
<source>Address</source>
<translation></translation>
</message>
<message>
<source>Label</source>
<translation></translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Label</source>
<translation></translation>
</message>
<message>
<source>(no label)</source>
<translation>()</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
</context>
<message>
<source>(no label)</source>
<translation>()</translation>
</message>
</context>
<context>
<name>SendCoinsEntry</name>
</context>
@@ -279,15 +597,47 @@
</context>
<context>
<name>TransactionDesc</name>
<message>
<source>Open until %1</source>
<translation> %1</translation>
</message>
</context>
<context>
<name>TransactionDescDialog</name>
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Label</source>
<translation></translation>
</message>
<message>
<source>Open until %1</source>
<translation> %1</translation>
</message>
<message>
<source>(no label)</source>
<translation>()</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>Comma separated file (*.csv)</source>
<translation> (*.csv)</translation>
</message>
<message>
<source>Label</source>
<translation></translation>
</message>
<message>
<source>Address</source>
<translation></translation>
</message>
<message>
<source>Exporting Failed</source>
<translation></translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>
@@ -303,5 +653,17 @@
</context>
<context>
<name>bitcoin-core</name>
</context>
<message>
<source>Information</source>
<translation></translation>
</message>
<message>
<source>Warning</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
</context>
</TS>

View File

@@ -55,8 +55,6 @@ const char* BIP70_MESSAGE_PAYMENTREQUEST = "PaymentRequest";
const char* BIP71_MIMETYPE_PAYMENT = "application/bitcoin-payment";
const char* BIP71_MIMETYPE_PAYMENTACK = "application/bitcoin-paymentack";
const char* BIP71_MIMETYPE_PAYMENTREQUEST = "application/bitcoin-paymentrequest";
// BIP70 max payment request size in bytes (DoS protection)
const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE = 50000;
struct X509StoreDeleter {
void operator()(X509_STORE* b) {

View File

@@ -53,7 +53,7 @@ class QUrl;
QT_END_NAMESPACE
// BIP70 max payment request size in bytes (DoS protection)
extern const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE;
static const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE = 50000;
class PaymentServer : public QObject
{

View File

@@ -166,7 +166,7 @@ QVariant PeerTableModel::data(const QModelIndex &index, int role) const
switch(index.column())
{
case NetNodeId:
return rec->nodeStats.nodeid;
return (qint64)rec->nodeStats.nodeid;
case Address:
return QString::fromStdString(rec->nodeStats.addrName);
case Subversion:

View File

@@ -175,6 +175,10 @@ bool RPCConsole::RPCParseCommandLine(std::string &strResult, const std::string &
nDepthInsideSensitive = 1;
filter_begin_pos = chpos;
}
// Make sure stack is not empty before adding something
if (stack.empty()) {
stack.push_back(std::vector<std::string>());
}
stack.back().push_back(strArg);
};
@@ -1111,7 +1115,7 @@ void RPCConsole::disconnectSelectedNode()
for(int i = 0; i < nodes.count(); i++)
{
// Get currently selected peer address
NodeId id = nodes.at(i).data().toInt();
NodeId id = nodes.at(i).data().toLongLong();
// Find the node, disconnect it and clear the selected node
if(g_connman->DisconnectNode(id))
clearSelectedNode();
@@ -1128,7 +1132,7 @@ void RPCConsole::banSelectedNode(int bantime)
for(int i = 0; i < nodes.count(); i++)
{
// Get currently selected peer address
NodeId id = nodes.at(i).data().toInt();
NodeId id = nodes.at(i).data().toLongLong();
// Get currently selected peer address
int detailNodeRow = clientModel->getPeerTableModel()->getRowByNodeId(id);

View File

@@ -83,7 +83,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
{ "getblockheader", 1, "verbose" },
{ "gettransaction", 1, "include_watchonly" },
{ "getrawtransaction", 1, "verbose" },
{ "createrawtransaction", 0, "transactions" },
{ "createrawtransaction", 0, "inputs" },
{ "createrawtransaction", 1, "outputs" },
{ "createrawtransaction", 2, "locktime" },
{ "signrawtransaction", 1, "prevtxs" },

View File

@@ -519,12 +519,22 @@ UniValue getblocktemplate(const JSONRPCRequest& request)
// TODO: Maybe recheck connections/IBD and (if something wrong) send an expires-immediately template to stop miners?
}
const struct BIP9DeploymentInfo& segwit_info = VersionBitsDeploymentInfo[Consensus::DEPLOYMENT_SEGWIT];
// If the caller is indicating segwit support, then allow CreateNewBlock()
// to select witness transactions, after segwit activates (otherwise
// don't).
bool fSupportsSegwit = setClientRules.find(segwit_info.name) != setClientRules.end();
// Update block
static CBlockIndex* pindexPrev;
static int64_t nStart;
static std::unique_ptr<CBlockTemplate> pblocktemplate;
// Cache whether the last invocation was with segwit support, to avoid returning
// a segwit-block to a non-segwit caller.
static bool fLastTemplateSupportsSegwit = true;
if (pindexPrev != chainActive.Tip() ||
(mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 5))
(mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 5) ||
fLastTemplateSupportsSegwit != fSupportsSegwit)
{
// Clear pindexPrev so future calls make a new block, despite any failures from here on
pindexPrev = nullptr;
@@ -533,10 +543,11 @@ UniValue getblocktemplate(const JSONRPCRequest& request)
nTransactionsUpdatedLast = mempool.GetTransactionsUpdated();
CBlockIndex* pindexPrevNew = chainActive.Tip();
nStart = GetTime();
fLastTemplateSupportsSegwit = fSupportsSegwit;
// Create new block
CScript scriptDummy = CScript() << OP_TRUE;
pblocktemplate = BlockAssembler(Params()).CreateNewBlock(scriptDummy);
pblocktemplate = BlockAssembler(Params()).CreateNewBlock(scriptDummy, fSupportsSegwit);
if (!pblocktemplate)
throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory");
@@ -676,14 +687,17 @@ UniValue getblocktemplate(const JSONRPCRequest& request)
nSigOpLimit /= WITNESS_SCALE_FACTOR;
}
result.push_back(Pair("sigoplimit", nSigOpLimit));
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SERIALIZED_SIZE));
result.push_back(Pair("weightlimit", (int64_t)MAX_BLOCK_WEIGHT));
if (fPreSegWit) {
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_BASE_SIZE));
} else {
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SERIALIZED_SIZE));
result.push_back(Pair("weightlimit", (int64_t)MAX_BLOCK_WEIGHT));
}
result.push_back(Pair("curtime", pblock->GetBlockTime()));
result.push_back(Pair("bits", strprintf("%08x", pblock->nBits)));
result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1)));
const struct BIP9DeploymentInfo& segwit_info = VersionBitsDeploymentInfo[Consensus::DEPLOYMENT_SEGWIT];
if (!pblocktemplate->vchCoinbaseCommitment.empty() && setClientRules.find(segwit_info.name) != setClientRules.end()) {
if (!pblocktemplate->vchCoinbaseCommitment.empty() && fSupportsSegwit) {
result.push_back(Pair("default_witness_commitment", HexStr(pblocktemplate->vchCoinbaseCommitment.begin(), pblocktemplate->vchCoinbaseCommitment.end())));
}
@@ -734,6 +748,10 @@ UniValue submitblock(const JSONRPCRequest& request)
if (!DecodeHexBlk(block, request.params[0].get_str()))
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed");
if (block.vtx.empty() || !block.vtx[0]->IsCoinBase()) {
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block does not start with a coinbase");
}
uint256 hash = block.GetHash();
bool fBlockPresent = false;
{

View File

@@ -347,11 +347,11 @@ UniValue verifymessage(const JSONRPCRequest& request)
"\nUnlock the wallet for 30 seconds\n"
+ HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") +
"\nCreate the signature\n"
+ HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") +
+ HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") +
"\nVerify the signature\n"
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") +
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") +
"\nAs json rpc\n"
+ HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"signature\", \"my message\"")
+ HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"signature\", \"my message\"")
);
LOCK(cs_main);
@@ -400,7 +400,7 @@ UniValue signmessagewithprivkey(const JSONRPCRequest& request)
"\nCreate the signature\n"
+ HelpExampleCli("signmessagewithprivkey", "\"privkey\" \"my message\"") +
"\nVerify the signature\n"
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") +
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") +
"\nAs json rpc\n"
+ HelpExampleRpc("signmessagewithprivkey", "\"privkey\", \"my message\"")
);

View File

@@ -237,11 +237,11 @@ UniValue addnode(const JSONRPCRequest& request)
UniValue disconnectnode(const JSONRPCRequest& request)
{
if (request.fHelp || request.params.size() != 1)
throw runtime_error(
"disconnectnode \"node\" \n"
throw std::runtime_error(
"disconnectnode \"address\" \n"
"\nImmediately disconnects from the specified node.\n"
"\nArguments:\n"
"1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n"
"1. \"address\" (string, required) The IP address/port of the node\n"
"\nExamples:\n"
+ HelpExampleCli("disconnectnode", "\"192.168.0.6:8333\"")
+ HelpExampleRpc("disconnectnode", "\"192.168.0.6:8333\"")
@@ -609,7 +609,7 @@ static const CRPCCommand commands[] =
{ "network", "ping", &ping, true, {} },
{ "network", "getpeerinfo", &getpeerinfo, true, {} },
{ "network", "addnode", &addnode, true, {"node","command"} },
{ "network", "disconnectnode", &disconnectnode, true, {"node"} },
{ "network", "disconnectnode", &disconnectnode, true, {"address"} },
{ "network", "getaddednodeinfo", &getaddednodeinfo, true, {"node"} },
{ "network", "getnettotals", &getnettotals, true, {} },
{ "network", "getnetworkinfo", &getnetworkinfo, true, {} },

View File

@@ -139,7 +139,7 @@ UniValue getrawtransaction(const JSONRPCRequest& request)
"\nArguments:\n"
"1. \"txid\" (string, required) The transaction id\n"
"2. verbose (bool, optional, default=false) If true, return a string, other return a json object\n"
"2. verbose (bool, optional, default=false) If false, return a string, otherwise return a json object\n"
"\nResult (if verbose is not set or set to false):\n"
"\"data\" (string) The serialized, hex-encoded data for 'txid'\n"
@@ -245,7 +245,6 @@ UniValue gettxoutproof(const JSONRPCRequest& request)
"unspent output in the utxo for this transaction. To make it always work,\n"
"you need to maintain a transaction index, using the -txindex command line option or\n"
"specify the block in which the transaction is included manually (by blockhash).\n"
"\nReturn the raw transaction data.\n"
"\nArguments:\n"
"1. \"txids\" (string) A json array of txids to filter\n"
" [\n"
@@ -362,7 +361,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request)
"it is not stored in the wallet or transmitted to the network.\n"
"\nArguments:\n"
"1. \"inputs\" (string, required) A json array of json objects\n"
"1. \"inputs\" (array, required) A json array of json objects\n"
" [\n"
" {\n"
" \"txid\":\"id\", (string, required) The transaction id\n"
@@ -371,7 +370,7 @@ UniValue createrawtransaction(const JSONRPCRequest& request)
" } \n"
" ,...\n"
" ]\n"
"2. \"outputs\" (string, required) a json object with outputs\n"
"2. \"outputs\" (object, required) a json object with outputs\n"
" {\n"
" \"address\": x.xxx, (numeric or string, required) The key is the bitcoin address, the numeric value (can be string) is the " + CURRENCY_UNIT + " amount\n"
" \"data\": \"hex\" (string, required) The key is \"data\", the value is hex encoded data\n"
@@ -933,7 +932,7 @@ static const CRPCCommand commands[] =
{ // category name actor (function) okSafeMode
// --------------------- ------------------------ ----------------------- ----------
{ "rawtransactions", "getrawtransaction", &getrawtransaction, true, {"txid","verbose"} },
{ "rawtransactions", "createrawtransaction", &createrawtransaction, true, {"transactions","outputs","locktime"} },
{ "rawtransactions", "createrawtransaction", &createrawtransaction, true, {"inputs","outputs","locktime"} },
{ "rawtransactions", "decoderawtransaction", &decoderawtransaction, true, {"hexstring"} },
{ "rawtransactions", "decodescript", &decodescript, true, {"hexstring"} },
{ "rawtransactions", "sendrawtransaction", &sendrawtransaction, false, {"hexstring","allowhighfees"} },

View File

@@ -18,8 +18,6 @@
#include <boost/bind.hpp>
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include <boost/iostreams/concepts.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/signals2/signal.hpp>
#include <boost/thread.hpp>
@@ -333,6 +331,7 @@ void StopRPC()
{
LogPrint("rpc", "Stopping RPC\n");
deadlineTimers.clear();
DeleteAuthCookie();
g_rpcSignals.Stopped();
}

View File

@@ -98,6 +98,18 @@ def bctest(testDir, testObj, exeext):
logging.error("Return code mismatch for " + outputFn)
raise Exception
if "error_txt" in testObj:
want_error = testObj["error_txt"]
# Compare error text
# TODO: ideally, we'd compare the strings exactly and also assert
# That stderr is empty if no errors are expected. However, bitcoin-tx
# emits DISPLAY errors when running as a windows application on
# linux through wine. Just assert that the expected error text appears
# somewhere in stderr.
if want_error not in outs[1]:
logging.error("Error mismatch:\n" + "Expected: " + want_error + "\nReceived: " + outs[1].rstrip())
raise Exception
def bctester(testDir, input_basename, buildenv):
""" Loads and parses the input file, runs all tests and reports results"""
input_filename = testDir + "/" + input_basename

View File

@@ -42,6 +42,7 @@
"args": ["-", "delin=31"],
"input": "tx394b54bb.hex",
"return_code": 1,
"error_txt": "error: Invalid TX input index '31'",
"description": "Attempts to delete an input with a bad index from a transaction. Expected to fail."
},
{ "exec": "./bitcoin-tx",
@@ -60,6 +61,7 @@
"args": ["-", "delout=2"],
"input": "tx394b54bb.hex",
"return_code": 1,
"error_txt": "error: Invalid TX output index '2'",
"description": "Attempts to delete an output with a bad index from a transaction. Expected to fail."
},
{ "exec": "./bitcoin-tx",
@@ -74,6 +76,38 @@
"output_cmp": "tt-locktime317000-out.json",
"description": "Adds an nlocktime to a transaction (output in json)"
},
{ "exec": "./bitcoin-tx",
"args":
["-create",
"outaddr=1"],
"return_code": 1,
"error_txt": "error: TX output missing or too many separators",
"description": "Malformed outaddr argument (no address specified). Expected to fail."
},
{ "exec": "./bitcoin-tx",
"args":
["-create",
"outaddr=1:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o:garbage"],
"return_code": 1,
"error_txt": "error: TX output missing or too many separators",
"description": "Malformed outaddr argument (too many separators). Expected to fail."
},
{ "exec": "./bitcoin-tx",
"args":
["-create",
"outpubkey=0"],
"return_code": 1,
"error_txt": "error: TX output missing or too many separators",
"description": "Malformed outpubkey argument (no pubkey specified). Expected to fail."
},
{ "exec": "./bitcoin-tx",
"args":
["-create",
"outpubkey=0:02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397:W:non53nse"],
"return_code": 1,
"error_txt": "error: TX output missing or too many separators",
"description": "Malformed outpubkey argument (too many separators). Expected to fail."
},
{ "exec": "./bitcoin-tx",
"args":
["-create",
@@ -233,6 +267,7 @@
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"outdata=4:badhexdata"],
"return_code": 1,
"error_txt": "error: invalid TX output data",
"description": "Attempts to create a new transaction with one input and an output with malformed hex data. Expected to fail"
},
{ "exec": "./bitcoin-tx",
@@ -241,6 +276,7 @@
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"outdata=badhexdata"],
"return_code": 1,
"error_txt": "error: invalid TX output data",
"description": "Attempts to create a new transaction with one input and an output with no value and malformed hex data. Expected to fail"
},
{ "exec": "./bitcoin-tx",

View File

@@ -21,8 +21,14 @@ class CBlockIndex;
class CCoinsViewDBCursor;
class uint256;
//! Compensate for extra memory peak (x1.5-x1.9) at flush time.
static constexpr int DB_PEAK_USAGE_FACTOR = 2;
//! No need to periodic flush if at least this much space still available.
static constexpr int MAX_BLOCK_COINSDB_USAGE = 200 * DB_PEAK_USAGE_FACTOR;
//! Always periodic flush if less than this much space still available.
static constexpr int MIN_BLOCK_COINSDB_USAGE = 50 * DB_PEAK_USAGE_FACTOR;
//! -dbcache default (MiB)
static const int64_t nDefaultDbCache = 300;
static const int64_t nDefaultDbCache = 450;
//! max. -dbcache (MiB)
static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024;
//! min. -dbcache (MiB)

View File

@@ -938,6 +938,13 @@ void CTxMemPool::PrioritiseTransaction(const uint256 hash, const std::string str
BOOST_FOREACH(txiter ancestorIt, setAncestors) {
mapTx.modify(ancestorIt, update_descendant_state(0, nFeeDelta, 0));
}
// Now update all descendants' modified fees with ancestors
setEntries setDescendants;
CalculateDescendants(it, setDescendants);
setDescendants.erase(it);
BOOST_FOREACH(txiter descendantIt, setDescendants) {
mapTx.modify(descendantIt, update_ancestor_state(0, nFeeDelta, 0, 0));
}
}
}
LogPrintf("PrioritiseTransaction: %s priority += %f, fee += %d\n", strHash, dPriorityDelta, FormatMoney(nFeeDelta));

View File

@@ -72,6 +72,10 @@
#include <sys/prctl.h>
#endif
#ifdef HAVE_MALLOPT_ARENA_MAX
#include <malloc.h>
#endif
#include <boost/algorithm/string/case_conv.hpp> // for to_lower()
#include <boost/algorithm/string/join.hpp>
#include <boost/algorithm/string/predicate.hpp> // for startswith() and endswith()
@@ -214,12 +218,13 @@ void OpenDebugLog()
assert(vMsgsBeforeOpenLog);
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
fileout = fopen(pathDebug.string().c_str(), "a");
if (fileout) setbuf(fileout, NULL); // unbuffered
// dump buffered messages from before we opened the log
while (!vMsgsBeforeOpenLog->empty()) {
FileWriteStr(vMsgsBeforeOpenLog->front(), fileout);
vMsgsBeforeOpenLog->pop_front();
if (fileout) {
setbuf(fileout, NULL); // unbuffered
// dump buffered messages from before we opened the log
while (!vMsgsBeforeOpenLog->empty()) {
FileWriteStr(vMsgsBeforeOpenLog->front(), fileout);
vMsgsBeforeOpenLog->pop_front();
}
}
delete vMsgsBeforeOpenLog;
@@ -791,6 +796,16 @@ void RenameThread(const char* name)
void SetupEnvironment()
{
#ifdef HAVE_MALLOPT_ARENA_MAX
// glibc-specific: On 32-bit systems set the number of arenas to 1.
// By default, since glibc 2.10, the C library will create up to two heap
// arenas per core. This is known to cause excessive virtual address space
// usage in our usage. Work around it by setting the maximum number of
// arenas to 1.
if (sizeof(void*) == 4) {
mallopt(M_ARENA_MAX, 1);
}
#endif
// On most POSIX systems (e.g. Linux, but not BSD) the environment's locale
// may be invalid, in which case the "C" locale is used as fallback.
#if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
@@ -838,4 +853,4 @@ std::string CopyrightHolders(const std::string& strPrefix)
strCopyrightHolders += "\n" + strPrefix + "The Bitcoin Core developers";
}
return strCopyrightHolders;
}
}

View File

@@ -2027,10 +2027,11 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n
nLastSetChain = nNow;
}
int64_t nMempoolSizeMax = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
int64_t cacheSize = pcoinsTip->DynamicMemoryUsage();
int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * DB_PEAK_USAGE_FACTOR;
int64_t nTotalSpace = nCoinCacheUsage + std::max<int64_t>(nMempoolSizeMax - nMempoolUsage, 0);
// The cache is large and we're within 10% and 100 MiB of the limit, but we have time now (not in the middle of a block processing).
bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - 100 * 1024 * 1024);
// The cache is large and we're within 10% and 200 MiB or 50% and 50MiB of the limit, but we have time now (not in the middle of a block processing).
bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::min(std::max(nTotalSpace / 2, nTotalSpace - MIN_BLOCK_COINSDB_USAGE * 1024 * 1024),
std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024));
// The cache is over the limit, we have to write now.
bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nTotalSpace;
// It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash.
@@ -2922,9 +2923,11 @@ bool IsWitnessEnabled(const CBlockIndex* pindexPrev, const Consensus::Params& pa
static int GetWitnessCommitmentIndex(const CBlock& block)
{
int commitpos = -1;
for (size_t o = 0; o < block.vtx[0]->vout.size(); o++) {
if (block.vtx[0]->vout[o].scriptPubKey.size() >= 38 && block.vtx[0]->vout[o].scriptPubKey[0] == OP_RETURN && block.vtx[0]->vout[o].scriptPubKey[1] == 0x24 && block.vtx[0]->vout[o].scriptPubKey[2] == 0xaa && block.vtx[0]->vout[o].scriptPubKey[3] == 0x21 && block.vtx[0]->vout[o].scriptPubKey[4] == 0xa9 && block.vtx[0]->vout[o].scriptPubKey[5] == 0xed) {
commitpos = o;
if (!block.vtx.empty()) {
for (size_t o = 0; o < block.vtx[0]->vout.size(); o++) {
if (block.vtx[0]->vout[o].scriptPubKey.size() >= 38 && block.vtx[0]->vout[o].scriptPubKey[0] == OP_RETURN && block.vtx[0]->vout[o].scriptPubKey[1] == 0x24 && block.vtx[0]->vout[o].scriptPubKey[2] == 0xaa && block.vtx[0]->vout[o].scriptPubKey[3] == 0x21 && block.vtx[0]->vout[o].scriptPubKey[4] == 0xa9 && block.vtx[0]->vout[o].scriptPubKey[5] == 0xed) {
commitpos = o;
}
}
}
return commitpos;
@@ -3331,7 +3334,7 @@ void PruneOneBlockFile(const int fileNumber)
}
void UnlinkPrunedFiles(std::set<int>& setFilesToPrune)
void UnlinkPrunedFiles(const std::set<int>& setFilesToPrune)
{
for (std::set<int>::iterator it = setFilesToPrune.begin(); it != setFilesToPrune.end(); ++it) {
CDiskBlockPos pos(*it, 0);
@@ -4163,6 +4166,11 @@ std::string CBlockFileInfo::ToString() const
return strprintf("CBlockFileInfo(blocks=%u, size=%u, heights=%u...%u, time=%s...%s)", nBlocks, nSize, nHeightFirst, nHeightLast, DateTimeStrFormat("%Y-%m-%d", nTimeFirst), DateTimeStrFormat("%Y-%m-%d", nTimeLast));
}
CBlockFileInfo* GetBlockFileInfo(size_t n)
{
return &vinfoBlockFile.at(n);
}
ThresholdState VersionBitsTipState(const Consensus::Params& params, Consensus::DeploymentPos pos)
{
LOCK(cs_main);
@@ -4180,7 +4188,7 @@ static const uint64_t MEMPOOL_DUMP_VERSION = 1;
bool LoadMempool(void)
{
int64_t nExpiryTimeout = GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60;
FILE* filestr = fopen((GetDataDir() / "mempool.dat").string().c_str(), "r");
FILE* filestr = fopen((GetDataDir() / "mempool.dat").string().c_str(), "rb");
CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);
if (file.IsNull()) {
LogPrintf("Failed to open mempool file from disk. Continuing anyway.\n");
@@ -4261,7 +4269,7 @@ void DumpMempool(void)
int64_t mid = GetTimeMicros();
try {
FILE* filestr = fopen((GetDataDir() / "mempool.dat.new").string().c_str(), "w");
FILE* filestr = fopen((GetDataDir() / "mempool.dat.new").string().c_str(), "wb");
if (!filestr) {
return;
}

View File

@@ -299,10 +299,15 @@ double GuessVerificationProgress(const ChainTxData& data, CBlockIndex* pindex);
*/
void FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfterHeight);
/**
* Mark one block file as pruned.
*/
void PruneOneBlockFile(const int fileNumber);
/**
* Actually unlink the specified files
*/
void UnlinkPrunedFiles(std::set<int>& setFilesToPrune);
void UnlinkPrunedFiles(const std::set<int>& setFilesToPrune);
/** Create a new block index entry for a given block hash */
CBlockIndex * InsertBlockIndex(uint256 hash);
@@ -562,6 +567,9 @@ static const unsigned int REJECT_ALREADY_KNOWN = 0x101;
/** Transaction conflicts with a transaction already known */
static const unsigned int REJECT_CONFLICT = 0x102;
/** Get block file info entry for one block file */
CBlockFileInfo* GetBlockFileInfo(size_t n);
/** Dump the mempool to disk. */
void DumpMempool();

View File

@@ -17,7 +17,7 @@ const struct BIP9DeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION
},
{
/*.name =*/ "segwit",
/*.gbt_force =*/ false,
/*.gbt_force =*/ true,
}
};

View File

@@ -96,6 +96,8 @@ UniValue importprivkey(const JSONRPCRequest& request)
+ HelpExampleCli("importprivkey", "\"mykey\"") +
"\nImport using a label and without rescan\n"
+ HelpExampleCli("importprivkey", "\"mykey\" \"testing\" false") +
"\nImport using default blank label and without rescan\n"
+ HelpExampleCli("importprivkey", "\"mykey\" \"\" false") +
"\nAs a JSON-RPC call\n"
+ HelpExampleRpc("importprivkey", "\"mykey\", \"testing\", false")
);
@@ -495,14 +497,11 @@ UniValue importwallet(const JSONRPCRequest& request)
}
file.close();
pwalletMain->ShowProgress("", 100); // hide progress dialog in GUI
CBlockIndex *pindex = chainActive.Tip();
while (pindex && pindex->pprev && pindex->GetBlockTime() > nTimeBegin - 7200)
pindex = pindex->pprev;
pwalletMain->UpdateTimeFirstKey(nTimeBegin);
LogPrintf("Rescanning last %i blocks\n", chainActive.Height() - pindex->nHeight + 1);
CBlockIndex *pindex = chainActive.FindEarliestAtLeast(nTimeBegin - 7200);
LogPrintf("Rescanning last %i blocks\n", pindex ? chainActive.Height() - pindex->nHeight + 1 : 0);
pwalletMain->ScanForWalletTransactions(pindex);
pwalletMain->MarkDirty();
@@ -1072,13 +1071,35 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
}
}
if (fRescan && fRunScan && requests.size() && nLowestTimestamp <= chainActive.Tip()->GetBlockTimeMax()) {
if (fRescan && fRunScan && requests.size()) {
CBlockIndex* pindex = nLowestTimestamp > minimumTimestamp ? chainActive.FindEarliestAtLeast(std::max<int64_t>(nLowestTimestamp - 7200, 0)) : chainActive.Genesis();
CBlockIndex* scannedRange = nullptr;
if (pindex) {
pwalletMain->ScanForWalletTransactions(pindex, true);
scannedRange = pwalletMain->ScanForWalletTransactions(pindex, true);
pwalletMain->ReacceptWalletTransactions();
}
if (!scannedRange || scannedRange->nHeight > pindex->nHeight) {
std::vector<UniValue> results = response.getValues();
response.clear();
response.setArray();
size_t i = 0;
for (const UniValue& request : requests.getValues()) {
// If key creation date is within the successfully scanned
// range, or if the import result already has an error set, let
// the result stand unmodified. Otherwise replace the result
// with an error message.
if (GetImportTimestamp(request, now) - 7200 >= scannedRange->GetBlockTimeMax() || results.at(i).exists("error")) {
response.push_back(results.at(i));
} else {
UniValue result = UniValue(UniValue::VOBJ);
result.pushKV("success", UniValue(false));
result.pushKV("error", JSONRPCError(RPC_MISC_ERROR, strprintf("Failed to rescan before time %d, transactions may be missing.", scannedRange->GetBlockTimeMax())));
response.push_back(std::move(result));
}
++i;
}
}
}
return response;

View File

@@ -236,8 +236,8 @@ UniValue setaccount(const JSONRPCRequest& request)
"1. \"address\" (string, required) The bitcoin address to be associated with an account.\n"
"2. \"account\" (string, required) The account to assign the address to.\n"
"\nExamples:\n"
+ HelpExampleCli("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"tabby\"")
+ HelpExampleRpc("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"tabby\"")
+ HelpExampleCli("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"tabby\"")
+ HelpExampleRpc("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"tabby\"")
);
LOCK2(cs_main, pwalletMain->cs_wallet);
@@ -283,8 +283,8 @@ UniValue getaccount(const JSONRPCRequest& request)
"\nResult:\n"
"\"accountname\" (string) the account address\n"
"\nExamples:\n"
+ HelpExampleCli("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"")
+ HelpExampleRpc("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"")
+ HelpExampleCli("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"")
+ HelpExampleRpc("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"")
);
LOCK2(cs_main, pwalletMain->cs_wallet);
@@ -503,11 +503,11 @@ UniValue signmessage(const JSONRPCRequest& request)
"\nUnlock the wallet for 30 seconds\n"
+ HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") +
"\nCreate the signature\n"
+ HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") +
+ HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"") +
"\nVerify the signature\n"
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") +
+ HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"") +
"\nAs json rpc\n"
+ HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"my message\"")
+ HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"my message\"")
);
LOCK2(cs_main, pwalletMain->cs_wallet);
@@ -556,13 +556,13 @@ UniValue getreceivedbyaddress(const JSONRPCRequest& request)
"amount (numeric) The total amount in " + CURRENCY_UNIT + " received at this address.\n"
"\nExamples:\n"
"\nThe amount from transactions with at least 1 confirmation\n"
+ HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") +
+ HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"") +
"\nThe amount including unconfirmed transactions, zero confirmations\n"
+ HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 0") +
+ HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" 0") +
"\nThe amount with at least 6 confirmation, very safe\n"
+ HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 6") +
+ HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" 6") +
"\nAs a json rpc call\n"
+ HelpExampleRpc("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", 6")
+ HelpExampleRpc("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", 6")
);
LOCK2(cs_main, pwalletMain->cs_wallet);
@@ -819,6 +819,9 @@ UniValue sendfrom(const JSONRPCRequest& request)
+ HelpRequiringPassphrase() + "\n"
"\nArguments:\n"
"1. \"fromaccount\" (string, required) The name of the account to send funds from. May be the default account using \"\".\n"
" Specifying an account does not influence coin selection, but it does associate the newly created\n"
" transaction with the account, so the account's balance computation and transaction history can reflect\n"
" the spend.\n"
"2. \"toaddress\" (string, required) The bitcoin address to send funds to.\n"
"3. amount (numeric or string, required) The amount in " + CURRENCY_UNIT + " (transaction fee is added on top).\n"
"4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n"
@@ -903,13 +906,13 @@ UniValue sendmany(const JSONRPCRequest& request)
" the number of addresses.\n"
"\nExamples:\n"
"\nSend two amounts to two different addresses:\n"
+ HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\"") +
+ HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\"") +
"\nSend two amounts to two different addresses setting the confirmation and comment:\n"
+ HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 6 \"testing\"") +
+ HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 6 \"testing\"") +
"\nSend two amounts to two different addresses, subtract fee from amount:\n"
+ HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 1 \"\" \"[\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\",\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\"]\"") +
+ HelpExampleCli("sendmany", "\"\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 1 \"\" \"[\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\",\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\"]\"") +
"\nAs a json rpc call\n"
+ HelpExampleRpc("sendmany", "\"\", \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\", 6, \"testing\"")
+ HelpExampleRpc("sendmany", "\"\", \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\", 6, \"testing\"")
);
LOCK2(cs_main, pwalletMain->cs_wallet);

View File

@@ -9,10 +9,18 @@
#include <utility>
#include <vector>
#include "rpc/server.h"
#include "test/test_bitcoin.h"
#include "validation.h"
#include "wallet/test/wallet_test_fixture.h"
#include <boost/foreach.hpp>
#include <boost/test/unit_test.hpp>
#include <univalue.h>
extern UniValue importmulti(const JSONRPCRequest& request);
extern UniValue dumpwallet(const JSONRPCRequest& request);
extern UniValue importwallet(const JSONRPCRequest& request);
// how many times to run all the tests to have a chance to catch errors that only show up with particular random shuffles
#define RUN_TESTS 100
@@ -355,4 +363,131 @@ BOOST_AUTO_TEST_CASE(ApproximateBestSubset)
empty_wallet();
}
BOOST_FIXTURE_TEST_CASE(rescan, TestChain100Setup)
{
LOCK(cs_main);
// Cap last block file size, and mine new block in a new block file.
CBlockIndex* oldTip = chainActive.Tip();
GetBlockFileInfo(oldTip->GetBlockPos().nFile)->nSize = MAX_BLOCKFILE_SIZE;
CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey()));
CBlockIndex* newTip = chainActive.Tip();
// Verify ScanForWalletTransactions picks up transactions in both the old
// and new block files.
{
CWallet wallet;
LOCK(wallet.cs_wallet);
wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
BOOST_CHECK_EQUAL(oldTip, wallet.ScanForWalletTransactions(oldTip));
BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 100 * COIN);
}
// Prune the older block file.
PruneOneBlockFile(oldTip->GetBlockPos().nFile);
UnlinkPrunedFiles({oldTip->GetBlockPos().nFile});
// Verify ScanForWalletTransactions only picks transactions in the new block
// file.
{
CWallet wallet;
LOCK(wallet.cs_wallet);
wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
BOOST_CHECK_EQUAL(newTip, wallet.ScanForWalletTransactions(oldTip));
BOOST_CHECK_EQUAL(wallet.GetImmatureBalance(), 50 * COIN);
}
// Verify importmulti RPC returns failure for a key whose creation time is
// before the missing block, and success for a key whose creation time is
// after.
{
CWallet wallet;
CWallet *backup = ::pwalletMain;
::pwalletMain = &wallet;
UniValue keys;
keys.setArray();
UniValue key;
key.setObject();
key.pushKV("scriptPubKey", HexStr(GetScriptForRawPubKey(coinbaseKey.GetPubKey())));
key.pushKV("timestamp", 0);
key.pushKV("internal", UniValue(true));
keys.push_back(key);
key.clear();
key.setObject();
CKey futureKey;
futureKey.MakeNewKey(true);
key.pushKV("scriptPubKey", HexStr(GetScriptForRawPubKey(futureKey.GetPubKey())));
key.pushKV("timestamp", newTip->GetBlockTimeMax() + 7200);
key.pushKV("internal", UniValue(true));
keys.push_back(key);
JSONRPCRequest request;
request.params.setArray();
request.params.push_back(keys);
UniValue response = importmulti(request);
BOOST_CHECK_EQUAL(response.write(), strprintf("[{\"success\":false,\"error\":{\"code\":-1,\"message\":\"Failed to rescan before time %d, transactions may be missing.\"}},{\"success\":true}]", newTip->GetBlockTimeMax()));
::pwalletMain = backup;
}
}
// Verify importwallet RPC starts rescan at earliest block with timestamp
// greater or equal than key birthday. Previously there was a bug where
// importwallet RPC would start the scan at the latest block with timestamp less
// than or equal to key birthday.
BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
{
CWallet *pwalletMainBackup = ::pwalletMain;
LOCK(cs_main);
// Create two blocks with same timestamp to verify that importwallet rescan
// will pick up both blocks, not just the first.
const int64_t BLOCK_TIME = chainActive.Tip()->GetBlockTimeMax() + 5;
SetMockTime(BLOCK_TIME);
coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
// Set key birthday to block time increased by the timestamp window, so
// rescan will start at the block time.
const int64_t KEY_TIME = BLOCK_TIME + 7200;
SetMockTime(KEY_TIME);
coinbaseTxns.emplace_back(*CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey())).vtx[0]);
// Import key into wallet and call dumpwallet to create backup file.
{
CWallet wallet;
LOCK(wallet.cs_wallet);
wallet.mapKeyMetadata[coinbaseKey.GetPubKey().GetID()].nCreateTime = KEY_TIME;
wallet.AddKeyPubKey(coinbaseKey, coinbaseKey.GetPubKey());
JSONRPCRequest request;
request.params.setArray();
request.params.push_back("wallet.backup");
::pwalletMain = &wallet;
::dumpwallet(request);
}
// Call importwallet RPC and verify all blocks with timestamps >= BLOCK_TIME
// were scanned, and no prior blocks were scanned.
{
CWallet wallet;
JSONRPCRequest request;
request.params.setArray();
request.params.push_back("wallet.backup");
::pwalletMain = &wallet;
::importwallet(request);
BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3);
BOOST_CHECK_EQUAL(coinbaseTxns.size(), 103);
for (size_t i = 0; i < coinbaseTxns.size(); ++i) {
bool found = wallet.GetWalletTx(coinbaseTxns[i].GetHash());
bool expected = i >= 100;
BOOST_CHECK_EQUAL(found, expected);
}
}
SetMockTime(0);
::pwalletMain = pwalletMainBackup;
}
BOOST_AUTO_TEST_SUITE_END()

Some files were not shown because too many files have changed in this diff Show More