Compare commits

...

99 Commits

Author SHA1 Message Date
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
87 changed files with 4407 additions and 469 deletions

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, 1)
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

@@ -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.1
# 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.1
=====================
Setup

View File

@@ -1,4 +1,4 @@
Bitcoin Core 0.13.99
Bitcoin Core 0.14.1
=====================
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

@@ -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" "February 2017" "bitcoin-cli v0.14.0.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.0.0
.SH DESCRIPTION
Bitcoin Core RPC client version v0.13.0.0
Bitcoin Core RPC client version v0.14.0.0\-dirty
.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" "February 2017" "bitcoin-qt v0.14.0.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.0.0
.SH DESCRIPTION
Bitcoin Core version v0.13.0.0 (64\-bit)
Bitcoin Core version v0.14.0.0\-dirty (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
@@ -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" "February 2017" "bitcoin-tx v0.14.0.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.0.0
.SH DESCRIPTION
Bitcoin Core bitcoin\-tx utility version v0.13.0.0
Bitcoin Core bitcoin\-tx utility version v0.14.0.0\-dirty
.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" "February 2017" "bitcoind v0.14.0.0" "User Commands"
.SH NAME
bitcoind \- manual page for bitcoind v0.13.0.0
bitcoind \- manual page for bitcoind v0.14.0.0
.SH DESCRIPTION
Bitcoin Core Daemon version v0.13.0.0
Bitcoin Core Daemon version v0.14.0.0\-dirty
.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
@@ -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.1 is now available from:
Bitcoin Core version *version* is now available from:
<https://bitcoin.org/bin/bitcoin-core-0.14.1/>
<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,50 @@ frequently tested on them.
Notable changes
===============
Low-level RPC 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
------
Getblocktemplate sets the segwit version bit even when the downstream
client has not been updated to include the segwit commitment. Ability
to enforce the rule is the only required criteria for safe activation,
but previously signaling was only requested if the miner could include
transactions in order to avoid a potential outcome where segwit would
activate at a time when no segwit transactions could be included.
Since many miners are now including the segwit commitment this concern
no longer applies.
UTXO memory accounting
----------------------
- `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.
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.
Fee Estimation Changes
----------------------
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.
- 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.
Additional information relating to running on low-memory systems can be found
here:
[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7).
- The default target for fee estimation is changed to 6 blocks in both the GUI
(previously 25) and for RPC calls (previously 2).
Removal of Priority Estimation
-------------------------------
- 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.1 Change log
=================
Detailed release notes follow. This overview includes changes that affect
@@ -106,48 +81,59 @@ 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
### 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
### Validation
- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt)
- #10176 `30fa231` net: gracefully handle NodeId wrapping (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.
- #9973 `e9611d1` depends: fix zlib build on osx (theuni)
### GUI
- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101)
### Tests
### 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

@@ -469,7 +469,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 =

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 1
#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

@@ -2318,9 +2318,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 +2344,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

@@ -518,7 +518,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

@@ -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>

View File

@@ -43,7 +43,7 @@
</message>
<message>
<source>Choose the address to send coins to</source>
<translation>Wählen Sie die Adresse aus, an die Sie Bitcoins überweisen möchten</translation>
<translation>Wählen Sie die Adresse aus, an die Sie Bitcoins senden möchten</translation>
</message>
<message>
<source>Choose the address to receive coins with</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,6 +41,14 @@
<source>&amp;Delete</source>
<translation>&amp;Διαγραφή</translation>
</message>
<message>
<source>Sending addresses</source>
<translation>Διευθύνσεις αποστολής</translation>
</message>
<message>
<source>Receiving addresses</source>
<translation>Διευθύνσεις λήψης</translation>
</message>
</context>
<context>
<name>AddressTableModel</name>
@@ -63,6 +71,10 @@
<source>Repeat new passphrase</source>
<translation>Επανέλαβε τον νέο κωδικό πρόσβασης</translation>
</message>
<message>
<source>Unlock wallet</source>
<translation>Ξεκλειδωσε το πορτοφολι</translation>
</message>
</context>
<context>
<name>BanTableModel</name>

View File

@@ -304,12 +304,12 @@
<translation>Sign &amp;message...</translation>
</message>
<message>
<location line="+427"/>
<location line="+430"/>
<source>Synchronizing with network...</source>
<translation>Synchronizing with network...</translation>
</message>
<message>
<location line="-505"/>
<location line="-508"/>
<source>&amp;Overview</source>
<translation>&amp;Overview</translation>
</message>
@@ -404,7 +404,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+357"/>
<location line="+360"/>
<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="-511"/>
<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="+517"/>
<source>Bitcoin</source>
<translation>Bitcoin</translation>
</message>
<message>
<location line="-739"/>
<location line="-742"/>
<source>Wallet</source>
<translation>Wallet</translation>
</message>
@@ -549,7 +549,7 @@
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location line="+354"/>
<location line="+357"/>
<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="-441"/>
<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="+200"/>
<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

@@ -115,6 +115,10 @@
<source>Decrypt wallet</source>
<translation>رمزگشایی کیف پول</translation>
</message>
<message>
<source>Change passphrase</source>
<translation>تغییر گذرواژه</translation>
</message>
<message>
<source>Confirm wallet encryption</source>
<translation>تأیید رمزنگاری کیف پول</translation>
@@ -506,6 +510,10 @@
<source>Confirmed</source>
<translation>تأیید شده</translation>
</message>
<message>
<source>Copy address</source>
<translation>کپی ادرس</translation>
</message>
<message>
<source>Copy label</source>
<translation>کپی برچسب</translation>
@@ -530,6 +538,10 @@
<source>Copy quantity</source>
<translation>کپی تعداد</translation>
</message>
<message>
<source>Copy fee</source>
<translation>رونوشت کارمزد</translation>
</message>
<message>
<source>(%1 locked)</source>
<translation>(%1 قفل شده)</translation>
@@ -697,6 +709,10 @@
<source>Form</source>
<translation>فرم</translation>
</message>
<message>
<source>Unknown...</source>
<translation>مشخص نیست</translation>
</message>
<message>
<source>Last block time</source>
<translation>زمان آخرین بلوک</translation>
@@ -1328,6 +1344,10 @@
<source>Copy amount</source>
<translation>کپی مقدار</translation>
</message>
<message>
<source>Copy fee</source>
<translation>رونوشت کارمزد</translation>
</message>
<message>
<source>(no label)</source>
<translation>(بدون برچسب)</translation>
@@ -1514,6 +1534,10 @@
</context>
<context>
<name>TransactionView</name>
<message>
<source>Copy address</source>
<translation>کپی ادرس</translation>
</message>
<message>
<source>Copy label</source>
<translation>کپی برچسب</translation>

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>

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

@@ -562,11 +562,75 @@
<source>Confirmed</source>
<translation>Confermato</translation>
</message>
<message>
<source>Copy address</source>
<translation>Copia indirizzo</translation>
</message>
<message>
<source>Copy label</source>
<translation>Copia etichetta</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copia l'importo</translation>
</message>
<message>
<source>Copy transaction ID</source>
<translation>Copia l'ID transazione</translation>
</message>
<message>
<source>Lock unspent</source>
<translation>Bloccare non spesi</translation>
</message>
<message>
<source>Unlock unspent</source>
<translation>Sbloccare non spesi</translation>
</message>
<message>
<source>Copy quantity</source>
<translation>Copia quantità</translation>
</message>
<message>
<source>Copy fee</source>
<translation>Copia commissione</translation>
</message>
<message>
<source>Copy after fee</source>
<translation>Copia dopo commissione</translation>
</message>
<message>
<source>Copy bytes</source>
<translation>Copia byte</translation>
</message>
<message>
<source>Copy dust</source>
<translation>Copia trascurabile</translation>
</message>
<message>
<source>Copy change</source>
<translation>Copia resto</translation>
</message>
<message>
<source>(%1 locked)</source>
<translation>(%1 bloccato)</translation>
</message>
<message>
<source>yes</source>
<translation></translation>
</message>
<message>
<source>no</source>
<translation>no</translation>
</message>
<message>
<source>(no label)</source>
<translation>(nessuna etichetta)</translation>
</message>
</context>
<message>
<source>(change)</source>
<translation>(resto)</translation>
</message>
</context>
<context>
<name>EditAddressDialog</name>
<message>
@@ -702,6 +766,10 @@
<source>Error</source>
<translation>Errore</translation>
</message>
<message numerus="yes">
<source>%n GB of free space available</source>
<translation><numerusform>GB di spazio libero disponibile</numerusform><numerusform>%n GB di spazio disponibile</numerusform></translation>
</message>
<message numerus="yes">
<source>(of %n GB needed)</source>
<translation><numerusform>(di %nGB richiesti)</numerusform><numerusform>(%n GB richiesti)</numerusform></translation>
@@ -713,6 +781,10 @@
<source>Form</source>
<translation>Modulo</translation>
</message>
<message>
<source>Unknown...</source>
<translation>Sconosciuto...</translation>
</message>
<message>
<source>Last block time</source>
<translation>Ora del blocco più recente</translation>
@@ -1054,6 +1126,14 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
</context>
<context>
<name>PaymentServer</name>
<message>
<source>Payment request expired.</source>
<translation>Richiesta di pagamento scaduta.</translation>
</message>
<message>
<source>Invalid payment request.</source>
<translation>Richiesta di pagamento invalida</translation>
</message>
</context>
<context>
<name>PeerTableModel</name>
@@ -1065,7 +1145,11 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>Node/Service</source>
<translation>Nodo/Servizio</translation>
</message>
</context>
<message>
<source>Ping</source>
<translation>Ping</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
@@ -1104,17 +1188,49 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>%1 ms</source>
<translation>%1 ms</translation>
</message>
<message numerus="yes">
<source>%n second(s)</source>
<translation><numerusform>%n secondo</numerusform><numerusform>%n secondi</numerusform></translation>
</message>
<message numerus="yes">
<source>%n minute(s)</source>
<translation><numerusform>%n minuto</numerusform><numerusform>%n minuti</numerusform></translation>
</message>
<message numerus="yes">
<source>%n hour(s)</source>
<translation><numerusform>%n ora</numerusform><numerusform>%n ore</numerusform></translation>
</message>
<message numerus="yes">
<source>%n day(s)</source>
<translation><numerusform>%n giorno</numerusform><numerusform>%n giorni</numerusform></translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%n settimana</numerusform><numerusform>%n settimane</numerusform></translation>
</message>
<message>
<source>%1 and %2</source>
<translation>%1 e %2</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
<translation><numerusform>%n anno</numerusform><numerusform>%n anni</numerusform></translation>
</message>
</context>
<context>
<name>QObject::QObject</name>
</context>
<message>
<source>Error: %1</source>
<translation>Errore: %1</translation>
</message>
</context>
<context>
<name>QRImageWidget</name>
</context>
<message>
<source>PNG Image (*.png)</source>
<translation>Immagine PNG (*.png)</translation>
</message>
</context>
<context>
<name>RPCConsole</name>
<message>
@@ -1464,7 +1580,23 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>Remove</source>
<translation>Rimuovi</translation>
</message>
</context>
<message>
<source>Copy URI</source>
<translation>Copia URI</translation>
</message>
<message>
<source>Copy label</source>
<translation>Copia etichetta</translation>
</message>
<message>
<source>Copy message</source>
<translation>Copia il messaggio</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copia l'importo</translation>
</message>
</context>
<context>
<name>ReceiveRequestDialog</name>
<message>
@@ -1483,26 +1615,58 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>&amp;Save Image...</source>
<translation>&amp;Salva Immagine...</translation>
</message>
<message>
<source>URI</source>
<translation>URI</translation>
</message>
<message>
<source>Address</source>
<translation>Indirizzo</translation>
</message>
<message>
<source>Amount</source>
<translation>Importo</translation>
</message>
<message>
<source>Label</source>
<translation>Etichetta</translation>
</message>
<message>
<source>Message</source>
<translation>Messaggio</translation>
</message>
</context>
<context>
<name>RecentRequestsTableModel</name>
<message>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<source>Label</source>
<translation>Etichetta</translation>
</message>
<message>
<source>Message</source>
<translation>Messaggio</translation>
</message>
<message>
<source>(no label)</source>
<translation>(nessuna etichetta)</translation>
</message>
</context>
<message>
<source>(no message)</source>
<translation>(nessun messaggio)</translation>
</message>
<message>
<source>(no amount requested)</source>
<translation>(nessun importo richiesto)</translation>
</message>
<message>
<source>Requested</source>
<translation>Richiesto</translation>
</message>
</context>
<context>
<name>SendCoinsDialog</name>
<message>
@@ -1645,6 +1809,54 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>S&amp;end</source>
<translation>&amp;Invia</translation>
</message>
<message>
<source>Copy quantity</source>
<translation>Copia quantità</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copia l'importo</translation>
</message>
<message>
<source>Copy fee</source>
<translation>Copia commissione</translation>
</message>
<message>
<source>Copy after fee</source>
<translation>Copia dopo commissione</translation>
</message>
<message>
<source>Copy bytes</source>
<translation>Copia byte</translation>
</message>
<message>
<source>Copy dust</source>
<translation>Copia trascurabile</translation>
</message>
<message>
<source>Copy change</source>
<translation>Copia resto</translation>
</message>
<message>
<source>%1 to %2</source>
<translation>%1 a %2</translation>
</message>
<message>
<source>Payment request expired.</source>
<translation>Richiesta di pagamento scaduta.</translation>
</message>
<message numerus="yes">
<source>%n block(s)</source>
<translation><numerusform>%n blocco</numerusform><numerusform>%n blocchi</numerusform></translation>
</message>
<message>
<source>Warning: Invalid Bitcoin address</source>
<translation>Attenzione: Indirizzo Bitcoin non valido</translation>
</message>
<message>
<source>Warning: Unknown change address</source>
<translation>Attenzione: Indirizzo per il resto sconosciuto</translation>
</message>
<message>
<source>(no label)</source>
<translation>(nessuna etichetta)</translation>
@@ -1731,7 +1943,11 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
</context>
<context>
<name>SendConfirmationDialog</name>
</context>
<message>
<source>Yes</source>
<translation>Si</translation>
</message>
</context>
<context>
<name>ShutdownWindow</name>
<message>
@@ -1829,7 +2045,55 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>Reset all verify message fields</source>
<translation>Reimposta tutti i campi della verifica messaggio</translation>
</message>
</context>
<message>
<source>The entered address is invalid.</source>
<translation>L'indirizzo inserito non è valido.</translation>
</message>
<message>
<source>Please check the address and try again.</source>
<translation>Per favore controlla l'indirizzo e prova di nuovo.</translation>
</message>
<message>
<source>The entered address does not refer to a key.</source>
<translation>L'indirizzo bitcoin inserito non è associato a nessuna chiave.</translation>
</message>
<message>
<source>Wallet unlock was cancelled.</source>
<translation>Sblocco del portamonete annullato.</translation>
</message>
<message>
<source>Private key for the entered address is not available.</source>
<translation>La chiave privata per l'indirizzo inserito non è disponibile.</translation>
</message>
<message>
<source>Message signing failed.</source>
<translation>Firma messaggio fallita.</translation>
</message>
<message>
<source>Message signed.</source>
<translation>Messaggio firmato.</translation>
</message>
<message>
<source>The signature could not be decoded.</source>
<translation>Non è stato possibile decodificare la firma.</translation>
</message>
<message>
<source>Please check the signature and try again.</source>
<translation>Per favore controlla la firma e prova di nuovo.</translation>
</message>
<message>
<source>The signature did not match the message digest.</source>
<translation>La firma non corrisponde al digest del messaggio.</translation>
</message>
<message>
<source>Message verification failed.</source>
<translation>Verifica messaggio fallita.</translation>
</message>
<message>
<source>Message verified.</source>
<translation>Messaggio verificato.</translation>
</message>
</context>
<context>
<name>SplashScreen</name>
<message>
@@ -1846,7 +2110,123 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
</context>
<context>
<name>TransactionDesc</name>
</context>
<message>
<source>%1/offline</source>
<translation>%1/offline</translation>
</message>
<message>
<source>Status</source>
<translation>Stato</translation>
</message>
<message>
<source>, has not been successfully broadcast yet</source>
<translation>, non è ancora stata trasmessa con successo</translation>
</message>
<message>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<source>Source</source>
<translation>Sorgente</translation>
</message>
<message>
<source>Generated</source>
<translation>Generato</translation>
</message>
<message>
<source>From</source>
<translation>Da</translation>
</message>
<message>
<source>unknown</source>
<translation>sconosciuto</translation>
</message>
<message>
<source>To</source>
<translation>A</translation>
</message>
<message>
<source>own address</source>
<translation>proprio indirizzo</translation>
</message>
<message>
<source>watch-only</source>
<translation>sola lettura</translation>
</message>
<message>
<source>label</source>
<translation>etichetta</translation>
</message>
<message>
<source>Credit</source>
<translation>Credito</translation>
</message>
<message>
<source>not accepted</source>
<translation>non accettate</translation>
</message>
<message>
<source>Debit</source>
<translation>Debito</translation>
</message>
<message>
<source>Total debit</source>
<translation>Debito totale</translation>
</message>
<message>
<source>Total credit</source>
<translation>Credito totale</translation>
</message>
<message>
<source>Transaction fee</source>
<translation>Commissione transazione</translation>
</message>
<message>
<source>Net amount</source>
<translation>Importo netto</translation>
</message>
<message>
<source>Message</source>
<translation>Messaggio</translation>
</message>
<message>
<source>Comment</source>
<translation>Commento</translation>
</message>
<message>
<source>Transaction ID</source>
<translation>ID della transazione</translation>
</message>
<message>
<source>Merchant</source>
<translation>Commerciante</translation>
</message>
<message>
<source>Debug information</source>
<translation>Informazione di debug</translation>
</message>
<message>
<source>Transaction</source>
<translation>Transazione</translation>
</message>
<message>
<source>Inputs</source>
<translation>Input</translation>
</message>
<message>
<source>Amount</source>
<translation>Importo</translation>
</message>
<message>
<source>true</source>
<translation>vero</translation>
</message>
<message>
<source>false</source>
<translation>falso</translation>
</message>
</context>
<context>
<name>TransactionDescDialog</name>
<message>
@@ -1856,21 +2236,201 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
</context>
<context>
<name>TransactionTableModel</name>
<message>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<source>Type</source>
<translation>Tipo</translation>
</message>
<message>
<source>Label</source>
<translation>Etichetta</translation>
</message>
<message>
<source>Offline</source>
<translation>Offline</translation>
</message>
<message>
<source>Unconfirmed</source>
<translation>Non confermata</translation>
</message>
<message>
<source>Confirmed (%1 confirmations)</source>
<translation>Confermata (%1 conferme)</translation>
</message>
<message>
<source>This block was not received by any other nodes and will probably not be accepted!</source>
<translation>Questo blocco non è stato ricevuto da alcun altro nodo e probabilmente non sarà accettato!</translation>
</message>
<message>
<source>Generated but not accepted</source>
<translation>Generati, ma non accettati</translation>
</message>
<message>
<source>Received with</source>
<translation>Ricevuto tramite</translation>
</message>
<message>
<source>Sent to</source>
<translation>Inviato a</translation>
</message>
<message>
<source>Payment to yourself</source>
<translation>Pagamento a te stesso</translation>
</message>
<message>
<source>Mined</source>
<translation>Ottenuto dal mining</translation>
</message>
<message>
<source>watch-only</source>
<translation>sola lettura</translation>
</message>
<message>
<source>(n/a)</source>
<translation>(n/d)</translation>
</message>
<message>
<source>(no label)</source>
<translation>(nessuna etichetta)</translation>
</message>
</context>
<message>
<source>Transaction status. Hover over this field to show number of confirmations.</source>
<translation>Stato della transazione. Passare con il mouse su questo campo per visualizzare il numero di conferme.</translation>
</message>
<message>
<source>Date and time that the transaction was received.</source>
<translation>Data e ora in cui la transazione è stata ricevuta.</translation>
</message>
<message>
<source>Type of transaction.</source>
<translation>Tipo di transazione.</translation>
</message>
<message>
<source>Whether or not a watch-only address is involved in this transaction.</source>
<translation>Indica se un indirizzo di sola lettura sia o meno coinvolto in questa transazione.</translation>
</message>
<message>
<source>User-defined intent/purpose of the transaction.</source>
<translation>Intento/scopo della transazione definito dall'utente.</translation>
</message>
<message>
<source>Amount removed from or added to balance.</source>
<translation>Importo rimosso o aggiunto al saldo.</translation>
</message>
</context>
<context>
<name>TransactionView</name>
<message>
<source>All</source>
<translation>Tutti</translation>
</message>
<message>
<source>Today</source>
<translation>Oggi</translation>
</message>
<message>
<source>This week</source>
<translation>Questa settimana</translation>
</message>
<message>
<source>This month</source>
<translation>Questo mese</translation>
</message>
<message>
<source>Last month</source>
<translation>Il mese scorso</translation>
</message>
<message>
<source>This year</source>
<translation>Quest'anno</translation>
</message>
<message>
<source>Range...</source>
<translation>Intervallo...</translation>
</message>
<message>
<source>Received with</source>
<translation>Ricevuto tramite</translation>
</message>
<message>
<source>Sent to</source>
<translation>Inviato a</translation>
</message>
<message>
<source>To yourself</source>
<translation>A te stesso</translation>
</message>
<message>
<source>Mined</source>
<translation>Ottenuto dal mining</translation>
</message>
<message>
<source>Other</source>
<translation>Altro</translation>
</message>
<message>
<source>Enter address or label to search</source>
<translation>Inserisci un indirizzo o un'etichetta da cercare</translation>
</message>
<message>
<source>Min amount</source>
<translation>Importo minimo</translation>
</message>
<message>
<source>Copy address</source>
<translation>Copia indirizzo</translation>
</message>
<message>
<source>Copy label</source>
<translation>Copia etichetta</translation>
</message>
<message>
<source>Copy amount</source>
<translation>Copia l'importo</translation>
</message>
<message>
<source>Copy transaction ID</source>
<translation>Copia l'ID transazione</translation>
</message>
<message>
<source>Copy raw transaction</source>
<translation>Copia la transazione raw</translation>
</message>
<message>
<source>Edit label</source>
<translation>Modifica l'etichetta</translation>
</message>
<message>
<source>Show transaction details</source>
<translation>Mostra i dettagli della transazione</translation>
</message>
<message>
<source>Export Transaction History</source>
<translation>Esporta lo storico delle transazioni</translation>
</message>
<message>
<source>Comma separated file (*.csv)</source>
<translation>Testo CSV (*.csv)</translation>
</message>
<message>
<source>Confirmed</source>
<translation>Confermato</translation>
</message>
<message>
<source>Watch-only</source>
<translation>Sola lettura</translation>
</message>
<message>
<source>Date</source>
<translation>Data</translation>
</message>
<message>
<source>Type</source>
<translation>Tipo</translation>
</message>
<message>
<source>Label</source>
<translation>Etichetta</translation>
@@ -1879,11 +2439,35 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
<source>Address</source>
<translation>Indirizzo</translation>
</message>
<message>
<source>ID</source>
<translation>ID</translation>
</message>
<message>
<source>Exporting Failed</source>
<translation>Esportazione Fallita</translation>
</message>
</context>
<message>
<source>There was an error trying to save the transaction history to %1.</source>
<translation>Si è verificato un errore durante il salvataggio dello storico delle transazioni in %1.</translation>
</message>
<message>
<source>Exporting Successful</source>
<translation>Esportazione Riuscita</translation>
</message>
<message>
<source>The transaction history was successfully saved to %1.</source>
<translation>Lo storico delle transazioni e' stato salvato con successo in %1.</translation>
</message>
<message>
<source>Range:</source>
<translation>Intervallo:</translation>
</message>
<message>
<source>to</source>
<translation>a</translation>
</message>
</context>
<context>
<name>UnitDisplayStatusBarControl</name>
<message>
@@ -1893,13 +2477,53 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
</context>
<context>
<name>WalletFrame</name>
</context>
<message>
<source>No wallet has been loaded.</source>
<translation>Non è stato caricato alcun portamonete.</translation>
</message>
</context>
<context>
<name>WalletModel</name>
</context>
<message>
<source>Send Coins</source>
<translation>Invia Bitcoin</translation>
</message>
</context>
<context>
<name>WalletView</name>
</context>
<message>
<source>&amp;Export</source>
<translation>&amp;Esporta</translation>
</message>
<message>
<source>Export the data in the current tab to a file</source>
<translation>Esporta su file i dati contenuti nella tabella corrente</translation>
</message>
<message>
<source>Backup Wallet</source>
<translation>Backup Portamonete</translation>
</message>
<message>
<source>Wallet Data (*.dat)</source>
<translation>Dati Portamonete (*.dat)</translation>
</message>
<message>
<source>Backup Failed</source>
<translation>Backup Fallito</translation>
</message>
<message>
<source>There was an error trying to save the wallet data to %1.</source>
<translation>Si è verificato un errore durante il salvataggio dei dati del portamonete in %1.</translation>
</message>
<message>
<source>Backup Successful</source>
<translation>Backup eseguito con successo</translation>
</message>
<message>
<source>The wallet data was successfully saved to %1.</source>
<translation>Il portamonete è stato correttamente salvato in %1.</translation>
</message>
</context>
<context>
<name>bitcoin-core</name>
<message>

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>

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

@@ -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>

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

@@ -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

@@ -1072,13 +1072,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,16 @@
#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);
// 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 +361,71 @@ 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;
}
}
BOOST_AUTO_TEST_SUITE_END()

View File

@@ -1545,10 +1545,14 @@ void CWalletTx::GetAccountAmounts(const string& strAccount, CAmount& nReceived,
* Scan the block chain (starting in pindexStart) for transactions
* from or to us. If fUpdate is true, found transactions that already
* exist in the wallet will be updated.
*
* Returns pointer to the first block in the last contiguous range that was
* successfully scanned.
*
*/
int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
{
int ret = 0;
CBlockIndex* ret = nullptr;
int64_t nNow = GetTime();
const CChainParams& chainParams = Params();
@@ -1570,12 +1574,15 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((GuessVerificationProgress(chainParams.TxData(), pindex) - dProgressStart) / (dProgressTip - dProgressStart) * 100))));
CBlock block;
ReadBlockFromDisk(block, pindex, Params().GetConsensus());
int posInBlock;
for (posInBlock = 0; posInBlock < (int)block.vtx.size(); posInBlock++)
{
if (AddToWalletIfInvolvingMe(*block.vtx[posInBlock], pindex, posInBlock, fUpdate))
ret++;
if (ReadBlockFromDisk(block, pindex, Params().GetConsensus())) {
for (size_t posInBlock = 0; posInBlock < block.vtx.size(); ++posInBlock) {
AddToWalletIfInvolvingMe(*block.vtx[posInBlock], pindex, posInBlock, fUpdate);
}
if (!ret) {
ret = pindex;
}
} else {
ret = nullptr;
}
pindex = chainActive.Next(pindex);
if (GetTime() >= nNow + 60) {

View File

@@ -788,7 +788,7 @@ public:
bool LoadToWallet(const CWalletTx& wtxIn);
void SyncTransaction(const CTransaction& tx, const CBlockIndex *pindex, int posInBlock) override;
bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlockIndex* pIndex, int posInBlock, bool fUpdate);
int ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false);
CBlockIndex* ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false);
void ReacceptWalletTransactions();
void ResendWalletTransactions(int64_t nBestBlockTime, CConnman* connman) override;
std::vector<uint256> ResendWalletTransactionsBefore(int64_t nTime, CConnman* connman);