mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-22 16:14:50 +01:00
Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a402396dce | ||
|
|
5e499e7a56 | ||
|
|
40d705cb70 | ||
|
|
4f5529351f | ||
|
|
4374f0ee35 | ||
|
|
2f5858952e | ||
|
|
fe20b83ca9 | ||
|
|
7f84015352 | ||
|
|
b52c67c4b1 | ||
|
|
9058617afb | ||
|
|
8b0eee66e9 | ||
|
|
45c656b914 | ||
|
|
edc2c700a7 | ||
|
|
b49d963cf7 | ||
|
|
114f7e944b | ||
|
|
d485a6c5a8 | ||
|
|
cd0910b787 | ||
|
|
b8b97c98e8 | ||
|
|
6c083ac95c | ||
|
|
719208c66f | ||
|
|
3f65ba2b3b | ||
|
|
ced6c940da | ||
|
|
b06808c58e | ||
|
|
b7e201181b | ||
|
|
8360d5b37d | ||
|
|
c3c82c48d9 | ||
|
|
45eba4b1e0 | ||
|
|
0179a39f9d | ||
|
|
de45c065f0 | ||
|
|
f142c11ac6 | ||
|
|
18b8ee1cd1 | ||
|
|
cfd1280f23 | ||
|
|
4f7f531af6 | ||
|
|
f84ee3dab6 | ||
|
|
86edc20a17 | ||
|
|
73adfe3bb9 | ||
|
|
76bc30beab | ||
|
|
cbdbc75139 | ||
|
|
52a4158f1f | ||
|
|
66dde4edf7 | ||
|
|
ea91961899 | ||
|
|
f891e34cf9 | ||
|
|
ebea65121e | ||
|
|
f0ff08d784 | ||
|
|
48b92080a7 | ||
|
|
1fe7f40407 | ||
|
|
d6bb231a9f | ||
|
|
ec8f5fc8b5 | ||
|
|
24f117ef05 | ||
|
|
fca1a415ce | ||
|
|
ded0599281 | ||
|
|
a07c8a032c | ||
|
|
3b38a6a96a | ||
|
|
df854637b1 | ||
|
|
37269105c8 | ||
|
|
084d1ddf8f |
@@ -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, 12)
|
||||
define(_CLIENT_VERSION_REVISION, 99)
|
||||
define(_CLIENT_VERSION_MINOR, 13)
|
||||
define(_CLIENT_VERSION_REVISION, 0)
|
||||
define(_CLIENT_VERSION_BUILD, 0)
|
||||
define(_CLIENT_VERSION_IS_RELEASE, false)
|
||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||
define(_COPYRIGHT_YEAR, 2016)
|
||||
define(_COPYRIGHT_HOLDERS,[The %s developers])
|
||||
define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Bitcoin Core]])
|
||||
|
||||
@@ -4,6 +4,11 @@ $(package)_download_path=https://pypi.python.org/packages/source/b/biplist
|
||||
$(package)_file_name=biplist-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=b57cadfd26e4754efdf89e9e37de87885f9b5c847b2615688ca04adfaf6ca604
|
||||
$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages
|
||||
$(package)_patches=sorted_list.patch
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 < $($(package)_patch_dir)/sorted_list.patch
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
python setup.py build
|
||||
|
||||
29
depends/patches/native_biplist/sorted_list.patch
Normal file
29
depends/patches/native_biplist/sorted_list.patch
Normal file
@@ -0,0 +1,29 @@
|
||||
--- a/biplist/__init__.py 2014-10-26 19:03:11.000000000 +0000
|
||||
+++ b/biplist/__init__.py 2016-07-19 19:30:17.663521999 +0000
|
||||
@@ -541,7 +541,7 @@
|
||||
return HashableWrapper(n)
|
||||
elif isinstance(root, dict):
|
||||
n = {}
|
||||
- for key, value in iteritems(root):
|
||||
+ for key, value in sorted(iteritems(root)):
|
||||
n[self.wrapRoot(key)] = self.wrapRoot(value)
|
||||
return HashableWrapper(n)
|
||||
elif isinstance(root, list):
|
||||
@@ -616,7 +616,7 @@
|
||||
elif isinstance(obj, dict):
|
||||
size = proc_size(len(obj))
|
||||
self.incrementByteCount('dictBytes', incr=1+size)
|
||||
- for key, value in iteritems(obj):
|
||||
+ for key, value in sorted(iteritems(obj)):
|
||||
check_key(key)
|
||||
self.computeOffsets(key, asReference=True)
|
||||
self.computeOffsets(value, asReference=True)
|
||||
@@ -714,7 +714,7 @@
|
||||
keys = []
|
||||
values = []
|
||||
objectsToWrite = []
|
||||
- for key, value in iteritems(obj):
|
||||
+ for key, value in sorted(iteritems(obj)):
|
||||
keys.append(key)
|
||||
values.append(value)
|
||||
for key in keys:
|
||||
@@ -34,7 +34,7 @@ PROJECT_NAME = Bitcoin
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.12.99
|
||||
PROJECT_NUMBER = 0.13.0
|
||||
|
||||
# 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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Bitcoin Core 0.12.99
|
||||
Bitcoin Core 0.13.0
|
||||
=====================
|
||||
|
||||
Setup
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Bitcoin Core 0.12.99
|
||||
Bitcoin Core 0.13.0
|
||||
=====================
|
||||
|
||||
Intro
|
||||
|
||||
@@ -55,7 +55,7 @@ In the VirtualBox GUI click "New" and choose the following parameters in the wiz
|
||||
|
||||

|
||||
|
||||
- Memory Size: at least 1024MB, anything less will really slow down the build.
|
||||
- Memory Size: at least 3000MB, anything less and the build might not complete.
|
||||
|
||||

|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 22 KiB |
@@ -1,9 +1,6 @@
|
||||
(note: this is a temporary file, to be added-to by anybody, and moved to
|
||||
release-notes at release time)
|
||||
Bitcoin Core version 0.13.0 is now available from:
|
||||
|
||||
Bitcoin Core version *version* is now available from:
|
||||
|
||||
<https://bitcoin.org/bin/bitcoin-core-*version*/>
|
||||
<https://bitcoin.org/bin/bitcoin-core-0.13.0/>
|
||||
|
||||
This is a new major version release, including new features, various bugfixes
|
||||
and performance improvements, as well as updated translations.
|
||||
@@ -57,33 +54,27 @@ For nodes on low-memory systems, the database cache can be changed back to
|
||||
Note that the database cache setting has the most performance impact
|
||||
during initial sync of a node, and when catching up after downtime.
|
||||
|
||||
|
||||
bitcoin-cli: arguments privacy
|
||||
--------------------------------
|
||||
------------------------------
|
||||
|
||||
The RPC command line client gained a new argument, `-stdin`
|
||||
to read extra arguments from standard input, one per line until EOF/Ctrl-D.
|
||||
For example:
|
||||
|
||||
$ echo -e "mysecretcode\n120" | src/bitcoin-cli -stdin walletpassphrase
|
||||
$ src/bitcoin-cli -stdin walletpassphrase
|
||||
mysecretcode
|
||||
120
|
||||
..... press Ctrl-D here to end input
|
||||
$
|
||||
|
||||
It is recommended to use this for sensitive information such as wallet
|
||||
passphrases, as command-line arguments can usually be read from the process
|
||||
table by any user on the system.
|
||||
|
||||
RPC low-level changes
|
||||
----------------------
|
||||
|
||||
- `gettxoutsetinfo` UTXO hash (`hash_serialized`) has changed. There was a divergence between
|
||||
32-bit and 64-bit platforms, and the txids were missing in the hashed data. This has been
|
||||
fixed, but this means that the output will be different than from previous versions.
|
||||
|
||||
- Full UTF-8 support in the RPC API. Non-ASCII characters in, for example,
|
||||
wallet labels have always been malformed because they weren't taken into account
|
||||
properly in JSON RPC processing. This is no longer the case. This also affects
|
||||
the GUI debug console.
|
||||
|
||||
C++11 and Python 3
|
||||
-------------------
|
||||
------------------
|
||||
|
||||
Various code modernizations have been done. The Bitcoin Core code base has
|
||||
started using C++11. This means that a C++11-capable compiler is now needed for
|
||||
@@ -95,8 +86,9 @@ When cross-compiling for a target that doesn't have C++11 libraries, configure w
|
||||
For running the functional tests in `qa/rpc-tests`, Python3.4 or higher is now
|
||||
required.
|
||||
|
||||
|
||||
Linux ARM builds
|
||||
------------------
|
||||
----------------
|
||||
|
||||
Due to popular request, Linux ARM builds have been added to the uploaded
|
||||
executables.
|
||||
@@ -115,71 +107,27 @@ possible to resolve them.
|
||||
Note that Android is not considered ARM Linux in this context. The executables
|
||||
are not expected to work out of the box on Android.
|
||||
|
||||
0.13.0 Change log
|
||||
=================
|
||||
|
||||
Detailed release notes follow. This overview includes changes that affect
|
||||
behavior, not code moves, refactors and string updates. For convenience in locating
|
||||
the code changes and accompanying discussion, both the pull request and
|
||||
git merge commit are mentioned.
|
||||
Compact Block support (BIP 152)
|
||||
-------------------------------
|
||||
|
||||
### RPC and REST
|
||||
Support for block relay using the Compact Blocks protocol has been implemented
|
||||
in PR 8068.
|
||||
|
||||
Asm script outputs replacements for OP_NOP2 and OP_NOP3
|
||||
-------------------------------------------------------
|
||||
The primary goal is reducing the bandwidth spikes at relay time, though in many
|
||||
cases it also reduces propagation delay. It is automatically enabled between
|
||||
compatible peers.
|
||||
[BIP 152](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki)
|
||||
|
||||
OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP
|
||||
65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)
|
||||
As a side-effect, ordinary non-mining nodes will download and upload blocks
|
||||
faster if those blocks were produced by miners using similar transaction
|
||||
filtering policies. This means that a miner who produces a block with many
|
||||
transactions discouraged by your node will be relayed slower than one with
|
||||
only transactions already in your memory pool. The overall effect of such
|
||||
relay differences on the network may result in blocks which include widely-
|
||||
discouraged transactions losing a stale block race, and therefore miners may
|
||||
wish to configure their node to take common relay policies into consideration.
|
||||
|
||||
OP_NOP3 has been renamed to OP_CHECKSEQUENCEVERIFY by [BIP
|
||||
112](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki)
|
||||
|
||||
The following outputs are affected by this change:
|
||||
- RPC `getrawtransaction` (in verbose mode)
|
||||
- RPC `decoderawtransaction`
|
||||
- RPC `decodescript`
|
||||
- REST `/rest/tx/` (JSON format)
|
||||
- REST `/rest/block/` (JSON format when including extended tx details)
|
||||
- `bitcoin-tx -json`
|
||||
|
||||
New mempool information RPC calls
|
||||
---------------------------------
|
||||
|
||||
RPC calls have been added to output detailed statistics for individual mempool
|
||||
entries, as well as to calculate the in-mempool ancestors or descendants of a
|
||||
transaction: see `getmempoolentry`, `getmempoolancestors`, `getmempooldescendants`.
|
||||
|
||||
### ZMQ
|
||||
|
||||
Each ZMQ notification now contains an up-counting sequence number that allows
|
||||
listeners to detect lost notifications.
|
||||
The sequence number is always the last element in a multi-part ZMQ notification and
|
||||
therefore backward compatible.
|
||||
Each message type has its own counter.
|
||||
(https://github.com/bitcoin/bitcoin/pull/7762)
|
||||
|
||||
### Configuration and command-line options
|
||||
|
||||
### Block and transaction handling
|
||||
|
||||
### P2P protocol and network code
|
||||
|
||||
The p2p alert system has been removed in #7692 and the 'alert' message is no longer supported.
|
||||
|
||||
|
||||
Fee filtering of invs (BIP 133)
|
||||
------------------------------------
|
||||
|
||||
The optional new p2p message "feefilter" is implemented and the protocol
|
||||
version is bumped to 70013. Upon receiving a feefilter message from a peer,
|
||||
a node will not send invs for any transactions which do not meet the filter
|
||||
feerate. [BIP 133](https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki)
|
||||
|
||||
### Validation
|
||||
|
||||
### Build system
|
||||
|
||||
### Wallet
|
||||
|
||||
Hierarchical Deterministic Key Generation
|
||||
-----------------------------------------
|
||||
@@ -190,6 +138,12 @@ Existing wallets will still use traditional key generation.
|
||||
Backups of HD wallets, regardless of when they have been created, can
|
||||
therefore be used to re-generate all possible private keys, even the
|
||||
ones which haven't already been generated during the time of the backup.
|
||||
**Attention:** Encrypting the wallet will create a new seed which requires
|
||||
a new backup!
|
||||
|
||||
Wallet dumps (created using the `dumpwallet` RPC) will contain the deterministic
|
||||
seed. This is expected to allow future versions to import the seed and all
|
||||
associated funds, but this is not yet implemented.
|
||||
|
||||
HD key generation for new wallets can be disabled by `-usehd=0`. Keep in
|
||||
mind that this flag only has affect on newly created wallets.
|
||||
@@ -197,11 +151,713 @@ You can't disable HD key generation once you have created a HD wallet.
|
||||
|
||||
There is no distinction between internal (change) and external keys.
|
||||
|
||||
HD wallets are incompatible with older versions of Bitcoin Core.
|
||||
|
||||
[Pull request](https://github.com/bitcoin/bitcoin/pull/8035/files), [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
|
||||
|
||||
|
||||
Segregated Witness
|
||||
------------------
|
||||
|
||||
The code preparations for Segregated Witness ("segwit"), as described in [BIP
|
||||
141](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki), [BIP
|
||||
143](https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki), [BIP
|
||||
144](https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki), and [BIP
|
||||
145](https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki) are
|
||||
finished and included in this release. However, BIP 141 does not yet specify
|
||||
activation parameters on mainnet, and so this release does not support segwit
|
||||
use on mainnet. Testnet use is supported, and after BIP 141 is updated with
|
||||
proposed parameters, a future release of Bitcoin Core is expected that
|
||||
implements those parameters for mainnet.
|
||||
|
||||
Furthermore, because segwit activation is not yet specified for mainnet,
|
||||
version 0.13.0 will behave similarly as other pre-segwit releases even after a
|
||||
future activation of BIP 141 on the network. Upgrading from 0.13.0 will be
|
||||
required in order to utilize segwit-related features on mainnet (such as signal
|
||||
BIP 141 activation, mine segwit blocks, fully validate segwit blocks, relay
|
||||
segwit blocks to other segwit nodes, and use segwit transactions in the
|
||||
wallet, etc).
|
||||
|
||||
|
||||
Mining transaction selection ("Child Pays For Parent")
|
||||
------------------------------------------------------
|
||||
|
||||
The mining transaction selection algorithm has been replaced with an algorithm
|
||||
that selects transactions based on their feerate inclusive of unconfirmed
|
||||
ancestor transactions. This means that a low-fee transaction can become more
|
||||
likely to be selected if a high-fee transaction that spends its outputs is
|
||||
relayed.
|
||||
|
||||
With this change, the `-blockminsize` command line option has been removed.
|
||||
|
||||
The command line option `-blockmaxsize` remains an option to specify the
|
||||
maximum number of serialized bytes in a generated block. In addition, the new
|
||||
command line option `-blockmaxweight` has been added, which specifies the
|
||||
maximum "block weight" of a generated block, as defined by [BIP 141 (Segregated
|
||||
Witness)] (https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki).
|
||||
|
||||
In preparation for Segregated Witness, the mining algorithm has been modified
|
||||
to optimize transaction selection for a given block weight, rather than a given
|
||||
number of serialized bytes in a block. In this release, transaction selection
|
||||
is unaffected by this distinction (as BIP 141 activation is not supported on
|
||||
mainnet in this release, see above), but in future releases and after BIP 141
|
||||
activation, these calculations would be expected to differ.
|
||||
|
||||
For optimal runtime performance, miners using this release should specify
|
||||
`-blockmaxweight` on the command line, and not specify `-blockmaxsize`.
|
||||
Additionally (or only) specifying `-blockmaxsize`, or relying on default
|
||||
settings for both, may result in performance degradation, as the logic to
|
||||
support `-blockmaxsize` performs additional computation to ensure that
|
||||
constraint is met. (Note that for mainnet, in this release, the equivalent
|
||||
parameter for `-blockmaxweight` would be four times the desired
|
||||
`-blockmaxsize`. See [BIP 141]
|
||||
(https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki) for additional
|
||||
details.)
|
||||
|
||||
In the future, the `-blockmaxsize` option may be removed, as block creation is
|
||||
no longer optimized for this metric. Feedback is requested on whether to
|
||||
deprecate or keep this command line option in future releases.
|
||||
|
||||
|
||||
Reindexing changes
|
||||
------------------
|
||||
|
||||
In earlier versions, reindexing did validation while reading through the block
|
||||
files on disk. These two have now been split up, so that all blocks are known
|
||||
before validation starts. This was necessary to make certain optimizations that
|
||||
are available during normal synchronizations also available during reindexing.
|
||||
|
||||
The two phases are distinct in the Bitcoin-Qt GUI. During the first one,
|
||||
"Reindexing blocks on disk" is shown. During the second (slower) one,
|
||||
"Processing blocks on disk" is shown.
|
||||
|
||||
It is possible to only redo validation now, without rebuilding the block index,
|
||||
using the command line option `-reindex-chainstate` (in addition to
|
||||
`-reindex` which does both). This new option is useful when the blocks on disk
|
||||
are assumed to be fine, but the chainstate is still corrupted. It is also
|
||||
useful for benchmarks.
|
||||
|
||||
|
||||
Removal of internal miner
|
||||
--------------------------
|
||||
|
||||
As CPU mining has been useless for a long time, the internal miner has been
|
||||
removed in this release, and replaced with a simpler implementation for the
|
||||
test framework.
|
||||
|
||||
The overall result of this is that `setgenerate` RPC call has been removed, as
|
||||
well as the `-gen` and `-genproclimit` command-line options.
|
||||
|
||||
For testing, the `generate` call can still be used to mine a block, and a new
|
||||
RPC call `generatetoaddress` has been added to mine to a specific address. This
|
||||
works with wallet disabled.
|
||||
|
||||
|
||||
New bytespersigop implementation
|
||||
--------------------------------
|
||||
|
||||
The former implementation of the bytespersigop filter accidentally broke bare
|
||||
multisig (which is meant to be controlled by the `permitbaremultisig` option),
|
||||
since the consensus protocol always counts these older transaction forms as 20
|
||||
sigops for backwards compatibility. Simply fixing this bug by counting more
|
||||
accurately would have reintroduced a vulnerability. It has therefore been
|
||||
replaced with a new implementation that rather than filter such transactions,
|
||||
instead treats them (for fee purposes only) as if they were in fact the size
|
||||
of a transaction actually using all 20 sigops.
|
||||
|
||||
|
||||
Low-level P2P changes
|
||||
----------------------
|
||||
|
||||
- The optional new p2p message "feefilter" is implemented and the protocol
|
||||
version is bumped to 70013. Upon receiving a feefilter message from a peer,
|
||||
a node will not send invs for any transactions which do not meet the filter
|
||||
feerate. [BIP 133](https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki)
|
||||
|
||||
- The P2P alert system has been removed in PR #7692 and the `alert` P2P message
|
||||
is no longer supported.
|
||||
|
||||
- The transaction relay mechanism used to relay one quarter of all transactions
|
||||
instantly, while queueing up the rest and sending them out in batch. As
|
||||
this resulted in chains of dependent transactions being reordered, it
|
||||
systematically hurt transaction relay. The relay code was redesigned in PRs
|
||||
\#7840 and #8082, and now always batches transactions announcements while also
|
||||
sorting them according to dependency order. This significantly reduces orphan
|
||||
transactions. To compensate for the removal of instant relay, the frequency of
|
||||
batch sending was doubled for outgoing peers.
|
||||
|
||||
- Since PR #7840 the BIP35 `mempool` command is also subject to batch processing.
|
||||
Also the `mempool` message is no longer handled for non-whitelisted peers when
|
||||
`NODE_BLOOM` is disabled through `-peerbloomfilters=0`.
|
||||
|
||||
- The maximum size of orphan transactions that are kept in memory until their
|
||||
ancestors arrive has been raised in PR #8179 from 5000 to 99999 bytes. They
|
||||
are now also removed from memory when they are included in a block, conflict
|
||||
with a block, and time out after 20 minutes.
|
||||
|
||||
- We respond at most once to a getaddr request during the lifetime of a
|
||||
connection since PR #7856.
|
||||
|
||||
- Connections to peers who have recently been the first one to give us a valid
|
||||
new block or transaction are protected from disconnections since PR #8084.
|
||||
|
||||
|
||||
Low-level RPC changes
|
||||
----------------------
|
||||
|
||||
- RPC calls have been added to output detailed statistics for individual mempool
|
||||
entries, as well as to calculate the in-mempool ancestors or descendants of a
|
||||
transaction: see `getmempoolentry`, `getmempoolancestors`, `getmempooldescendants`.
|
||||
|
||||
- `gettxoutsetinfo` UTXO hash (`hash_serialized`) has changed. There was a divergence between
|
||||
32-bit and 64-bit platforms, and the txids were missing in the hashed data. This has been
|
||||
fixed, but this means that the output will be different than from previous versions.
|
||||
|
||||
- Full UTF-8 support in the RPC API. Non-ASCII characters in, for example,
|
||||
wallet labels have always been malformed because they weren't taken into account
|
||||
properly in JSON RPC processing. This is no longer the case. This also affects
|
||||
the GUI debug console.
|
||||
|
||||
- Asm script outputs replacements for OP_NOP2 and OP_NOP3
|
||||
|
||||
- OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP
|
||||
65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)
|
||||
|
||||
- OP_NOP3 has been renamed to OP_CHECKSEQUENCEVERIFY by [BIP
|
||||
112](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki)
|
||||
|
||||
- The following outputs are affected by this change:
|
||||
|
||||
- RPC `getrawtransaction` (in verbose mode)
|
||||
- RPC `decoderawtransaction`
|
||||
- RPC `decodescript`
|
||||
- REST `/rest/tx/` (JSON format)
|
||||
- REST `/rest/block/` (JSON format when including extended tx details)
|
||||
- `bitcoin-tx -json`
|
||||
|
||||
- The sorting of the output of the `getrawmempool` output has changed.
|
||||
|
||||
- New RPC commands: `generatetoaddress`, `importprunedfunds`, `removeprunedfunds`, `signmessagewithprivkey`,
|
||||
`getmempoolancestors`, `getmempooldescendants`, `getmempoolentry`,
|
||||
`createwitnessaddress`, `addwitnessaddress`.
|
||||
|
||||
- Removed RPC commands: `setgenerate`, `getgenerate`.
|
||||
|
||||
- New options were added to `fundrawtransaction`: `includeWatching`, `changeAddress`, `changePosition` and `feeRate`.
|
||||
|
||||
|
||||
Low-level ZMQ changes
|
||||
----------------------
|
||||
|
||||
- Each ZMQ notification now contains an up-counting sequence number that allows
|
||||
listeners to detect lost notifications.
|
||||
The sequence number is always the last element in a multi-part ZMQ notification and
|
||||
therefore backward compatible. Each message type has its own counter.
|
||||
PR [#7762](https://github.com/bitcoin/bitcoin/pull/7762).
|
||||
|
||||
|
||||
0.13.0 Change log
|
||||
=================
|
||||
|
||||
Detailed release notes follow. This overview includes changes that affect
|
||||
behavior, not code moves, refactors and string updates. For convenience in locating
|
||||
the code changes and accompanying discussion, both the pull request and
|
||||
git merge commit are mentioned.
|
||||
|
||||
### RPC and other APIs
|
||||
|
||||
- #7156 `9ee02cf` Remove cs_main lock from `createrawtransaction` (laanwj)
|
||||
- #7326 `2cd004b` Fix typo, wrong information in gettxout help text (paveljanik)
|
||||
- #7222 `82429d0` Indicate which transactions are signaling opt-in RBF (sdaftuar)
|
||||
- #7480 `b49a623` Changed getnetworkhps value to double to avoid overflow (instagibbs)
|
||||
- #7550 `8b958ab` Input-from-stdin mode for bitcoin-cli (laanwj)
|
||||
- #7670 `c9a1265` Use cached block hash in blockToJSON() (rat4)
|
||||
- #7726 `9af69fa` Correct importaddress help reference to importpubkey (CypherGrue)
|
||||
- #7766 `16555b6` Register calls where they are defined (laanwj)
|
||||
- #7797 `e662a76` Fix generatetoaddress failing to parse address (mruddy)
|
||||
- #7774 `916b15a` Add versionHex in getblock and getblockheader JSON results (mruddy)
|
||||
- #7863 `72c54e3` Getblockchaininfo: make bip9_softforks an object, not an array (rustyrussell)
|
||||
- #7842 `d97101e` Do not print minping time in getpeerinfo when no ping received yet (paveljanik)
|
||||
- #7518 `be14ca5` Add multiple options to fundrawtransaction (promag)
|
||||
- #7756 `9e47fce` Add cursor to iterate over utxo set, use this in `gettxoutsetinfo` (laanwj)
|
||||
- #7848 `88616d2` Divergence between 32- and 64-bit when hashing >4GB affects `gettxoutsetinfo` (laanwj)
|
||||
- #7827 `4205ad7` Speed up `getchaintips` (mrbandrews)
|
||||
- #7762 `a1eb344` Append a message sequence number to every ZMQ notification (jonasschnelli)
|
||||
- #7688 `46880ed` List solvability in listunspent output and improve help (sipa)
|
||||
- #7926 `5725807` Push back `getaddednodeinfo` dead value (instagibbs)
|
||||
- #7953 `0630353` Create `signmessagewithprivkey` rpc (achow101)
|
||||
- #8049 `c028c7b` Expose information on whether transaction relay is enabled in `getnetworkinfo` (laanwj)
|
||||
- #7967 `8c1e49b` Add feerate option to `fundrawtransaction` (jonasschnelli)
|
||||
- #8118 `9b6a48c` Reduce unnecessary hashing in `signrawtransaction` (jonasnick)
|
||||
- #7957 `79004d4` Add support for transaction sequence number (jonasschnelli)
|
||||
- #8153 `75ec320` `fundrawtransaction` feeRate: Use BTC/kB (MarcoFalke)
|
||||
- #7292 `7ce9ac5` Expose ancestor/descendant information over RPC (sdaftuar)
|
||||
- #8171 `62fcf27` Fix createrawtx sequence number unsigned int parsing (jonasschnelli)
|
||||
- #7892 `9c3d0fa` Add full UTF-8 support to RPC (laanwj)
|
||||
- #8317 `304eff3` Don't use floating point in rpcwallet (MarcoFalke)
|
||||
- #8258 `5a06ebb` Hide softfork in `getblockchaininfo` if timeout is 0 (jl2012)
|
||||
- #8244 `1922e5a` Remove unnecessary LOCK(cs_main) in getrawmempool (dcousens)
|
||||
|
||||
### Block and transaction handling
|
||||
|
||||
- #7056 `6a07208` Save last db read (morcos)
|
||||
- #6842 `0192806` Limitfreerelay edge case bugfix (ptschip)
|
||||
- #7084 `11d74f6` Replace maxFeeRate of 10000*minRelayTxFee with maxTxFee in mempool (MarcoFalke)
|
||||
- #7539 `9f33dba` Add tags to mempool's mapTx indices (sdaftuar)
|
||||
- #7592 `26a2a72` Re-remove ERROR logging for mempool rejects (laanwj)
|
||||
- #7187 `14d6324` Keep reorgs fast for SequenceLocks checks (morcos)
|
||||
- #7594 `01f4267` Mempool: Add tracking of ancestor packages (sdaftuar)
|
||||
- #7904 `fc9e334` Txdb: Fix assert crash in new UTXO set cursor (laanwj)
|
||||
- #7927 `f9c2ac7` Minor changes to dbwrapper to simplify support for other databases (laanwj)
|
||||
- #7933 `e26b620` Fix OOM when deserializing UTXO entries with invalid length (sipa)
|
||||
- #8020 `5e374f7` Use SipHash-2-4 for various non-cryptographic hashes (sipa)
|
||||
- #8076 `d720980` VerifyDB: don't check blocks that have been pruned (sdaftuar)
|
||||
- #8080 `862fd24` Do not use mempool for GETDATA for tx accepted after the last mempool req (gmaxwell)
|
||||
- #7997 `a82f033` Replace mapNextTx with slimmer setSpends (kazcw)
|
||||
- #8220 `1f86d64` Stop trimming when mapTx is empty (sipa)
|
||||
- #8273 `396f9d6` Bump `-dbcache` default to 300MiB (laanwj)
|
||||
- #7225 `eb33179` Eliminate unnecessary call to CheckBlock (sdaftuar)
|
||||
- #7907 `006cdf6` Optimize and Cleanup CScript::FindAndDelete (pstratem)
|
||||
- #7917 `239d419` Optimize reindex (sipa)
|
||||
- #7763 `3081fb9` Put hex-encoded version in UpdateTip (sipa)
|
||||
- #8149 `d612837` Testnet-only segregated witness (sipa)
|
||||
- #8305 `3730393` Improve handling of unconnecting headers (sdaftuar)
|
||||
- #8363 `fca1a41` Rename "block cost" to "block weight" (sdaftuar)
|
||||
- #8381 `f84ee3d` Make witness v0 outputs non-standard (jl2012)
|
||||
- #8364 `3f65ba2` Treat high-sigop transactions as larger rather than rejecting them (sipa)
|
||||
|
||||
### P2P protocol and network code
|
||||
|
||||
- #6589 `dc0305d` Log bytes recv/sent per command (jonasschnelli)
|
||||
- #7164 `3b43cad` Do not download transactions during initial blockchain sync (ptschip)
|
||||
- #7458 `898fedf` peers.dat, banlist.dat recreated when missing (kirkalx)
|
||||
- #7637 `3da5d1b` Fix memleak in TorController (laanwj, jonasschnelli)
|
||||
- #7553 `9f14e5a` Remove vfReachable and modify IsReachable to only use vfLimited (pstratem)
|
||||
- #7708 `9426632` De-neuter NODE_BLOOM (pstratem)
|
||||
- #7692 `29b2be6` Remove P2P alert system (btcdrak)
|
||||
- #7542 `c946a15` Implement "feefilter" P2P message (morcos)
|
||||
- #7573 `352fd57` Add `-maxtimeadjustment` command line option (mruddy)
|
||||
- #7570 `232592a` Add IPv6 Link-Local Address Support (mruddy)
|
||||
- #7874 `e6a4d48` Improve AlreadyHave (morcos)
|
||||
- #7856 `64e71b3` Only send one GetAddr response per connection (gmaxwell)
|
||||
- #7868 `7daa3ad` Split DNS resolving functionality out of net structures (theuni)
|
||||
- #7919 `7617682` Fix headers announcements edge case (sdaftuar)
|
||||
- #7514 `d9594bf` Fix IsInitialBlockDownload for testnet (jmacwhyte)
|
||||
- #7959 `03cf6e8` fix race that could fail to persist a ban (kazcw)
|
||||
- #7840 `3b9a0bf` Several performance and privacy improvements to inv/mempool handling (sipa)
|
||||
- #8011 `65aecda` Don't run ThreadMessageHandler at lowered priority (kazcw)
|
||||
- #7696 `5c3f8dd` Fix de-serialization bug where AddrMan is left corrupted (EthanHeilman)
|
||||
- #7932 `ed749bd` CAddrMan::Deserialize handle corrupt serializations better (pstratem)
|
||||
- #7906 `83121cc` Prerequisites for p2p encapsulation changes (theuni)
|
||||
- #8033 `18436d8` Fix Socks5() connect failures to be less noisy and less unnecessarily scary (wtogami)
|
||||
- #8082 `01d8359` Defer inserting into maprelay until just before relaying (gmaxwell)
|
||||
- #7960 `6a22373` Only use AddInventoryKnown for transactions (sdaftuar)
|
||||
- #8078 `2156fa2` Disable the mempool P2P command when bloom filters disabled (petertodd)
|
||||
- #8065 `67c91f8` Addrman offline attempts (gmaxwell)
|
||||
- #7703 `761cddb` Tor: Change auth order to only use password auth if -torpassword (laanwj)
|
||||
- #8083 `cd0c513` Add support for dnsseeds with option to filter by servicebits (jonasschnelli)
|
||||
- #8173 `4286f43` Use SipHash for node eviction (sipa)
|
||||
- #8154 `1445835` Drop vAddrToSend after sending big addr message (kazcw)
|
||||
- #7749 `be9711e` Enforce expected outbound services (sipa)
|
||||
- #8208 `0a64777` Do not set extra flags for unfiltered DNS seed results (sipa)
|
||||
- #8084 `e4bb4a8` Add recently accepted blocks and txn to AttemptToEvictConnection (gmaxwell)
|
||||
- #8113 `3f89a53` Rework addnode behaviour (sipa)
|
||||
- #8179 `94ab58b` Evict orphans which are included or precluded by accepted blocks (gmaxwell)
|
||||
- #8068 `e9d76a1` Compact Blocks (TheBlueMatt)
|
||||
- #8204 `0833894` Update petertodd's testnet seed (petertodd)
|
||||
- #8247 `5cd35d3` Mark my dnsseed as supporting filtering (sipa)
|
||||
- #8275 `042c323` Remove bad chain alert partition check (btcdrak)
|
||||
- #8271 `1bc9c80` Do not send witnesses in cmpctblock (sipa)
|
||||
- #8312 `ca40ef6` Fix mempool DoS vulnerability from malleated transactions (sdaftuar)
|
||||
- #7180 `16ccb74` Account for `sendheaders` `verack` messages (laanwj)
|
||||
- #8102 `425278d` Bugfix: use global ::fRelayTxes instead of CNode in version send (sipa)
|
||||
- #8408 `b7e2011` Prevent fingerprinting, disk-DoS with compact blocks (sdaftuar)
|
||||
|
||||
### Build system
|
||||
|
||||
- #7302 `41f1a3e` C++11 build/runtime fixes (theuni)
|
||||
- #7322 `fd9356b` c++11: add scoped enum fallbacks to CPPFLAGS rather than defining them locally (theuni)
|
||||
- #7441 `a6771fc` Use Debian 8.3 in gitian build guide (fanquake)
|
||||
- #7349 `152a821` Build against system UniValue when available (luke-jr)
|
||||
- #7520 `621940e` LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead (paveljanik)
|
||||
- #7528 `9b9bfce` autogen.sh: warn about needing autoconf if autoreconf is not found (knocte)
|
||||
- #7504 `19324cf` Crystal clean make clean (paveljanik)
|
||||
- #7619 `18b3f1b` Add missing sudo entry in gitian VM setup (btcdrak)
|
||||
- #7616 `639ec58` [depends] Delete unused patches (MarcoFalke)
|
||||
- #7658 `c15eb28` Add curl to Gitian setup instructions (btcdrak)
|
||||
- #7710 `909b72b` [Depends] Bump miniupnpc and config.guess+sub (fanquake)
|
||||
- #7723 `5131005` build: python 3 compatibility (laanwj)
|
||||
- #7477 `28ad4d9` Fix quoting of copyright holders in configure.ac (domob1812)
|
||||
- #7711 `a67bc5e` [build-aux] Update Boost & check macros to latest serials (fanquake)
|
||||
- #7788 `4dc1b3a` Use relative paths instead of absolute paths in protoc calls (paveljanik)
|
||||
- #7809 `bbd210d` depends: some base fixes/changes (theuni)
|
||||
- #7603 `73fc922` Build System: Use PACKAGE_TARNAME in NSIS script (JeremyRand)
|
||||
- #7905 `187186b` test: move accounting_tests and rpc_wallet_tests to wallet/test (laanwj)
|
||||
- #7911 `351abf9` leveldb: integrate leveldb into our buildsystem (theuni)
|
||||
- #7944 `a407807` Re-instate TARGET_OS=linux in configure.ac. Removed by 351abf9e035 (randy-waterhouse)
|
||||
- #7920 `c3e3cfb` Switch Travis to Trusty (theuni)
|
||||
- #7954 `08b37c5` build: quiet annoying warnings without adding new ones (theuni)
|
||||
- #7165 `06162f1` build: Enable C++11 in build, require C++11 compiler (laanwj)
|
||||
- #7982 `559fbae` build: No need to check for leveldb atomics (theuni)
|
||||
- #8002 `f9b4582` [depends] Add -stdlib=libc++ to darwin CXX flags (fanquake)
|
||||
- #7993 `6a034ed` [depends] Bump Freetype, ccache, ZeroMQ, miniupnpc, expat (fanquake)
|
||||
- #8167 `19ea173` Ship debug tarballs/zips with debug symbols (theuni)
|
||||
- #8175 `f0299d8` Add --disable-bench to config flags for windows (laanwj)
|
||||
- #7283 `fd9881a` [gitian] Default reference_datetime to commit author date (MarcoFalke)
|
||||
- #8181 `9201ce8` Get rid of `CLIENT_DATE` (laanwj)
|
||||
- #8133 `fde0ac4` Finish up out-of-tree changes (theuni)
|
||||
- #8188 `65a9d7d` Add armhf/aarch64 gitian builds (theuni)
|
||||
- #8194 `cca1c8c` [gitian] set correct PATH for wrappers (MarcoFalke)
|
||||
- #8198 `5201614` Sync ax_pthread with upstream draft4 (fanquake)
|
||||
- #8210 `12a541e` [Qt] Bump to Qt5.6.1 (jonasschnelli)
|
||||
- #8285 `da50997` windows: Add testnet link to installer (laanwj)
|
||||
- #8304 `0cca2fe` [travis] Update SDK_URL (MarcoFalke)
|
||||
- #8310 `6ae20df` Require boost for bench (theuni)
|
||||
- #8315 `2e51590` Don't require sudo for Linux (theuni)
|
||||
- #8314 `67caef6` Fix pkg-config issues for 0.13 (theuni)
|
||||
- #8373 `1fe7f40` Fix OSX non-deterministic dmg (theuni)
|
||||
- #8358 `cfd1280` Gbuild: Set memory explicitly (default is too low) (MarcoFalke)
|
||||
|
||||
### GUI
|
||||
|
||||
### Tests
|
||||
- #7154 `00b4b8d` Add InMempool() info to transaction details (jonasschnelli)
|
||||
- #7068 `5f3c670` [RPC-Tests] add simple way to run rpc test over QT clients (jonasschnelli)
|
||||
- #7218 `a1c185b` Fix misleading translation (MarcoFalke)
|
||||
- #7214 `be9a9a3` qt5: Use the fixed font the system recommends (MarcoFalke)
|
||||
- #7256 `08ab906` Add note to coin control dialog QT5 workaround (fanquake)
|
||||
- #7255 `e289807` Replace some instances of formatWithUnit with formatHtmlWithUnit (fanquake)
|
||||
- #7317 `3b57e9c` Fix RPCTimerInterface ordering issue (jonasschnelli)
|
||||
- #7327 `c079d79` Transaction View: LastMonth calculation fixed (crowning-)
|
||||
- #7334 `e1060c5` coincontrol workaround is still needed in qt5.4 (fixed in qt5.5) (MarcoFalke)
|
||||
- #7383 `ae2db67` Rename "amount" to "requested amount" in receive coins table (jonasschnelli)
|
||||
- #7396 `cdcbc59` Add option to increase/decrease font size in the console window (jonasschnelli)
|
||||
- #7437 `9645218` Disable tab navigation for peers tables (Kefkius)
|
||||
- #7604 `354b03d` build: Remove spurious dollar sign. Fixes #7189 (dooglus)
|
||||
- #7605 `7f001bd` Remove openssl info from init/log and from Qt debug window (jonasschnelli)
|
||||
- #7628 `87d6562` Add 'copy full transaction details' option (ericshawlinux)
|
||||
- #7613 `3798e5d` Add autocomplete to bitcoin-qt's console window (GamerSg)
|
||||
- #7668 `b24266c` Fix history deletion bug after font size change (achow101)
|
||||
- #7680 `41d2dfa` Remove reflection from `about` icon (laanwj)
|
||||
- #7686 `f034bce` Remove 0-fee from send dialog (MarcoFalke)
|
||||
- #7506 `b88e0b0` Use CCoinControl selection in CWallet::FundTransaction (promag)
|
||||
- #7732 `0b98dd7` Debug window: replace "Build date" with "Datadir" (jonasschnelli)
|
||||
- #7761 `60db51d` remove trailing output-index from transaction-id (jonasschnelli)
|
||||
- #7772 `6383268` Clear the input line after activating autocomplete (paveljanik)
|
||||
- #7925 `f604bf6` Fix out-of-tree GUI builds (laanwj)
|
||||
- #7939 `574ddc6` Make it possible to show details for multiple transactions (laanwj)
|
||||
- #8012 `b33824b` Delay user confirmation of send (Tyler-Hardin)
|
||||
- #8006 `7c8558d` Add option to disable the system tray icon (Tyler-Hardin)
|
||||
- #8046 `169d379` Fix Cmd-Q / Menu Quit shutdown on OSX (jonasschnelli)
|
||||
- #8042 `6929711` Don't allow to open the debug window during splashscreen & verification state (jonasschnelli)
|
||||
- #8014 `77b49ac` Sort transactions by date (Tyler-Hardin)
|
||||
- #8073 `eb2f6f7` askpassphrasedialog: Clear pass fields on accept (rat4)
|
||||
- #8129 `ee1533e` Fix RPC console auto completer (UdjinM6)
|
||||
- #7636 `fb0ac48` Add bitcoin address label to request payment QR code (makevoid)
|
||||
- #8231 `760a6c7` Fix a bug where the SplashScreen will not be hidden during startup (jonasschnelli)
|
||||
- #8256 `af2421c` BUG: bitcoin-qt crash (fsb4000)
|
||||
- #8257 `ff03c50` Do not ask a UI question from bitcoind (sipa)
|
||||
- #8288 `91abb77` Network-specific example address (laanwj)
|
||||
- #7707 `a914968` UI support for abandoned transactions (jonasschnelli)
|
||||
- #8207 `f7a403b` Add a link to the Bitcoin-Core repository and website to the About Dialog (MarcoFalke)
|
||||
- #8281 `6a87eb0` Remove client name from debug window (laanwj)
|
||||
- #8407 `45eba4b` Add dbcache migration path (jonasschnelli)
|
||||
|
||||
### Miscellaneous
|
||||
### Wallet
|
||||
|
||||
- #7262 `fc08994` Reduce inefficiency of GetAccountAddress() (dooglus)
|
||||
- #7537 `78e81b0` Warn on unexpected EOF while salvaging wallet (laanwj)
|
||||
- #7521 `3368895` Don't resend wallet txs that aren't in our own mempool (morcos)
|
||||
- #7576 `86a1ec5` Move wallet help string creation to CWallet (jonasschnelli)
|
||||
- #7577 `5b3b5a7` Move "load wallet phase" to CWallet (jonasschnelli)
|
||||
- #7608 `0735c0c` Move hardcoded file name out of log messages (MarcoFalke)
|
||||
- #7649 `4900641` Prevent multiple calls to CWallet::AvailableCoins (promag)
|
||||
- #7646 `e5c3511` Fix lockunspent help message (promag)
|
||||
- #7558 `b35a591` Add import/removeprunedfunds rpc call (instagibbs)
|
||||
- #6215 `48c5adf` add bip32 pub key serialization (jonasschnelli)
|
||||
- #7913 `bafd075` Fix for incorrect locking in GetPubKey() (keystore.cpp) (yurizhykin)
|
||||
- #8036 `41138f9` init: Move berkeleydb version reporting to wallet (laanwj)
|
||||
- #8028 `373b50d` Fix insanity of CWalletDB::WriteTx and CWalletTx::WriteToDisk (pstratem)
|
||||
- #8061 `f6b7df3` Improve Wallet encapsulation (pstratem)
|
||||
- #7891 `950be19` Always require OS randomness when generating secret keys (sipa)
|
||||
- #7689 `b89ef13` Replace OpenSSL AES with ctaes-based version (sipa)
|
||||
- #7825 `f972b04` Prevent multiple calls to ExtractDestination (pedrobranco)
|
||||
- #8137 `243ac0c` Improve CWallet API with new AccountMove function (pstratem)
|
||||
- #8142 `52c3f34` Improve CWallet API with new GetAccountPubkey function (pstratem)
|
||||
- #8035 `b67a472` Add simplest BIP32/deterministic key generation implementation (jonasschnelli)
|
||||
- #7687 `a6ddb19` Stop treating importaddress'ed scripts as change (sipa)
|
||||
- #8298 `aef3811` wallet: Revert input selection post-pruning (laanwj)
|
||||
- #8324 `bc94b87` Keep HD seed during salvagewallet (jonasschnelli)
|
||||
- #8323 `238300b` Add HD keypath to CKeyMetadata, report metadata in validateaddress (jonasschnelli)
|
||||
- #8367 `3b38a6a` Ensure <0.13 clients can't open HD wallets (jonasschnelli)
|
||||
- #8378 `ebea651` Move SetMinVersion for FEATURE_HD to SetHDMasterKey (pstratem)
|
||||
- #8390 `73adfe3` Correct hdmasterkeyid/masterkeyid name confusion (jonasschnelli)
|
||||
- #8206 `18b8ee1` Add HD xpriv to dumpwallet (jonasschnelli)
|
||||
- #8389 `c3c82c4` Create a new HD seed after encrypting the wallet (jonasschnelli)
|
||||
|
||||
### Tests and QA
|
||||
|
||||
- #7320 `d3dfc6d` Test walletpassphrase timeout (MarcoFalke)
|
||||
- #7208 `47c5ed1` Make max tip age an option instead of chainparam (laanwj)
|
||||
- #7372 `21376af` Trivial: [qa] wallet: Print maintenance (MarcoFalke)
|
||||
- #7280 `668906f` [travis] Fail when documentation is outdated (MarcoFalke)
|
||||
- #7177 `93b0576` [qa] Change default block priority size to 0 (MarcoFalke)
|
||||
- #7236 `02676c5` Use createrawtx locktime parm in txn_clone (dgenr8)
|
||||
- #7212 `326ffed` Adds unittests for CAddrMan and CAddrinfo, removes source of non-determinism (EthanHeilman)
|
||||
- #7490 `d007511` tests: Remove May15 test (laanwj)
|
||||
- #7531 `18cb2d5` Add bip68-sequence.py to extended rpc tests (btcdrak)
|
||||
- #7536 `ce5fc02` test: test leading spaces for ParseHex (laanwj)
|
||||
- #7620 `1b68de3` [travis] Only run check-doc.py once (MarcoFalke)
|
||||
- #7455 `7f96671` [travis] Exit early when check-doc.py fails (MarcoFalke)
|
||||
- #7667 `56d2c4e` Move GetTempPath() to testutil (musalbas)
|
||||
- #7517 `f1ca891` test: script_error checking in script_invalid tests (laanwj)
|
||||
- #7684 `3d0dfdb` Extend tests (MarcoFalke)
|
||||
- #7697 `622fe6c` Tests: make prioritise_transaction.py more robust (sdaftuar)
|
||||
- #7709 `efde86b` Tests: fix missing import in mempool_packages (sdaftuar)
|
||||
- #7702 `29e1131` Add tests verifychain, lockunspent, getbalance, listsinceblock (MarcoFalke)
|
||||
- #7720 `3b4324b` rpc-test: Normalize assert() (MarcoFalke)
|
||||
- #7757 `26794d4` wallet: Wait for reindex to catch up (MarcoFalke)
|
||||
- #7764 `a65b36c` Don't run pruning.py twice (MarcoFalke)
|
||||
- #7773 `7c80e72` Fix comments in tests (btcdrak)
|
||||
- #7489 `e9723cb` tests: Make proxy_test work on travis servers without IPv6 (laanwj)
|
||||
- #7801 `70ac71b` Remove misleading "errorString syntax" (MarcoFalke)
|
||||
- #7803 `401c65c` maxblocksinflight: Actually enable test (MarcoFalke)
|
||||
- #7802 `3bc71e1` httpbasics: Actually test second connection (MarcoFalke)
|
||||
- #7849 `ab8586e` tests: add varints_bitpatterns test (laanwj)
|
||||
- #7846 `491171f` Clean up lockorder data of destroyed mutexes (sipa)
|
||||
- #7853 `6ef5e00` py2: Unfiddle strings into bytes explicitly (MarcoFalke)
|
||||
- #7878 `53adc83` [test] bctest.py: Revert faa41ee (MarcoFalke)
|
||||
- #7798 `cabba24` [travis] Print the commit which was evaluated (MarcoFalke)
|
||||
- #7833 `b1bf511` tests: Check Content-Type header returned from RPC server (laanwj)
|
||||
- #7851 `fa9d86f` pull-tester: Don't mute zmq ImportError (MarcoFalke)
|
||||
- #7822 `0e6fd5e` Add listunspent() test for spendable/unspendable UTXO (jpdffonseca)
|
||||
- #7912 `59ad568` Tests: Fix deserialization of reject messages (sdaftuar)
|
||||
- #7941 `0ea3941` Fixing comment in script_test.json test case (Christewart)
|
||||
- #7807 `0ad1041` Fixed miner test values, gave constants for less error-prone values (instagibbs)
|
||||
- #7980 `88b77c7` Smartfees: Properly use ordered dict (MarcoFalke)
|
||||
- #7814 `77b637f` Switch to py3 (MarcoFalke)
|
||||
- #8030 `409a8a1` Revert fatal-ness of missing python-zmq (laanwj)
|
||||
- #8018 `3e90fe6` Autofind rpc tests --srcdir (jonasschnelli)
|
||||
- #8016 `5767e80` Fix multithread CScheduler and reenable test (paveljanik)
|
||||
- #7972 `423ca30` pull-tester: Run rpc test in parallel (MarcoFalke)
|
||||
- #8039 `69b3a6d` Bench: Add crypto hash benchmarks (laanwj)
|
||||
- #8041 `5b736dd` Fix bip9-softforks blockstore issue (MarcoFalke)
|
||||
- #7994 `1f01443` Add op csv tests to script_tests.json (Christewart)
|
||||
- #8038 `e2bf830` Various minor fixes (MarcoFalke)
|
||||
- #8072 `1b87e5b` Travis: 'make check' in parallel and verbose (MarcoFalke)
|
||||
- #8056 `8844ef1` Remove hardcoded "4 nodes" from test_framework (MarcoFalke)
|
||||
- #8047 `37f9a1f` Test_framework: Set wait-timeout for bitcoind procs (MarcoFalke)
|
||||
- #8095 `6700cc9` Test framework: only cleanup on successful test runs (sdaftuar)
|
||||
- #8098 `06bd4f6` Test_framework: Append portseed to tmpdir (MarcoFalke)
|
||||
- #8104 `6ff2c8d` Add timeout to sync_blocks() and sync_mempools() (sdaftuar)
|
||||
- #8111 `61b8684` Benchmark SipHash (sipa)
|
||||
- #8107 `52b803e` Bench: Added base58 encoding/decoding benchmarks (yurizhykin)
|
||||
- #8115 `0026e0e` Avoid integer division in the benchmark inner-most loop (gmaxwell)
|
||||
- #8090 `a2df115` Adding P2SH(p2pkh) script test case (Christewart)
|
||||
- #7992 `ec45cc5` Extend #7956 with one more test (TheBlueMatt)
|
||||
- #8139 `ae5575b` Fix interrupted HTTP RPC connection workaround for Python 3.5+ (sipa)
|
||||
- #8164 `0f24eaf` [Bitcoin-Tx] fix missing test fixtures, fix 32bit atoi issue (jonasschnelli)
|
||||
- #8166 `0b5279f` Src/test: Do not shadow local variables (paveljanik)
|
||||
- #8141 `44c1b1c` Continuing port of java comparison tool (mrbandrews)
|
||||
- #8201 `36b7400` fundrawtransaction: Fix race, assert amounts (MarcoFalke)
|
||||
- #8214 `ed2cd59` Mininode: fail on send_message instead of silent return (MarcoFalke)
|
||||
- #8215 `a072d1a` Don't use floating point in wallet tests (MarcoFalke)
|
||||
- #8066 `65c2058` Test_framework: Use different rpc_auth_pair for each node (MarcoFalke)
|
||||
- #8216 `0d41d70` Assert 'changePosition out of bounds' (MarcoFalke)
|
||||
- #8222 `961893f` Enable mempool consistency checks in unit tests (sipa)
|
||||
- #7751 `84370d5` test_framework: python3.4 authproxy compat (laanwj)
|
||||
- #7744 `d8e862a` test_framework: detect failure of bitcoind startup (laanwj)
|
||||
- #8280 `115735d` Increase sync_blocks() timeouts in pruning.py (MarcoFalke)
|
||||
- #8340 `af9b7a9` Solve trivial merge conflict in p2p-segwit.py (MarcoFalke)
|
||||
- #8067 `3e4cf8f` Travis: use slim generic image, and some fixups (theuni)
|
||||
- #7951 `5c7df70` Test_framework: Properly print exception (MarcoFalke)
|
||||
- #8070 `7771aa5` Remove non-determinism which is breaking net_tests #8069 (EthanHeilman)
|
||||
- #8309 `bb2646a` Add wallet-hd test (MarcoFalke)
|
||||
- #8444 `cd0910b` Fix p2p-feefilter.py for changed tx relay behavior (sdaftuar)
|
||||
|
||||
### Mining
|
||||
|
||||
- #7507 `11c7699` Remove internal miner (Leviathn)
|
||||
- #7663 `c87f51e` Make the generate RPC call function for non-regtest (sipa)
|
||||
- #7671 `e2ebd25` Add generatetoaddress RPC to mine to an address (achow101)
|
||||
- #7935 `66ed450` Versionbits: GBT support (luke-jr)
|
||||
- #7600 `66db2d6` Select transactions using feerate-with-ancestors (sdaftuar)
|
||||
- #8295 `f5660d3` Mining-related fixups for 0.13.0 (sdaftuar)
|
||||
- #7796 `536b75e` Add support for negative fee rates, fixes `prioritizetransaction` (MarcoFalke)
|
||||
- #8362 `86edc20` Scale legacy sigop count in CreateNewBlock (sdaftuar)
|
||||
- #8489 `8b0eee6` Bugfix: Use pre-BIP141 sigops until segwit activates (GBT) (luke-jr)
|
||||
|
||||
### Documentation and miscellaneous
|
||||
|
||||
- #7423 `69e2a40` Add example for building with constrained resources (jarret)
|
||||
- #8254 `c2c69ed` Add OSX ZMQ requirement to QA readme (fanquake)
|
||||
- #8203 `377d131` Clarify documentation for running a tor node (nathaniel-mahieu)
|
||||
- #7428 `4b12266` Add example for listing ./configure flags (nathaniel-mahieu)
|
||||
- #7847 `3eae681` Add arch linux build example (mruddy)
|
||||
- #7968 `ff69aaf` Fedora build requirements (wtogami)
|
||||
- #8013 `fbedc09` Fedora build requirements, add gcc-c++ and fix typo (wtogami)
|
||||
- #8009 `fbd8478` Fixed invalid example paths in gitian-building.md (JeremyRand)
|
||||
- #8240 `63fbdbc` Mention Windows XP end of support in release notes (laanwj)
|
||||
- #8303 `5077d2c` Update bips.md for CSV softfork (fanquake)
|
||||
- #7789 `e0b3e19` Add note about using the Qt official binary installer (paveljanik)
|
||||
- #7791 `e30a5b0` Change Precise to Trusty in gitian-building.md (JeremyRand)
|
||||
- #7838 `8bb5d3d` Update gitian build guide to debian 8.4.0 (fanquake)
|
||||
- #7855 `b778e59` Replace precise with trusty (MarcoFalke)
|
||||
- #7975 `fc23fee` Update bitcoin-core GitHub links (MarcoFalke)
|
||||
- #8034 `e3a8207` Add basic git squash workflow (fanquake)
|
||||
- #7813 `214ec0b` Update port in tor.md (MarcoFalke)
|
||||
- #8193 `37c9830` Use Debian 8.5 in the gitian-build guide (fanquake)
|
||||
- #8261 `3685e0c` Clarify help for `getblockchaininfo` (paveljanik)
|
||||
- #7185 `ea0f5a2` Note that reviewers should mention the id of the commits they reviewed (pstratem)
|
||||
- #7290 `c851d8d` [init] Add missing help for args (MarcoFalke)
|
||||
- #7281 `f9fd4c2` Improve CheckInputs() comment about sig verification (petertodd)
|
||||
- #7417 `1e06bab` Minor improvements to the release process (PRabahy)
|
||||
- #7444 `4cdbd42` Improve block validity/ConnectBlock() comments (petertodd)
|
||||
- #7527 `db2e1c0` Fix and cleanup listreceivedbyX documentation (instagibbs)
|
||||
- #7541 `b6e00af` Clarify description of blockindex (pinheadmz)
|
||||
- #7590 `f06af57` Improving wording related to Boost library requirements [updated] (jonathancross)
|
||||
- #7635 `0fa88ef` Add dependency info to test docs (elliotolds)
|
||||
- #7609 `3ba07bd` RPM spec file project (AliceWonderMiscreations)
|
||||
- #7850 `229a17c` Removed call to `TryCreateDirectory` from `GetDefaultDataDir` in `src/util.cpp` (alexreg)
|
||||
- #7888 `ec870e1` Prevector: fix 2 bugs in currently unreached code paths (kazcw)
|
||||
- #7922 `90653bc` CBase58Data::SetString: cleanse the full vector (kazcw)
|
||||
- #7881 `c4e8390` Update release process (laanwj)
|
||||
- #7952 `a9c8b74` Log invalid block hash to make debugging easier (paveljanik)
|
||||
- #7974 `8206835` More comments on the design of AttemptToEvictConnection (gmaxwell)
|
||||
- #7795 `47a7cfb` UpdateTip: log only one line at most per block (laanwj)
|
||||
- #8110 `e7e25ea` Add benchmarking notes (fanquake)
|
||||
- #8121 `58f0c92` Update implemented BIPs list (fanquake)
|
||||
- #8029 `58725ba` Simplify OS X build notes (fanquake)
|
||||
- #8143 `d46b8b5` comment nit: miners don't vote (instagibbs)
|
||||
- #8136 `22e0b35` Log/report in 10% steps during VerifyDB (jonasschnelli)
|
||||
- #8168 `d366185` util: Add ParseUInt32 and ParseUInt64 (laanwj)
|
||||
- #8178 `f7b1bfc` Add git and github tips and tricks to developer notes (sipa)
|
||||
- #8177 `67db011` developer notes: updates for C++11 (kazcw)
|
||||
- #8229 `8ccdac1` [Doc] Update OS X build notes for 10.11 SDK (fanquake)
|
||||
- #8233 `9f1807a` Mention Linux ARM executables in release process and notes (laanwj)
|
||||
- #7540 `ff46dd4` Rename OP_NOP3 to OP_CHECKSEQUENCEVERIFY (btcdrak)
|
||||
- #8289 `26316ff` bash-completion: Adapt for 0.12 and 0.13 (roques)
|
||||
- #7453 `3dc3149` Missing patches from 0.12 (MarcoFalke)
|
||||
- #7113 `54a550b` Switch to a more efficient rolling Bloom filter (sipa)
|
||||
- #7257 `de9e5ea` Combine common error strings for different options so translations can be shared and reused (luke-jr)
|
||||
- #7304 `b8f485c` [contrib] Add clang-format-diff.py (MarcoFalke)
|
||||
- #7378 `e6f97ef` devtools: replace github-merge with python version (laanwj)
|
||||
- #7395 `0893705` devtools: show pull and commit information in github-merge (laanwj)
|
||||
- #7402 `6a5932b` devtools: github-merge get toplevel dir without extra whitespace (achow101)
|
||||
- #7425 `20a408c` devtools: Fix utf-8 support in messages for github-merge (laanwj)
|
||||
- #7632 `409f843` Delete outdated test-patches reference (Lewuathe)
|
||||
- #7662 `386f438` remove unused NOBLKS_VERSION_{START,END} constants (rat4)
|
||||
- #7737 `aa0d2b2` devtools: make github-merge.py use py3 (laanwj)
|
||||
- #7781 `55db5f0` devtools: Auto-set branch to merge to in github-merge (laanwj)
|
||||
- #7934 `f17032f` Improve rolling bloom filter performance and benchmark (sipa)
|
||||
- #8004 `2efe38b` signal handling: fReopenDebugLog and fRequestShutdown should be type sig_atomic_t (catilac)
|
||||
- #7713 `f6598df` Fixes for verify-commits script (petertodd)
|
||||
- #8412 `8360d5b` libconsensus: Expose a flag for BIP112 (jtimon)
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to everyone who directly contributed to this release:
|
||||
|
||||
- 21E14
|
||||
- accraze
|
||||
- Adam Brown
|
||||
- Alexander Regueiro
|
||||
- Alex Morcos
|
||||
- Alfie John
|
||||
- Alice Wonder
|
||||
- AlSzacrel
|
||||
- Andrew Chow
|
||||
- Andrés G. Aragoneses
|
||||
- Bob McElrath
|
||||
- BtcDrak
|
||||
- calebogden
|
||||
- Cédric Félizard
|
||||
- Chirag Davé
|
||||
- Chris Moore
|
||||
- Chris Stewart
|
||||
- Christian von Roques
|
||||
- Chris Wheeler
|
||||
- Cory Fields
|
||||
- crowning-
|
||||
- Daniel Cousens
|
||||
- Daniel Kraft
|
||||
- Denis Lukianov
|
||||
- Elias Rohrer
|
||||
- Elliot Olds
|
||||
- Eric Shaw
|
||||
- error10
|
||||
- Ethan Heilman
|
||||
- face
|
||||
- fanquake
|
||||
- Francesco 'makevoid' Canessa
|
||||
- fsb4000
|
||||
- Gavin Andresen
|
||||
- gladoscc
|
||||
- Gregory Maxwell
|
||||
- Gregory Sanders
|
||||
- instagibbs
|
||||
- James O'Beirne
|
||||
- Jannes Faber
|
||||
- Jarret Dyrbye
|
||||
- Jeremy Rand
|
||||
- jloughry
|
||||
- jmacwhyte
|
||||
- Joao Fonseca
|
||||
- Johnson Lau
|
||||
- Jonas Nick
|
||||
- Jonas Schnelli
|
||||
- Jonathan Cross
|
||||
- João Barbosa
|
||||
- Jorge Timón
|
||||
- Kaz Wesley
|
||||
- Kefkius
|
||||
- kirkalx
|
||||
- Krzysztof Jurewicz
|
||||
- Leviathn
|
||||
- lewuathe
|
||||
- Luke Dashjr
|
||||
- Luv Khemani
|
||||
- Marcel Krüger
|
||||
- Marco Falke
|
||||
- Mark Friedenbach
|
||||
- Matt
|
||||
- Matt Bogosian
|
||||
- Matt Corallo
|
||||
- Matthew English
|
||||
- Matthew Zipkin
|
||||
- mb300sd
|
||||
- Mitchell Cash
|
||||
- mrbandrews
|
||||
- mruddy
|
||||
- Murch
|
||||
- Mustafa
|
||||
- Nathaniel Mahieu
|
||||
- Nicolas Dorier
|
||||
- Patrick Strateman
|
||||
- Paul Rabahy
|
||||
- paveljanik
|
||||
- Pavel Janík
|
||||
- Pavel Vasin
|
||||
- Pedro Branco
|
||||
- Peter Todd
|
||||
- Philip Kaufmann
|
||||
- Pieter Wuille
|
||||
- Prayag Verma
|
||||
- ptschip
|
||||
- Puru
|
||||
- randy-waterhouse
|
||||
- R E Broadley
|
||||
- Rusty Russell
|
||||
- Suhas Daftuar
|
||||
- Suriyaa Kudo
|
||||
- TheLazieR Yip
|
||||
- Thomas Kerin
|
||||
- Tom Harding
|
||||
- Tyler Hardin
|
||||
- UdjinM6
|
||||
- Warren Togami
|
||||
- Will Binns
|
||||
- Wladimir J. van der Laan
|
||||
- Yuri Zhykin
|
||||
|
||||
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
|
||||
|
||||
@@ -112,16 +112,16 @@ The gbuild invocations below <b>DO NOT DO THIS</b> by default.
|
||||
### Build and sign Bitcoin Core for Linux, Windows, and OS X:
|
||||
|
||||
pushd ./gitian-builder
|
||||
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
|
||||
./bin/gbuild --memory 3000 --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
|
||||
./bin/gsign --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml
|
||||
mv build/out/bitcoin-*.tar.gz build/out/src/bitcoin-*.tar.gz ../
|
||||
|
||||
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win.yml
|
||||
./bin/gbuild --memory 3000 --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win.yml
|
||||
./bin/gsign --signer $SIGNER --release ${VERSION}-win-unsigned --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win.yml
|
||||
mv build/out/bitcoin-*-win-unsigned.tar.gz inputs/bitcoin-win-unsigned.tar.gz
|
||||
mv build/out/bitcoin-*.zip build/out/bitcoin-*.exe ../
|
||||
|
||||
./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
||||
./bin/gbuild --memory 3000 --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
||||
./bin/gsign --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx.yml
|
||||
mv build/out/bitcoin-*-osx-unsigned.tar.gz inputs/bitcoin-osx-unsigned.tar.gz
|
||||
mv build/out/bitcoin-*.tar.gz build/out/bitcoin-*.dmg ../
|
||||
|
||||
@@ -12,6 +12,11 @@ class KeyPoolTest(BitcoinTestFramework):
|
||||
|
||||
def run_test(self):
|
||||
nodes = self.nodes
|
||||
addr_before_encrypting = nodes[0].getnewaddress()
|
||||
addr_before_encrypting_data = nodes[0].validateaddress(addr_before_encrypting)
|
||||
wallet_info_old = nodes[0].getwalletinfo()
|
||||
assert(addr_before_encrypting_data['hdmasterkeyid'] == wallet_info_old['hdmasterkeyid'])
|
||||
|
||||
# Encrypt wallet and wait to terminate
|
||||
nodes[0].encryptwallet('test')
|
||||
bitcoind_processes[0].wait()
|
||||
@@ -19,6 +24,11 @@ class KeyPoolTest(BitcoinTestFramework):
|
||||
nodes[0] = start_node(0, self.options.tmpdir)
|
||||
# Keep creating keys
|
||||
addr = nodes[0].getnewaddress()
|
||||
addr_data = nodes[0].validateaddress(addr)
|
||||
wallet_info = nodes[0].getwalletinfo()
|
||||
assert(addr_before_encrypting_data['hdmasterkeyid'] != wallet_info['hdmasterkeyid'])
|
||||
assert(addr_data['hdmasterkeyid'] == wallet_info['hdmasterkeyid'])
|
||||
|
||||
try:
|
||||
addr = nodes[0].getnewaddress()
|
||||
raise AssertionError('Keypool should be exhausted after one address')
|
||||
|
||||
@@ -62,6 +62,7 @@ class FeeFilterTest(BitcoinTestFramework):
|
||||
|
||||
def run_test(self):
|
||||
node1 = self.nodes[1]
|
||||
node0 = self.nodes[0]
|
||||
# Get out of IBD
|
||||
node1.generate(1)
|
||||
sync_blocks(self.nodes)
|
||||
@@ -91,8 +92,17 @@ class FeeFilterTest(BitcoinTestFramework):
|
||||
node1.settxfee(Decimal("0.00010000"))
|
||||
[node1.sendtoaddress(node1.getnewaddress(), 1) for x in range(3)]
|
||||
sync_mempools(self.nodes) # must be sure node 0 has received all txs
|
||||
time.sleep(10) # wait 10 secs to be sure its doesn't relay any
|
||||
assert(allInvsMatch([], test_node))
|
||||
|
||||
# Send one transaction from node0 that should be received, so that we
|
||||
# we can sync the test on receipt (if node1's txs were relayed, they'd
|
||||
# be received by the time this node0 tx is received). This is
|
||||
# unfortunately reliant on the current relay behavior where we batch up
|
||||
# to 35 entries in an inv, which means that when this next transaction
|
||||
# is eligible for relay, the prior transactions from node1 are eligible
|
||||
# as well.
|
||||
node0.settxfee(Decimal("0.00020000"))
|
||||
txids = [node0.sendtoaddress(node0.getnewaddress(), 1)]
|
||||
assert(allInvsMatch(txids, test_node))
|
||||
test_node.clear_invs()
|
||||
|
||||
# Remove fee filter and check that txs are received again
|
||||
|
||||
@@ -1065,12 +1065,12 @@ class SegWitTest(BitcoinTestFramework):
|
||||
assert_equal(wit_block.serialize(False), non_wit_block.serialize())
|
||||
assert_equal(wit_block.serialize(True), block.serialize(True))
|
||||
|
||||
# Test size, vsize, cost
|
||||
# Test size, vsize, weight
|
||||
rpc_details = self.nodes[0].getblock(block.hash, True)
|
||||
assert_equal(rpc_details["size"], len(block.serialize(True)))
|
||||
assert_equal(rpc_details["strippedsize"], len(block.serialize(False)))
|
||||
cost = 3*len(block.serialize(False)) + len(block.serialize(True))
|
||||
assert_equal(rpc_details["cost"], cost)
|
||||
weight = 3*len(block.serialize(False)) + len(block.serialize(True))
|
||||
assert_equal(rpc_details["weight"], weight)
|
||||
|
||||
# Upgraded node should not ask for blocks from unupgraded
|
||||
block4 = self.build_next_block(nVersion=4)
|
||||
@@ -1086,6 +1086,82 @@ class SegWitTest(BitcoinTestFramework):
|
||||
self.old_node.announce_tx_and_wait_for_getdata(block4.vtx[0])
|
||||
assert(block4.sha256 not in self.old_node.getdataset)
|
||||
|
||||
# V0 segwit outputs should be standard after activation, but not before.
|
||||
def test_standardness_v0(self, segwit_activated):
|
||||
print("\tTesting standardness of v0 outputs (%s activation)" % ("after" if segwit_activated else "before"))
|
||||
assert(len(self.utxo))
|
||||
|
||||
witness_program = CScript([OP_TRUE])
|
||||
witness_hash = sha256(witness_program)
|
||||
scriptPubKey = CScript([OP_0, witness_hash])
|
||||
|
||||
p2sh_pubkey = hash160(witness_program)
|
||||
p2sh_scriptPubKey = CScript([OP_HASH160, p2sh_pubkey, OP_EQUAL])
|
||||
|
||||
# First prepare a p2sh output (so that spending it will pass standardness)
|
||||
p2sh_tx = CTransaction()
|
||||
p2sh_tx.vin = [CTxIn(COutPoint(self.utxo[0].sha256, self.utxo[0].n), b"")]
|
||||
p2sh_tx.vout = [CTxOut(self.utxo[0].nValue-1000, p2sh_scriptPubKey)]
|
||||
p2sh_tx.rehash()
|
||||
|
||||
# Mine it on test_node to create the confirmed output.
|
||||
self.test_node.test_transaction_acceptance(p2sh_tx, with_witness=True, accepted=True)
|
||||
self.nodes[0].generate(1)
|
||||
sync_blocks(self.nodes)
|
||||
|
||||
# Now test standardness of v0 P2WSH outputs.
|
||||
# Start by creating a transaction with two outputs.
|
||||
tx = CTransaction()
|
||||
tx.vin = [CTxIn(COutPoint(p2sh_tx.sha256, 0), CScript([witness_program]))]
|
||||
tx.vout = [CTxOut(p2sh_tx.vout[0].nValue-10000, scriptPubKey)]
|
||||
tx.vout.append(CTxOut(8000, scriptPubKey)) # Might burn this later
|
||||
tx.rehash()
|
||||
|
||||
self.std_node.test_transaction_acceptance(tx, with_witness=True, accepted=segwit_activated)
|
||||
|
||||
# Now create something that looks like a P2PKH output. This won't be spendable.
|
||||
scriptPubKey = CScript([OP_0, hash160(witness_hash)])
|
||||
tx2 = CTransaction()
|
||||
if segwit_activated:
|
||||
# if tx was accepted, then we spend the second output.
|
||||
tx2.vin = [CTxIn(COutPoint(tx.sha256, 1), b"")]
|
||||
tx2.vout = [CTxOut(7000, scriptPubKey)]
|
||||
tx2.wit.vtxinwit.append(CTxInWitness())
|
||||
tx2.wit.vtxinwit[0].scriptWitness.stack = [witness_program]
|
||||
else:
|
||||
# if tx wasn't accepted, we just re-spend the p2sh output we started with.
|
||||
tx2.vin = [CTxIn(COutPoint(p2sh_tx.sha256, 0), CScript([witness_program]))]
|
||||
tx2.vout = [CTxOut(p2sh_tx.vout[0].nValue-1000, scriptPubKey)]
|
||||
tx2.rehash()
|
||||
|
||||
self.std_node.test_transaction_acceptance(tx2, with_witness=True, accepted=segwit_activated)
|
||||
|
||||
# Now update self.utxo for later tests.
|
||||
tx3 = CTransaction()
|
||||
if segwit_activated:
|
||||
# tx and tx2 were both accepted. Don't bother trying to reclaim the
|
||||
# P2PKH output; just send tx's first output back to an anyone-can-spend.
|
||||
sync_mempools(self.nodes)
|
||||
tx3.vin = [CTxIn(COutPoint(tx.sha256, 0), b"")]
|
||||
tx3.vout = [CTxOut(tx.vout[0].nValue-1000, CScript([OP_TRUE]))]
|
||||
tx3.wit.vtxinwit.append(CTxInWitness())
|
||||
tx3.wit.vtxinwit[0].scriptWitness.stack = [witness_program]
|
||||
tx3.rehash()
|
||||
self.test_node.test_transaction_acceptance(tx3, with_witness=True, accepted=True)
|
||||
else:
|
||||
# tx and tx2 didn't go anywhere; just clean up the p2sh_tx output.
|
||||
tx3.vin = [CTxIn(COutPoint(p2sh_tx.sha256, 0), CScript([witness_program]))]
|
||||
tx3.vout = [CTxOut(p2sh_tx.vout[0].nValue-1000, witness_program)]
|
||||
tx3.rehash()
|
||||
self.test_node.test_transaction_acceptance(tx3, with_witness=True, accepted=True)
|
||||
|
||||
self.nodes[0].generate(1)
|
||||
sync_blocks(self.nodes)
|
||||
self.utxo.pop(0)
|
||||
self.utxo.append(UTXO(tx3.sha256, 0, tx3.vout[0].nValue))
|
||||
assert_equal(len(self.nodes[1].getrawmempool()), 0)
|
||||
|
||||
|
||||
# Verify that future segwit upgraded transactions are non-standard,
|
||||
# but valid in blocks. Can run this before and after segwit activation.
|
||||
def test_segwit_versions(self):
|
||||
@@ -1658,6 +1734,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||
self.test_witness_tx_relay_before_segwit_activation()
|
||||
self.test_block_relay(segwit_activated=False)
|
||||
self.test_p2sh_witness(segwit_activated=False)
|
||||
self.test_standardness_v0(segwit_activated=False)
|
||||
|
||||
sync_blocks(self.nodes)
|
||||
|
||||
@@ -1679,6 +1756,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||
self.test_witness_input_length()
|
||||
self.test_block_relay(segwit_activated=True)
|
||||
self.test_tx_relay_after_segwit_activation()
|
||||
self.test_standardness_v0(segwit_activated=True)
|
||||
self.test_segwit_versions()
|
||||
self.test_premature_coinbase_witness_spend()
|
||||
self.test_signature_version_1()
|
||||
|
||||
@@ -69,6 +69,11 @@ def getutxo(txid):
|
||||
utxo["txid"] = txid
|
||||
return utxo
|
||||
|
||||
def find_unspent(node, min_value):
|
||||
for utxo in node.listunspent():
|
||||
if utxo['amount'] >= min_value:
|
||||
return utxo
|
||||
|
||||
class SegWitTest(BitcoinTestFramework):
|
||||
|
||||
def setup_chain(self):
|
||||
@@ -117,8 +122,21 @@ class SegWitTest(BitcoinTestFramework):
|
||||
sync_blocks(self.nodes)
|
||||
|
||||
def run_test(self):
|
||||
self.nodes[0].generate(160) #block 160
|
||||
self.nodes[0].generate(161) #block 161
|
||||
|
||||
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['sigoplimit'] == 20000)
|
||||
assert(tmpl['transactions'][0]['hash'] == txid)
|
||||
assert(tmpl['transactions'][0]['sigops'] == 2)
|
||||
tmpl = self.nodes[0].getblocktemplate({'rules':['segwit']})
|
||||
assert(tmpl['sigoplimit'] == 20000)
|
||||
assert(tmpl['transactions'][0]['hash'] == txid)
|
||||
assert(tmpl['transactions'][0]['sigops'] == 2)
|
||||
self.nodes[0].generate(1) #block 162
|
||||
|
||||
balance_presetup = self.nodes[0].getbalance()
|
||||
self.pubkey = []
|
||||
p2sh_ids = [] # p2sh_ids[NODE][VER] is an array of txids that spend to a witness version VER pkscript to an address for NODE embedded in p2sh
|
||||
wit_ids = [] # wit_ids[NODE][VER] is an array of txids that spend to a witness version VER pkscript to an address for NODE via bare witness
|
||||
@@ -137,18 +155,18 @@ class SegWitTest(BitcoinTestFramework):
|
||||
for i in range(5):
|
||||
for n in range(3):
|
||||
for v in range(2):
|
||||
wit_ids[n][v].append(send_to_witness(v, self.nodes[0], self.nodes[0].listunspent()[0], self.pubkey[n], False, Decimal("49.999")))
|
||||
p2sh_ids[n][v].append(send_to_witness(v, self.nodes[0], self.nodes[0].listunspent()[0], self.pubkey[n], True, Decimal("49.999")))
|
||||
wit_ids[n][v].append(send_to_witness(v, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[n], False, Decimal("49.999")))
|
||||
p2sh_ids[n][v].append(send_to_witness(v, self.nodes[0], find_unspent(self.nodes[0], 50), self.pubkey[n], True, Decimal("49.999")))
|
||||
|
||||
self.nodes[0].generate(1) #block 161
|
||||
self.nodes[0].generate(1) #block 163
|
||||
sync_blocks(self.nodes)
|
||||
|
||||
# Make sure all nodes recognize the transactions as theirs
|
||||
assert_equal(self.nodes[0].getbalance(), 60*50 - 60*50 + 20*Decimal("49.999") + 50)
|
||||
assert_equal(self.nodes[0].getbalance(), balance_presetup - 60*50 + 20*Decimal("49.999") + 50)
|
||||
assert_equal(self.nodes[1].getbalance(), 20*Decimal("49.999"))
|
||||
assert_equal(self.nodes[2].getbalance(), 20*Decimal("49.999"))
|
||||
|
||||
self.nodes[0].generate(262) #block 423
|
||||
self.nodes[0].generate(260) #block 423
|
||||
sync_blocks(self.nodes)
|
||||
|
||||
print("Verify default node can't accept any witness format txs before fork")
|
||||
@@ -205,5 +223,25 @@ class SegWitTest(BitcoinTestFramework):
|
||||
self.success_mine(self.nodes[0], p2sh_ids[NODE_0][WIT_V0][0], True) #block 434
|
||||
self.success_mine(self.nodes[0], p2sh_ids[NODE_0][WIT_V1][0], True) #block 435
|
||||
|
||||
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['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
|
||||
|
||||
if __name__ == '__main__':
|
||||
SegWitTest().main()
|
||||
|
||||
@@ -31,7 +31,7 @@ class WalletHDTest(BitcoinTestFramework):
|
||||
tmpdir = self.options.tmpdir
|
||||
|
||||
# Make sure we use hd, keep masterkeyid
|
||||
masterkeyid = self.nodes[1].getwalletinfo()['masterkeyid']
|
||||
masterkeyid = self.nodes[1].getwalletinfo()['hdmasterkeyid']
|
||||
assert_equal(len(masterkeyid), 40)
|
||||
|
||||
# Import a non-HD private key in the HD wallet
|
||||
|
||||
@@ -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 12
|
||||
#define CLIENT_VERSION_REVISION 99
|
||||
#define CLIENT_VERSION_MINOR 13
|
||||
#define CLIENT_VERSION_REVISION 0
|
||||
#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)
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
|
||||
/** The maximum allowed size for a serialized block, in bytes (only for buffer size limits) */
|
||||
static const unsigned int MAX_BLOCK_SERIALIZED_SIZE = 4000000;
|
||||
/** The maximum allowed cost for a block, see BIP 141 (network rule) */
|
||||
static const unsigned int MAX_BLOCK_COST = 4000000;
|
||||
/** The maximum allowed weight for a block, see BIP 141 (network rule) */
|
||||
static const unsigned int MAX_BLOCK_WEIGHT = 4000000;
|
||||
/** The maximum allowed size for a block excluding witness data, in bytes (network rule) */
|
||||
static const unsigned int MAX_BLOCK_BASE_SIZE = 1000000;
|
||||
/** The maximum allowed number of signature check operations in a block (network rule) */
|
||||
|
||||
@@ -446,13 +446,13 @@ std::string HelpMessage(HelpMessageMode mode)
|
||||
strUsage += HelpMessageGroup(_("Node relay options:"));
|
||||
if (showDebug)
|
||||
strUsage += HelpMessageOpt("-acceptnonstdtxn", strprintf("Relay and mine \"non-standard\" transactions (%sdefault: %u)", "testnet/regtest only; ", !Params(CBaseChainParams::TESTNET).RequireStandard()));
|
||||
strUsage += HelpMessageOpt("-bytespersigop", strprintf(_("Minimum bytes per sigop in transactions we relay and mine (default: %u)"), DEFAULT_BYTES_PER_SIGOP));
|
||||
strUsage += HelpMessageOpt("-bytespersigop", strprintf(_("Equivalent bytes per sigop in transactions for relay and mining (default: %u)"), DEFAULT_BYTES_PER_SIGOP));
|
||||
strUsage += HelpMessageOpt("-datacarrier", strprintf(_("Relay and mine data carrier transactions (default: %u)"), DEFAULT_ACCEPT_DATACARRIER));
|
||||
strUsage += HelpMessageOpt("-datacarriersize", strprintf(_("Maximum size of data in data carrier transactions we relay and mine (default: %u)"), MAX_OP_RETURN_RELAY));
|
||||
strUsage += HelpMessageOpt("-mempoolreplacement", strprintf(_("Enable transaction replacement in the memory pool (default: %u)"), DEFAULT_ENABLE_REPLACEMENT));
|
||||
|
||||
strUsage += HelpMessageGroup(_("Block creation options:"));
|
||||
strUsage += HelpMessageOpt("-blockmaxcost=<n>", strprintf(_("Set maximum BIP141 block cost (default: %d)"), DEFAULT_BLOCK_MAX_COST));
|
||||
strUsage += HelpMessageOpt("-blockmaxweight=<n>", strprintf(_("Set maximum BIP141 block weight (default: %d)"), DEFAULT_BLOCK_MAX_WEIGHT));
|
||||
strUsage += HelpMessageOpt("-blockmaxsize=<n>", strprintf(_("Set maximum block size in bytes (default: %d)"), DEFAULT_BLOCK_MAX_SIZE));
|
||||
strUsage += HelpMessageOpt("-blockprioritysize=<n>", strprintf(_("Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), DEFAULT_BLOCK_PRIORITY_SIZE));
|
||||
if (showDebug)
|
||||
|
||||
23
src/main.cpp
23
src/main.cpp
@@ -74,7 +74,6 @@ bool fHavePruned = false;
|
||||
bool fPruneMode = false;
|
||||
bool fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG;
|
||||
bool fRequireStandard = true;
|
||||
unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP;
|
||||
bool fCheckBlockIndex = false;
|
||||
bool fCheckpointsEnabled = DEFAULT_CHECKPOINTS_ENABLED;
|
||||
size_t nCoinCacheUsage = 5000 * 300;
|
||||
@@ -694,8 +693,8 @@ bool AddOrphanTx(const CTransaction& tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(c
|
||||
// have been mined or received.
|
||||
// 100 orphans, each of which is at most 99,999 bytes big is
|
||||
// at most 10 megabytes of orphans and somewhat more byprev index (in the worst case):
|
||||
unsigned int sz = GetTransactionCost(tx);
|
||||
if (sz >= MAX_STANDARD_TX_COST)
|
||||
unsigned int sz = GetTransactionWeight(tx);
|
||||
if (sz >= MAX_STANDARD_TX_WEIGHT)
|
||||
{
|
||||
LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString());
|
||||
return false;
|
||||
@@ -1144,13 +1143,14 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
|
||||
}
|
||||
|
||||
// Reject transactions with witness before segregated witness activates (override with -prematurewitness)
|
||||
if (!GetBoolArg("-prematurewitness",false) && !tx.wit.IsNull() && !IsWitnessEnabled(chainActive.Tip(), Params().GetConsensus())) {
|
||||
bool witnessEnabled = IsWitnessEnabled(chainActive.Tip(), Params().GetConsensus());
|
||||
if (!GetBoolArg("-prematurewitness",false) && !tx.wit.IsNull() && !witnessEnabled) {
|
||||
return state.DoS(0, false, REJECT_NONSTANDARD, "no-witness-yet", true);
|
||||
}
|
||||
|
||||
// Rather not work on nonstandard transactions (unless -testnet/-regtest)
|
||||
string reason;
|
||||
if (fRequireStandard && !IsStandardTx(tx, reason))
|
||||
if (fRequireStandard && !IsStandardTx(tx, reason, witnessEnabled))
|
||||
return state.DoS(0, false, REJECT_NONSTANDARD, reason);
|
||||
|
||||
// Only accept nLockTime-using transactions that can be mined in the next
|
||||
@@ -1296,7 +1296,7 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
|
||||
// itself can contain sigops MAX_STANDARD_TX_SIGOPS is less than
|
||||
// MAX_BLOCK_SIGOPS; we still consider this an invalid rather than
|
||||
// merely non-standard transaction.
|
||||
if ((nSigOpsCost > MAX_STANDARD_TX_SIGOPS_COST) || (nBytesPerSigOp && nSigOpsCost > nSize * WITNESS_SCALE_FACTOR / nBytesPerSigOp))
|
||||
if (nSigOpsCost > MAX_STANDARD_TX_SIGOPS_COST)
|
||||
return state.DoS(0, false, REJECT_NONSTANDARD, "bad-txns-too-many-sigops", false,
|
||||
strprintf("%d", nSigOpsCost));
|
||||
|
||||
@@ -3596,13 +3596,13 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
|
||||
}
|
||||
|
||||
// After the coinbase witness nonce and commitment are verified,
|
||||
// we can check if the block cost passes (before we've checked the
|
||||
// coinbase witness, it would be possible for the cost to be too
|
||||
// we can check if the block weight passes (before we've checked the
|
||||
// coinbase witness, it would be possible for the weight to be too
|
||||
// large by filling up the coinbase witness, which doesn't change
|
||||
// the block hash, so we couldn't mark the block as permanently
|
||||
// failed).
|
||||
if (GetBlockCost(block) > MAX_BLOCK_COST) {
|
||||
return state.DoS(100, error("ContextualCheckBlock(): cost limit failed"), REJECT_INVALID, "bad-blk-cost");
|
||||
if (GetBlockWeight(block) > MAX_BLOCK_WEIGHT) {
|
||||
return state.DoS(100, error("ContextualCheckBlock(): weight limit failed"), REJECT_INVALID, "bad-blk-weight");
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -5343,7 +5343,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
|
||||
BlockMap::iterator it = mapBlockIndex.find(req.blockhash);
|
||||
if (it == mapBlockIndex.end() || !(it->second->nStatus & BLOCK_HAVE_DATA)) {
|
||||
Misbehaving(pfrom->GetId(), 100);
|
||||
LogPrintf("Peer %d sent us a getblocktxn for a block we don't have", pfrom->id);
|
||||
return true;
|
||||
}
|
||||
@@ -5627,8 +5626,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
std::vector<CInv> vInv(1);
|
||||
vInv[0] = CInv(MSG_BLOCK, cmpctblock.header.GetHash());
|
||||
pfrom->PushMessage(NetMsgType::GETDATA, vInv);
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we're not close to tip yet, give up and let parallel block fetch work its magic
|
||||
|
||||
@@ -124,7 +124,6 @@ static const int64_t DEFAULT_MAX_TIP_AGE = 24 * 60 * 60;
|
||||
|
||||
/** Default for -permitbaremultisig */
|
||||
static const bool DEFAULT_PERMIT_BAREMULTISIG = true;
|
||||
static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20;
|
||||
static const bool DEFAULT_CHECKPOINTS_ENABLED = true;
|
||||
static const bool DEFAULT_TXINDEX = false;
|
||||
static const unsigned int DEFAULT_BANSCORE_THRESHOLD = 100;
|
||||
@@ -155,7 +154,7 @@ typedef boost::unordered_map<uint256, CBlockIndex*, BlockHasher> BlockMap;
|
||||
extern BlockMap mapBlockIndex;
|
||||
extern uint64_t nLastBlockTx;
|
||||
extern uint64_t nLastBlockSize;
|
||||
extern uint64_t nLastBlockCost;
|
||||
extern uint64_t nLastBlockWeight;
|
||||
extern const std::string strMessageMagic;
|
||||
extern CWaitableCriticalSection csBestBlock;
|
||||
extern CConditionVariable cvBlockChange;
|
||||
@@ -165,7 +164,6 @@ extern int nScriptCheckThreads;
|
||||
extern bool fTxIndex;
|
||||
extern bool fIsBareMultisigStd;
|
||||
extern bool fRequireStandard;
|
||||
extern unsigned int nBytesPerSigOp;
|
||||
extern bool fCheckBlockIndex;
|
||||
extern bool fCheckpointsEnabled;
|
||||
extern size_t nCoinCacheUsage;
|
||||
|
||||
@@ -45,7 +45,7 @@ using namespace std;
|
||||
|
||||
uint64_t nLastBlockTx = 0;
|
||||
uint64_t nLastBlockSize = 0;
|
||||
uint64_t nLastBlockCost = 0;
|
||||
uint64_t nLastBlockWeight = 0;
|
||||
|
||||
class ScoreCompare
|
||||
{
|
||||
@@ -77,30 +77,30 @@ BlockAssembler::BlockAssembler(const CChainParams& _chainparams)
|
||||
: chainparams(_chainparams)
|
||||
{
|
||||
// Block resource limits
|
||||
// If neither -blockmaxsize or -blockmaxcost is given, limit to DEFAULT_BLOCK_MAX_*
|
||||
// If neither -blockmaxsize or -blockmaxweight is given, limit to DEFAULT_BLOCK_MAX_*
|
||||
// If only one is given, only restrict the specified resource.
|
||||
// If both are given, restrict both.
|
||||
nBlockMaxCost = DEFAULT_BLOCK_MAX_COST;
|
||||
nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT;
|
||||
nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE;
|
||||
bool fCostSet = false;
|
||||
if (mapArgs.count("-blockmaxcost")) {
|
||||
nBlockMaxCost = GetArg("-blockmaxcost", DEFAULT_BLOCK_MAX_COST);
|
||||
bool fWeightSet = false;
|
||||
if (mapArgs.count("-blockmaxweight")) {
|
||||
nBlockMaxWeight = GetArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT);
|
||||
nBlockMaxSize = MAX_BLOCK_SERIALIZED_SIZE;
|
||||
fCostSet = true;
|
||||
fWeightSet = true;
|
||||
}
|
||||
if (mapArgs.count("-blockmaxsize")) {
|
||||
nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
|
||||
if (!fCostSet) {
|
||||
nBlockMaxCost = nBlockMaxSize * WITNESS_SCALE_FACTOR;
|
||||
if (!fWeightSet) {
|
||||
nBlockMaxWeight = nBlockMaxSize * WITNESS_SCALE_FACTOR;
|
||||
}
|
||||
}
|
||||
|
||||
// Limit cost to between 4K and MAX_BLOCK_COST-4K for sanity:
|
||||
nBlockMaxCost = std::max((unsigned int)4000, std::min((unsigned int)(MAX_BLOCK_COST-4000), nBlockMaxCost));
|
||||
// Limit weight to between 4K and MAX_BLOCK_WEIGHT-4K for sanity:
|
||||
nBlockMaxWeight = std::max((unsigned int)4000, std::min((unsigned int)(MAX_BLOCK_WEIGHT-4000), nBlockMaxWeight));
|
||||
// Limit size to between 1K and MAX_BLOCK_SERIALIZED_SIZE-1K for sanity:
|
||||
nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SERIALIZED_SIZE-1000), nBlockMaxSize));
|
||||
|
||||
// Whether we need to account for byte usage (in addition to cost usage)
|
||||
// Whether we need to account for byte usage (in addition to weight usage)
|
||||
fNeedSizeAccounting = (nBlockMaxSize < MAX_BLOCK_SERIALIZED_SIZE-1000);
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ void BlockAssembler::resetBlock()
|
||||
|
||||
// Reserve space for coinbase tx
|
||||
nBlockSize = 1000;
|
||||
nBlockCost = 4000;
|
||||
nBlockWeight = 4000;
|
||||
nBlockSigOpsCost = 400;
|
||||
fIncludeWitness = false;
|
||||
|
||||
@@ -167,7 +167,7 @@ CBlockTemplate* BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn)
|
||||
|
||||
nLastBlockTx = nBlockTx;
|
||||
nLastBlockSize = nBlockSize;
|
||||
nLastBlockCost = nBlockCost;
|
||||
nLastBlockWeight = nBlockWeight;
|
||||
LogPrintf("CreateNewBlock(): total size %u txs: %u fees: %ld sigops %d\n", nBlockSize, nBlockTx, nFees, nBlockSigOpsCost);
|
||||
|
||||
// Create coinbase transaction.
|
||||
@@ -187,7 +187,7 @@ CBlockTemplate* BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn)
|
||||
UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev);
|
||||
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, chainparams.GetConsensus());
|
||||
pblock->nNonce = 0;
|
||||
pblocktemplate->vTxSigOpsCost[0] = GetLegacySigOpCount(pblock->vtx[0]);
|
||||
pblocktemplate->vTxSigOpsCost[0] = WITNESS_SCALE_FACTOR * GetLegacySigOpCount(pblock->vtx[0]);
|
||||
|
||||
CValidationState state;
|
||||
if (!TestBlockValidity(state, chainparams, *pblock, pindexPrev, false, false)) {
|
||||
@@ -223,8 +223,8 @@ void BlockAssembler::onlyUnconfirmed(CTxMemPool::setEntries& testSet)
|
||||
|
||||
bool BlockAssembler::TestPackage(uint64_t packageSize, int64_t packageSigOpsCost)
|
||||
{
|
||||
// TODO: switch to cost-based accounting for packages instead of vsize-based accounting.
|
||||
if (nBlockCost + WITNESS_SCALE_FACTOR * packageSize >= nBlockMaxCost)
|
||||
// TODO: switch to weight-based accounting for packages instead of vsize-based accounting.
|
||||
if (nBlockWeight + WITNESS_SCALE_FACTOR * packageSize >= nBlockMaxWeight)
|
||||
return false;
|
||||
if (nBlockSigOpsCost + packageSigOpsCost >= MAX_BLOCK_SIGOPS_COST)
|
||||
return false;
|
||||
@@ -257,17 +257,17 @@ bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& packa
|
||||
|
||||
bool BlockAssembler::TestForBlock(CTxMemPool::txiter iter)
|
||||
{
|
||||
if (nBlockCost + iter->GetTxCost() >= nBlockMaxCost) {
|
||||
if (nBlockWeight + iter->GetTxWeight() >= nBlockMaxWeight) {
|
||||
// If the block is so close to full that no more txs will fit
|
||||
// or if we've tried more than 50 times to fill remaining space
|
||||
// then flag that the block is finished
|
||||
if (nBlockCost > nBlockMaxCost - 400 || lastFewTxs > 50) {
|
||||
if (nBlockWeight > nBlockMaxWeight - 400 || lastFewTxs > 50) {
|
||||
blockFinished = true;
|
||||
return false;
|
||||
}
|
||||
// Once we're within 4000 cost of a full block, only look at 50 more txs
|
||||
// Once we're within 4000 weight of a full block, only look at 50 more txs
|
||||
// to try to fill the remaining space.
|
||||
if (nBlockCost > nBlockMaxCost - 4000) {
|
||||
if (nBlockWeight > nBlockMaxWeight - 4000) {
|
||||
lastFewTxs++;
|
||||
}
|
||||
return false;
|
||||
@@ -315,7 +315,7 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
|
||||
if (fNeedSizeAccounting) {
|
||||
nBlockSize += ::GetSerializeSize(iter->GetTx(), SER_NETWORK, PROTOCOL_VERSION);
|
||||
}
|
||||
nBlockCost += iter->GetTxCost();
|
||||
nBlockWeight += iter->GetTxWeight();
|
||||
++nBlockTx;
|
||||
nBlockSigOpsCost += iter->GetSigOpCost();
|
||||
nFees += iter->GetFee();
|
||||
|
||||
@@ -141,11 +141,11 @@ private:
|
||||
|
||||
// Configuration parameters for the block size
|
||||
bool fIncludeWitness;
|
||||
unsigned int nBlockMaxCost, nBlockMaxSize;
|
||||
unsigned int nBlockMaxWeight, nBlockMaxSize;
|
||||
bool fNeedSizeAccounting;
|
||||
|
||||
// Information on the current status of the block
|
||||
uint64_t nBlockCost;
|
||||
uint64_t nBlockWeight;
|
||||
uint64_t nBlockSize;
|
||||
uint64_t nBlockTx;
|
||||
uint64_t nBlockSigOpsCost;
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
* DUP CHECKSIG DROP ... repeated 100 times... OP_1
|
||||
*/
|
||||
|
||||
bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType)
|
||||
bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType, const bool witnessEnabled)
|
||||
{
|
||||
std::vector<std::vector<unsigned char> > vSolutions;
|
||||
if (!Solver(scriptPubKey, whichType, vSolutions))
|
||||
@@ -50,10 +50,13 @@ bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType)
|
||||
(!fAcceptDatacarrier || scriptPubKey.size() > nMaxDatacarrierBytes))
|
||||
return false;
|
||||
|
||||
else if (!witnessEnabled && (whichType == TX_WITNESS_V0_KEYHASH || whichType == TX_WITNESS_V0_SCRIPTHASH))
|
||||
return false;
|
||||
|
||||
return whichType != TX_NONSTANDARD;
|
||||
}
|
||||
|
||||
bool IsStandardTx(const CTransaction& tx, std::string& reason)
|
||||
bool IsStandardTx(const CTransaction& tx, std::string& reason, const bool witnessEnabled)
|
||||
{
|
||||
if (tx.nVersion > CTransaction::MAX_STANDARD_VERSION || tx.nVersion < 1) {
|
||||
reason = "version";
|
||||
@@ -64,8 +67,8 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason)
|
||||
// almost as much to process as they cost the sender in fees, because
|
||||
// computing signature hashes is O(ninputs*txsize). Limiting transactions
|
||||
// to MAX_STANDARD_TX_SIZE mitigates CPU exhaustion attacks.
|
||||
unsigned int sz = GetTransactionCost(tx);
|
||||
if (sz >= MAX_STANDARD_TX_COST) {
|
||||
unsigned int sz = GetTransactionWeight(tx);
|
||||
if (sz >= MAX_STANDARD_TX_WEIGHT) {
|
||||
reason = "tx-size";
|
||||
return false;
|
||||
}
|
||||
@@ -92,7 +95,7 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason)
|
||||
unsigned int nDataOut = 0;
|
||||
txnouttype whichType;
|
||||
BOOST_FOREACH(const CTxOut& txout, tx.vout) {
|
||||
if (!::IsStandard(txout.scriptPubKey, whichType)) {
|
||||
if (!::IsStandard(txout.scriptPubKey, whichType, witnessEnabled)) {
|
||||
reason = "scriptpubkey";
|
||||
return false;
|
||||
}
|
||||
@@ -151,12 +154,14 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs)
|
||||
return true;
|
||||
}
|
||||
|
||||
int64_t GetVirtualTransactionSize(int64_t nCost)
|
||||
unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP;
|
||||
|
||||
int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost)
|
||||
{
|
||||
return (nCost + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
return (std::max(nWeight, nSigOpCost * nBytesPerSigOp) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
}
|
||||
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx)
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost)
|
||||
{
|
||||
return GetVirtualTransactionSize(GetTransactionCost(tx));
|
||||
return GetVirtualTransactionSize(GetTransactionWeight(tx), nSigOpCost);
|
||||
}
|
||||
|
||||
@@ -18,16 +18,18 @@ class CCoinsViewCache;
|
||||
static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000;
|
||||
/** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
|
||||
static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 0;
|
||||
/** Default for -blockmaxcost, which control the range of block costs the mining code will create **/
|
||||
static const unsigned int DEFAULT_BLOCK_MAX_COST = 3000000;
|
||||
/** The maximum size for transactions we're willing to relay/mine */
|
||||
static const unsigned int MAX_STANDARD_TX_COST = 400000;
|
||||
/** Default for -blockmaxweight, which controls the range of block weights the mining code will create **/
|
||||
static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = 3000000;
|
||||
/** The maximum weight for transactions we're willing to relay/mine */
|
||||
static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000;
|
||||
/** Maximum number of signature check operations in an IsStandard() P2SH script */
|
||||
static const unsigned int MAX_P2SH_SIGOPS = 15;
|
||||
/** The maximum number of sigops we're willing to relay/mine in a single tx */
|
||||
static const unsigned int MAX_STANDARD_TX_SIGOPS_COST = MAX_BLOCK_SIGOPS_COST/5;
|
||||
/** Default for -maxmempool, maximum megabytes of mempool memory usage */
|
||||
static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE = 300;
|
||||
/** Default for -bytespersigop */
|
||||
static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20;
|
||||
/**
|
||||
* Standard script verification flags that standard transactions will comply
|
||||
* with. However scripts violating these flags may still be present in valid
|
||||
@@ -53,12 +55,12 @@ static const unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_
|
||||
static const unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_VERIFY_SEQUENCE |
|
||||
LOCKTIME_MEDIAN_TIME_PAST;
|
||||
|
||||
bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType);
|
||||
bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType, const bool witnessEnabled = false);
|
||||
/**
|
||||
* Check for standard transaction types
|
||||
* @return True if all outputs (scriptPubKeys) use only standard transaction forms
|
||||
*/
|
||||
bool IsStandardTx(const CTransaction& tx, std::string& reason);
|
||||
bool IsStandardTx(const CTransaction& tx, std::string& reason, const bool witnessEnabled = false);
|
||||
/**
|
||||
* Check for standard transaction types
|
||||
* @param[in] mapInputs Map of previous transactions that have outputs we're spending
|
||||
@@ -66,8 +68,10 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason);
|
||||
*/
|
||||
bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
|
||||
|
||||
/** Compute the virtual transaction size (cost reinterpreted as bytes). */
|
||||
int64_t GetVirtualTransactionSize(int64_t nCost);
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx);
|
||||
extern unsigned int nBytesPerSigOp;
|
||||
|
||||
/** Compute the virtual transaction size (weight reinterpreted as bytes). */
|
||||
int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost);
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost = 0);
|
||||
|
||||
#endif // BITCOIN_POLICY_POLICY_H
|
||||
|
||||
@@ -32,11 +32,11 @@ std::string CBlock::ToString() const
|
||||
return s.str();
|
||||
}
|
||||
|
||||
int64_t GetBlockCost(const CBlock& block)
|
||||
int64_t GetBlockWeight(const CBlock& block)
|
||||
{
|
||||
// This implements the cost = (stripped_size * 4) + witness_size formula,
|
||||
// This implements the weight = (stripped_size * 4) + witness_size formula,
|
||||
// using only serialization with and without witness data. As witness_size
|
||||
// is equal to total_size - stripped_size, this formula is identical to:
|
||||
// cost = (stripped_size * 3) + total_size.
|
||||
// weight = (stripped_size * 3) + total_size.
|
||||
return ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * (WITNESS_SCALE_FACTOR - 1) + ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION);
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ struct CBlockLocator
|
||||
}
|
||||
};
|
||||
|
||||
/** Compute the consensus-critical block cost (see BIP 141). */
|
||||
int64_t GetBlockCost(const CBlock& tx);
|
||||
/** Compute the consensus-critical block weight (see BIP 141). */
|
||||
int64_t GetBlockWeight(const CBlock& tx);
|
||||
|
||||
#endif // BITCOIN_PRIMITIVES_BLOCK_H
|
||||
|
||||
@@ -121,7 +121,7 @@ unsigned int CTransaction::CalculateModifiedSize(unsigned int nTxSize) const
|
||||
// Providing any more cleanup incentive than making additional inputs free would
|
||||
// risk encouraging people to create junk outputs to redeem later.
|
||||
if (nTxSize == 0)
|
||||
nTxSize = (GetTransactionCost(*this) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
nTxSize = (GetTransactionWeight(*this) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
for (std::vector<CTxIn>::const_iterator it(vin.begin()); it != vin.end(); ++it)
|
||||
{
|
||||
unsigned int offset = 41U + std::min(110U, (unsigned int)it->scriptSig.size());
|
||||
@@ -149,7 +149,7 @@ std::string CTransaction::ToString() const
|
||||
return str;
|
||||
}
|
||||
|
||||
int64_t GetTransactionCost(const CTransaction& tx)
|
||||
int64_t GetTransactionWeight(const CTransaction& tx)
|
||||
{
|
||||
return ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * (WITNESS_SCALE_FACTOR -1) + ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
|
||||
}
|
||||
|
||||
@@ -459,7 +459,7 @@ struct CMutableTransaction
|
||||
uint256 GetHash() const;
|
||||
};
|
||||
|
||||
/** Compute the cost of a transaction, as defined by BIP 141 */
|
||||
int64_t GetTransactionCost(const CTransaction &tx);
|
||||
/** Compute the weight of a transaction, as defined by BIP 141 */
|
||||
int64_t GetTransactionWeight(const CTransaction &tx);
|
||||
|
||||
#endif // BITCOIN_PRIMITIVES_TRANSACTION_H
|
||||
|
||||
@@ -60,6 +60,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||
"Do not keep transactions in the mempool longer than <n> hours (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||
"Equivalent bytes per sigop in transactions for relay and mining (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||
"Error loading %s: You can't enable HD on a already existing non-HD wallet"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", ""
|
||||
"Error reading %s! All keys read correctly, but transaction data or address "
|
||||
@@ -284,7 +286,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Maintain at most <n> connections to peers (de
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Make the wallet broadcast transactions"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection send buffer, <n>*1000 bytes (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Minimum bytes per sigop in transactions we relay and mine (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Need to specify a port with -whitebind: '%s'"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Node relay options:"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Not enough file descriptors available."),
|
||||
@@ -311,7 +312,7 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to console instead of d
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Send transactions as zero-fee transactions if possible (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (%d to %d, default: %d)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to <n> (default: %u)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum BIP141 block cost (default: %d)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum BIP141 block weight (default: %d)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum block size in bytes (default: %d)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Set the number of threads to service RPC calls (default: %d)"),
|
||||
QT_TRANSLATE_NOOP("bitcoin-core", "Show all debugging options (usage: --help -help-debug)"),
|
||||
|
||||
@@ -2134,10 +2134,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Defineix la mida clau disponible a <n> (per defecte: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Defineix la mida de bloc mínima en bytes (per defecte: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Defineix el nombre de fils a crides de servei RPC (per defecte: %d)</translation>
|
||||
|
||||
@@ -1966,10 +1966,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Defineix la mida clau disponible a <n> (per defecte: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Defineix la mida de bloc mínima en bytes (per defecte: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Defineix el nombre de fils a crides de servei RPC (per defecte: %d)</translation>
|
||||
|
||||
@@ -2130,10 +2130,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Defineix la mida clau disponible a <n> (per defecte: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Defineix la mida de bloc mínima en bytes (per defecte: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Defineix el nombre de fils a crides de servei RPC (per defecte: %d)</translation>
|
||||
|
||||
@@ -2234,10 +2234,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Nastavit zásobník klíčů na velikost <n> (výchozí: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Nastavit minimální velikost bloku v bajtech (výchozí: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Nastavení počtu vláken pro servisní RPC volání (výchozí: %d)</translation>
|
||||
|
||||
@@ -2099,8 +2099,8 @@
|
||||
<translation>Sæt cache-størrelse for database i megabytes (%d til %d; standard: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Sæt maksimal blokudgift (standard: %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>Sæt maksimal BIP141-blokvægt (standard: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2531,10 +2531,6 @@
|
||||
<translation>Sæt nøglepuljestørrelse til <n> (standard: %u)
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Angiv minimumsblokstørrelse i byte (standard: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Angiv antallet af tråde til at håndtere RPC-kald (standard: %d)</translation>
|
||||
|
||||
@@ -809,6 +809,10 @@
|
||||
<source>User Interface &language:</source>
|
||||
<translation>&Sprache der Benutzeroberfläche:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The user interface language can be set here. This setting will take effect after restarting %1.</source>
|
||||
<translation>Die Benutzeroberflächensprache kann hier festgelegt werden. Diese Einstellung wird nach einem Neustart von %1 wirksam werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Unit to show amounts in:</source>
|
||||
<translation>&Einheit der Beträge:</translation>
|
||||
@@ -1886,6 +1890,10 @@
|
||||
<source>Cannot resolve -%s address: '%s'</source>
|
||||
<translation>Kann Adresse in -%s nicht auflösen: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change index out of range</source>
|
||||
<translation>Position des Wechselgelds außerhalb des Bereichs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect only to the specified node(s)</source>
|
||||
<translation>Mit nur dem oder den angegebenen Knoten verbinden</translation>
|
||||
@@ -2434,10 +2442,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Größe des Schlüsselpools festlegen auf <n> (Standard: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Minimale Blockgröße in Byte festlegen (Standard: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Maximale Anzahl an Threads zur Verarbeitung von RPC-Anfragen festlegen (Standard: %d)</translation>
|
||||
|
||||
@@ -2226,7 +2226,7 @@
|
||||
<context>
|
||||
<name>bitcoin-core</name>
|
||||
<message>
|
||||
<location filename="../bitcoinstrings.cpp" line="+292"/>
|
||||
<location filename="../bitcoinstrings.cpp" line="+293"/>
|
||||
<source>Options:</source>
|
||||
<translation>Options:</translation>
|
||||
</message>
|
||||
@@ -2236,17 +2236,17 @@
|
||||
<translation>Specify data directory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-89"/>
|
||||
<location line="-88"/>
|
||||
<source>Connect to a node to retrieve peer addresses, and disconnect</source>
|
||||
<translation>Connect to a node to retrieve peer addresses, and disconnect</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+92"/>
|
||||
<location line="+91"/>
|
||||
<source>Specify your own public address</source>
|
||||
<translation>Specify your own public address</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-108"/>
|
||||
<location line="-107"/>
|
||||
<source>Accept command line and JSON-RPC commands</source>
|
||||
<translation>Accept command line and JSON-RPC commands</translation>
|
||||
</message>
|
||||
@@ -2286,7 +2286,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+40"/>
|
||||
<location line="+39"/>
|
||||
<source>Pruning blockstore...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2301,12 +2301,12 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-121"/>
|
||||
<location line="-120"/>
|
||||
<source>Accept connections from outside (default: 1 if no -proxy or -connect)</source>
|
||||
<translation>Accept connections from outside (default: 1 if no -proxy or -connect)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-206"/>
|
||||
<location line="-208"/>
|
||||
<source>Bitcoin Core</source>
|
||||
<translation type="unfinished">Bitcoin Core</translation>
|
||||
</message>
|
||||
@@ -2352,6 +2352,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<source>Equivalent bytes per sigop in transactions for relay and mining (default: %u)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Error loading %s: You can't enable HD on a already existing non-HD wallet</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2631,12 +2636,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<source>Minimum bytes per sigop in transactions we relay and mine (default: %u)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+7"/>
|
||||
<source>Not enough file descriptors available.</source>
|
||||
<translation>Not enough file descriptors available.</translation>
|
||||
</message>
|
||||
@@ -2686,7 +2686,12 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+2"/>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2761,7 +2766,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-321"/>
|
||||
<location line="-322"/>
|
||||
<source>Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2786,7 +2791,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<location line="+15"/>
|
||||
<source>Error: Listening for incoming connections failed (listen returned error %s)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2906,7 +2911,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+14"/>
|
||||
<location line="+13"/>
|
||||
<source>Need to specify a port with -whitebind: '%s'</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2941,12 +2946,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Set maximum BIP141 block cost (default: %d)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+6"/>
|
||||
<source>Show all debugging options (usage: --help -help-debug)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -3046,7 +3046,7 @@
|
||||
<translation>Password for JSON-RPC connections</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-218"/>
|
||||
<location line="-217"/>
|
||||
<source>Execute command when the best block changes (%s in cmd is replaced by block hash)</source>
|
||||
<translation>Execute command when the best block changes (%s in cmd is replaced by block hash)</translation>
|
||||
</message>
|
||||
@@ -3061,7 +3061,7 @@
|
||||
<translation>Loading addresses...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-264"/>
|
||||
<location line="-266"/>
|
||||
<source>(1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -3081,7 +3081,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+21"/>
|
||||
<location line="+23"/>
|
||||
<source>Fees (in %s/kB) smaller than this are considered zero fee for transaction creation (default: %s)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -3206,7 +3206,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<location line="+7"/>
|
||||
<source>Prepend debug output with timestamp (default: %u)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -3261,7 +3261,7 @@
|
||||
<translation>Unknown network specified in -onlynet: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-73"/>
|
||||
<location line="-72"/>
|
||||
<source>Insufficient funds</source>
|
||||
<translation>Insufficient funds</translation>
|
||||
</message>
|
||||
@@ -3291,12 +3291,12 @@
|
||||
<translation>Cannot write default address</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+78"/>
|
||||
<location line="+77"/>
|
||||
<source>Rescanning...</source>
|
||||
<translation>Rescanning...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-67"/>
|
||||
<location line="-66"/>
|
||||
<source>Done loading</source>
|
||||
<translation>Done loading</translation>
|
||||
</message>
|
||||
|
||||
@@ -2098,10 +2098,6 @@
|
||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||
<translation>Set database cache size in megabytes (%d to %d, default: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Set maximum block cost (default: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
<translation>Set maximum block size in bytes (default: %d)</translation>
|
||||
@@ -2530,10 +2526,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Set key pool size to <n> (default: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Set minimum block size in bytes (default: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Set the number of threads to service RPC calls (default: %d)</translation>
|
||||
|
||||
@@ -2098,8 +2098,8 @@
|
||||
<translation>Asignar tamaño de cache en megabytes (entre %d y %d; predeterminado: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Establecer tamaño máximo de bloque (por defecto: %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>Establecer peso máximo bloque BIP141 (predeterminado: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2519,10 +2519,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Ajustar el número de claves en reserva <n> (predeterminado: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Establecer tamaño mínimo de bloque en bytes (por defecto: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Establecer el número de procesos para llamadas del servicio RPC (por defecto: %d)</translation>
|
||||
|
||||
@@ -197,6 +197,10 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>Intro</name>
|
||||
<message>
|
||||
<source>Welcome</source>
|
||||
<translation>bienvenido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Error</translation>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<TS language="et" version="2.1">
|
||||
<context>
|
||||
<name>AddressBookPage</name>
|
||||
<message>
|
||||
<source>Right-click to edit address or label</source>
|
||||
<translation>Paremkliki aadressi või sildi muutmiseks</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create a new address</source>
|
||||
<translation>Loo uus aadress</translation>
|
||||
|
||||
@@ -512,10 +512,6 @@
|
||||
<source>Loading addresses...</source>
|
||||
<translation>لود شدن آدرسها..</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>تنظیم کمینه اندازه بلاک بر حسب بایت (پیش فرض: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>تنظیم تعداد ریسمان ها برای سرویس دهی فراخوانی های RPC (پیش فرض: %d)</translation>
|
||||
|
||||
@@ -1037,6 +1037,14 @@
|
||||
<source>User Agent</source>
|
||||
<translation>Käyttöliittymä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Decrease font size</source>
|
||||
<translation>Pienennä fontin kokoa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Increase font size</source>
|
||||
<translation>Suurenna fontin kokoa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Services</source>
|
||||
<translation>Palvelut</translation>
|
||||
@@ -1508,6 +1516,10 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>ShutdownWindow</name>
|
||||
<message>
|
||||
<source>%1 is shutting down...</source>
|
||||
<translation>%1 sulkeutuu...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do not shut down the computer until this window disappears.</source>
|
||||
<translation>Älä sammuta tietokonetta ennenkuin tämä ikkuna katoaa.</translation>
|
||||
@@ -1690,6 +1702,10 @@
|
||||
<source>Bitcoin Core</source>
|
||||
<translation>Bitcoin-ydin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The %s developers</source>
|
||||
<translation>%s kehittäjät</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>-fallbackfee is set very high! This is the transaction fee you may pay when fee estimates are not available.</source>
|
||||
<translation>-fallbackfee on asetettu erittäin suureksi! Tämä on rahansiirtokulu jonka voit maksaa kun arvioitu rahansirtokulu ei ole saatavilla.</translation>
|
||||
@@ -1702,6 +1718,10 @@
|
||||
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
|
||||
<translation>Suorita käsky kun lompakossa rahansiirto muuttuu (%s cmd on vaihdettu TxID kanssa)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly.</source>
|
||||
<translation>Tarkistathan että tietokoneesi päivämäärä ja kellonaika ovat oikeassa! Jos kellosi on väärässä, %s ei toimi oikein.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
||||
<translation>Aseta script varmistuksen threadien lukumäärä (%u - %d, 0= auto, <0 = jätä näin monta ydintä vapaaksi, oletus: %d)</translation>
|
||||
@@ -2066,10 +2086,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Aseta avainaltaan kooksi <n> (oletus: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Aseta pienin mahdollinen lohkokoko tavuina (oletus: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Aseta RPC-kutsujen palvelemiseen tarkoitettujen säikeiden lukumäärä (oletus: %d)</translation>
|
||||
|
||||
@@ -2071,8 +2071,8 @@
|
||||
<translation>Définir la taille du cache de la base de données en mégaoctets (%d to %d, default: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Définir le coût maximal de bloc (par défaut : %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>Définir le poids maximal de bloc BIP141 (par défaut : %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2494,10 +2494,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Définir la taille de la réserve de clefs à <n> (par défaut : %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Définir la taille de bloc minimale en octets (par défaut : %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Définir le nombre d'exétrons pour desservir les appels RPC (par défaut : %d)</translation>
|
||||
|
||||
@@ -63,7 +63,15 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>BanTableModel</name>
|
||||
</context>
|
||||
<message>
|
||||
<source>IP/Netmask</source>
|
||||
<translation>IP-cím/maszk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned Until</source>
|
||||
<translation>Kitiltás vége</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>BitcoinGUI</name>
|
||||
<message>
|
||||
@@ -869,6 +877,10 @@
|
||||
<source>&Peers</source>
|
||||
<translation>&Peerek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned peers</source>
|
||||
<translation>Kitiltott felek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select a peer to view detailed information.</source>
|
||||
<translation>Peer kijelölése a részletes információkért</translation>
|
||||
@@ -941,6 +953,10 @@
|
||||
<source>Clear console</source>
|
||||
<translation>Konzol törlése</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ban Node for</source>
|
||||
<translation>Kitiltás oka</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>1 &hour</source>
|
||||
<translation>1 &óra</translation>
|
||||
@@ -957,6 +973,10 @@
|
||||
<source>1 &year</source>
|
||||
<translation>1 &év</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Unban Node</source>
|
||||
<translation>Kitiltás &feloldása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen.</source>
|
||||
<translation>Navigálhat a fel és le nyilakkal, és <b>Ctrl-L</b> -vel törölheti a képernyőt.</translation>
|
||||
@@ -1362,6 +1382,10 @@
|
||||
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
|
||||
<translation>Parancs, amit akkor hajt végre, amikor egy tárca-tranzakció megváltozik (%s a parancsban lecserélődik a blokk TxID-re)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use UPnP to map the listening port (default: 1 when listening and no -proxy)</source>
|
||||
<translation>UPnP használata porttovábbításra (alapértelmezett: 1, amikor kiszolgál és nem használt a -proxy)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect only to the specified node(s)</source>
|
||||
<translation>Csatlakozás csak a megadott csomóponthoz</translation>
|
||||
@@ -1406,6 +1430,10 @@
|
||||
<source>Incorrect or no genesis block found. Wrong datadir for network?</source>
|
||||
<translation>Helytelen vagy nemlétező genézis blokk. Helytelen hálózati adatkönyvtár?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading banlist...</source>
|
||||
<translation>Tiltólista betöltése...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not enough file descriptors available.</source>
|
||||
<translation>Nincs elég fájlleíró. </translation>
|
||||
@@ -1422,6 +1450,18 @@
|
||||
<source>Wallet options:</source>
|
||||
<translation>Tárca beállítások:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)</source>
|
||||
<translation>Saját IP-cím felfedezése (alapértelmezett: 1, amikor kiszolgál és nem használt a -externalip)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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</source>
|
||||
<translation>A fehérlistán szereplő felek nem lesznek automatikusan kitiltva és a tranzakcióik is mindig továbbítva lesznek, akkor is ha már a megerősítésre váró listán (mempool) vannak. Hasznos például összekötő csomópontokon (gateway).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(default: %u)</source>
|
||||
<translation>(alapértelmezett: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading from database, shutting down.</source>
|
||||
<translation>Hiba az adatbázis olvasásakor, leállítás</translation>
|
||||
@@ -1480,6 +1520,14 @@
|
||||
<source>Loading addresses...</source>
|
||||
<translation>Címek betöltése...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(default: %s)</source>
|
||||
<translation>(alapértelmezett: %s)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include IP addresses in debug output (default: %u)</source>
|
||||
<translation>IP-címek megjelenítése a naplóban (alapértelmezett: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid -proxy address: '%s'</source>
|
||||
<translation>Érvénytelen -proxy cím: '%s'</translation>
|
||||
|
||||
@@ -114,6 +114,10 @@
|
||||
<source>&About %1</source>
|
||||
<translation>&Informazioni su %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show information about %1</source>
|
||||
<translation>Mostra informazioni su %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About &Qt</source>
|
||||
<translation>Informazioni su &Qt</translation>
|
||||
@@ -126,6 +130,10 @@
|
||||
<source>&Options...</source>
|
||||
<translation>&Opzioni...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Modify configuration options for %1</source>
|
||||
<translation>Modifica le opzioni di configurazione per %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Encrypt Wallet...</source>
|
||||
<translation>&Cifra il portamonete...</translation>
|
||||
@@ -254,6 +262,14 @@
|
||||
<source>%n active connection(s) to Bitcoin network</source>
|
||||
<translation><numerusform>%n connessione attiva alla rete Bitcoin</numerusform><numerusform>%n connessioni alla rete Bitcoin attive</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Indexing blocks on disk...</source>
|
||||
<translation>Indicizzando i blocchi su disco...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Processing blocks on disk...</source>
|
||||
<translation>Processando i blocchi su disco...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No block source available...</source>
|
||||
<translation>Nessuna fonte di blocchi disponibile...</translation>
|
||||
@@ -310,6 +326,14 @@
|
||||
<source>Up to date</source>
|
||||
<translation>Aggiornato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the %1 help message to get a list with possible Bitcoin command-line options</source>
|
||||
<translation>Mostra il messaggio di aiuto di %1 per ottenere una lista di opzioni di comando per Bitcoin </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 client</source>
|
||||
<translation>%1 client</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Catching up...</source>
|
||||
<translation>In aggiornamento...</translation>
|
||||
@@ -532,13 +556,25 @@
|
||||
<source>Show splash screen on startup (default: %u)</source>
|
||||
<translation>Mostra schermata iniziale all'avvio (default: %u)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<message>
|
||||
<source>Reset all settings changed in the GUI</source>
|
||||
<translation>Reimposta tutti i campi dell'interfaccia grafica</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Intro</name>
|
||||
<message>
|
||||
<source>Welcome</source>
|
||||
<translation>Benvenuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to %1.</source>
|
||||
<translation>Benvenuto su %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>As this is the first time the program is launched, you can choose where %1 will store its data.</source>
|
||||
<translation>Dato che questa è la prima volta che il programma viene lanciato, puoi scegliere dove %1 salverà i suoi dati.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the default data directory</source>
|
||||
<translation>Usa la cartella dati predefinita</translation>
|
||||
@@ -593,6 +629,10 @@
|
||||
<source>&Main</source>
|
||||
<translation>&Principale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically start %1 after logging in to the system.</source>
|
||||
<translation>Avvia automaticamente %1 una volta effettuato l'accesso al sistema.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Size of &database cache</source>
|
||||
<translation>Dimensione della cache del &database.</translation>
|
||||
@@ -2259,10 +2299,6 @@ Per specificare più URL separarli con una barra verticale "|".</translation>
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Imposta la dimensione del pool di chiavi a <n> (predefinito: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Imposta la dimensione minima del blocco in byte (predefinito: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Imposta il numero di thread destinati a rispondere alle chiamate RPC (predefinito %d)</translation>
|
||||
|
||||
@@ -2100,8 +2100,8 @@
|
||||
<translation>データベースのキャッシュサイズをメガバイトで設定 (%dから%d。初期値: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>最大ブロックコストを設定 (初期値: %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>BIP141ブロック重みの最大値を設定 (初期値: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2531,10 +2531,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>key pool のサイズを <n> (初期値: %u) にセット</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>最小ブロックサイズをバイトで設定 (初期値: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>RPC サービスのスレッド数を設定 (初期値: %d)</translation>
|
||||
|
||||
@@ -310,6 +310,10 @@
|
||||
<source>Up to date</source>
|
||||
<translation>Oppdatert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 client</source>
|
||||
<translation>%1 klient</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Catching up...</source>
|
||||
<translation>Laster ned...</translation>
|
||||
@@ -496,6 +500,10 @@
|
||||
<source>(%1-bit)</source>
|
||||
<translation> (%1-bit)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About %1</source>
|
||||
<translation>Om %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Command-line options</source>
|
||||
<translation>Kommandolinjevalg</translation>
|
||||
@@ -539,6 +547,10 @@
|
||||
<source>Welcome</source>
|
||||
<translation>Velkommen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to %1.</source>
|
||||
<translation>Velkommen til %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the default data directory</source>
|
||||
<translation>Bruk standard datamappe</translation>
|
||||
@@ -2258,10 +2270,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Angi størrelse på nøkkel-lager til <n> (standardverdi: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Sett minimum blokkstørrelse i bytes (standardverdi: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Sett antall tråder til betjening av RPC-kall (standardverdi: %d)</translation>
|
||||
|
||||
@@ -2490,10 +2490,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Stel sleutelpoelgrootte in op <n> (standaard: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Stel minimum blokgrootte in in bytes (standaard: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Stel het aantal threads in om RPC-aanvragen mee te bedienen (standaard: %d)</translation>
|
||||
|
||||
@@ -1141,6 +1141,10 @@
|
||||
<source>Ping Time</source>
|
||||
<translation>Czas odpowiedzi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The duration of a currently outstanding ping.</source>
|
||||
<translation>Czas trwania nadmiarowego pingu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ping Wait</source>
|
||||
<translation>Czas odpowiedzi</translation>
|
||||
@@ -1755,6 +1759,10 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw
|
||||
<source>Prune configured below the minimum of %d MiB. Please use a higher number.</source>
|
||||
<translation>Przycinanie skonfigurowano poniżej minimalnych %d MiB. Proszę użyć wyższej liczby.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)</source>
|
||||
<translation>Prune: ostatnia synchronizacja portfela jest za danymi. Muszisz -reindexować (pobrać cały ciąg bloków ponownie w przypadku przyciętego węzła)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error: A fatal internal error occurred, see debug.log for details</source>
|
||||
<translation>Błąd: Wystąpił fatalny błąd wewnętrzny, sprawdź szczegóły w debug.log</translation>
|
||||
@@ -1871,6 +1879,10 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw
|
||||
<source>Block creation options:</source>
|
||||
<translation>Opcje tworzenia bloku:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot resolve -%s address: '%s'</source>
|
||||
<translation>Nie można rozpoznać -%s adresu: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect only to the specified node(s)</source>
|
||||
<translation>Łącz się tylko do wskazanego węzła/węzłów</translation>
|
||||
@@ -1967,6 +1979,14 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw
|
||||
<source>Keep the transaction memory pool below <n> megabytes (default: %u)</source>
|
||||
<translation>Utrzymuj obszar pamięci dla transakcji poniżej <n> MB (default: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading banlist...</source>
|
||||
<translation>Ładowanie listy zablokowanych...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Location of the auth cookie (default: data dir)</source>
|
||||
<translation>Lokalizacja autoryzacyjnego pliku cookie (domyślnie: ścieżka danych)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not enough file descriptors available.</source>
|
||||
<translation>Brak wystarczającej liczby deskryptorów plików. </translation>
|
||||
@@ -2011,6 +2031,10 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw
|
||||
<source>Specify wallet file (within data directory)</source>
|
||||
<translation>Określ plik portfela (w obrębie folderu danych)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The source code is available from %s.</source>
|
||||
<translation>Kod źródłowy dostępny jest z %s.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to bind to %s on this computer. %s is probably already running.</source>
|
||||
<translation>Nie można przywiązać do %s na tym komputerze. %s prawdopodobnie jest już uruchomiony.</translation>
|
||||
@@ -2211,6 +2235,10 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw
|
||||
<source>Tor control port password (default: empty)</source>
|
||||
<translation>Hasło zabezpieczające portu kontrolnego Tora (domyślnie: puste)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tor control port to use if onion listening enabled (default: %s)</source>
|
||||
<translation>Port kontrolny sieci Tor jeśli onion listening jest włączone (domyślnie: %s)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Transaction amount too small</source>
|
||||
<translation>Zbyt niska kwota transakcji </translation>
|
||||
@@ -2391,10 +2419,6 @@ Zwróć uwagę, że poprawnie zweryfikowana wiadomość potwierdza to, że nadaw
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Ustaw rozmiar puli kluczy na <n> (domyślnie: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Ustaw minimalny rozmiar bloku w bajtach (domyślnie: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Ustaw liczbę wątków do obsługi RPC (domyślnie: %d)</translation>
|
||||
|
||||
@@ -1567,7 +1567,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally.</source>
|
||||
<translation>A taxa será deduzida da quantia sendo enviada. O destinatário receberá menos bitcoins do que você colocou no campo de quantidade. Se varios destinatários estão selecionados, a taxa é dividida igualmente.</translation>
|
||||
<translation>A taxa será deduzida da quantia que está sendo enviada. O destinatário receberá menos bitcoins do que você colocou no campo de quantidade. Se vários destinatários estão selecionados, a taxa é dividida igualmente.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>S&ubtract fee from amount</source>
|
||||
@@ -1866,6 +1866,10 @@
|
||||
<source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source>
|
||||
<translation>Este pode ser um build de teste pré-lançamento - use por sua conta e risco - não use para mineração ou aplicações de comércio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source>
|
||||
<translation>Não foi possível reanalisar o banco de dados para o estado pre-fork. Você precisa rebaixar o blockchain</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use UPnP to map the listening port (default: 1 when listening and no -proxy)</source>
|
||||
<translation>Use UPnP para mapear a porta escutada (padrão: 1 quando escutando e sem -proxy)</translation>
|
||||
@@ -1882,6 +1886,10 @@
|
||||
<source>Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.</source>
|
||||
<translation>Lista Branca pares de ligação da máscara de rede dado ou o endereço IP . Pode ser especificado várias vezes.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%s corrupt, salvage failed</source>
|
||||
<translation>%s corrompido, recuperação falhou</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>-maxmempool must be at least %d MB</source>
|
||||
<translation>-maxmempool deve ser pelo menos %d MB</translation>
|
||||
@@ -1910,6 +1918,10 @@
|
||||
<source>Connection options:</source>
|
||||
<translation>Opções de conexão:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copyright (C) %i-%i</source>
|
||||
<translation>Copyright (C) %i-%i</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Corrupted block database detected</source>
|
||||
<translation>Detectado Banco de dados de blocos corrompido</translation>
|
||||
@@ -1954,6 +1966,22 @@
|
||||
<source>Error initializing wallet database environment %s!</source>
|
||||
<translation>Erro ao inicializar ambiente de banco de dados de carteira %s!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading %s</source>
|
||||
<translation>Erro ao carregar %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading %s: Wallet corrupted</source>
|
||||
<translation>Erro ao carregar %s Carteira corrompida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading %s: Wallet requires newer version of %s</source>
|
||||
<translation>Erro ao carregar %s A carteira requer a versão mais nova do %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading %s: You can't disable HD on a already existing HD wallet</source>
|
||||
<translation>Erro ao carregar %s: Você não pode desabilitar HD numa já existente carteira HD.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading block database</source>
|
||||
<translation>Erro ao carregar banco de dados de blocos</translation>
|
||||
@@ -1982,6 +2010,10 @@
|
||||
<source>Invalid -onion address: '%s'</source>
|
||||
<translation>Endereço -onion inválido: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid amount for -%s=<amount>: '%s'</source>
|
||||
<translation>Valor inválido para -%s=<amount>: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid amount for -fallbackfee=<amount>: '%s'</source>
|
||||
<translation>Valor inválido para -fallbackfee=<amount>: '%s'</translation>
|
||||
@@ -1990,6 +2022,10 @@
|
||||
<source>Keep the transaction memory pool below <n> megabytes (default: %u)</source>
|
||||
<translation>Mantenha a mempool de transações abaixo de <n> megabytes (padrão: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Loading banlist...</source>
|
||||
<translation>Carregando banlist...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Location of the auth cookie (default: data dir)</source>
|
||||
<translation>Localização do cookie de autenticação (padrão: diretório de dados)</translation>
|
||||
@@ -2018,6 +2054,10 @@
|
||||
<source>Prune mode is incompatible with -txindex.</source>
|
||||
<translation>O modo Prune é incompatível com -txindex.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rewinding blocks...</source>
|
||||
<translation>Reanalizando blocos...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||
<translation>Define o tamanho do cache do banco de dados em megabytes (%d para %d, padrão: %d)</translation>
|
||||
@@ -2030,6 +2070,10 @@
|
||||
<source>Specify wallet file (within data directory)</source>
|
||||
<translation>Especifique o arquivo da carteira (dentro do diretório de dados)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The source code is available from %s.</source>
|
||||
<translation>O código fonte está disponível pelo %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||
<translation>Argumento não suportado -benchmark ignorado, use -debug=bench.</translation>
|
||||
@@ -2062,6 +2106,14 @@
|
||||
<source>Wallet %s resides outside data directory %s</source>
|
||||
<translation>Carteira %s reside fora do diretório de dados %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet debugging/testing options:</source>
|
||||
<translation>Opções de depuração/teste da Carteira</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet needed to be rewritten: restart %s to complete</source>
|
||||
<translation>A Carteira precisou ser reescrita: reinicie o %s para completar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet options:</source>
|
||||
<translation>Opções da carteira:</translation>
|
||||
@@ -2426,10 +2478,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Defina o tamanho da chave para piscina<n> (padrão: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Definir tamanho mínimo do bloco, em bytes (padrão: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Defina o número de threads para chamadas do serviço RPC (padrão: %d)</translation>
|
||||
|
||||
@@ -2387,10 +2387,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Definir tamanho do banco de memória da chave para <n> (predefinição: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Definir tamanho minímo de um bloco em bytes (por defeito: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Defina o número de processos para servir as chamadas RPC (por defeito: %d)</translation>
|
||||
|
||||
@@ -63,9 +63,21 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>BanTableModel</name>
|
||||
</context>
|
||||
<message>
|
||||
<source>Banned Until</source>
|
||||
<translation>Blocat până</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>BitcoinGUI</name>
|
||||
<message>
|
||||
<source>Synchronizing with network...</source>
|
||||
<translation>Se sincronizează cu rețeaua</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Options...</source>
|
||||
<translation>&Opțiuni...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoinControlDialog</name>
|
||||
|
||||
@@ -1862,10 +1862,6 @@
|
||||
<source>Invalid -proxy address: '%s'</source>
|
||||
<translation>Adresa -proxy nevalidă: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Setare mărime minimă bloc în octeţi (implicit: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Specify configuration file (default: %s)</source>
|
||||
<translation>Specificaţi fişierul configuraţie (implicit: %s)</translation>
|
||||
|
||||
@@ -655,7 +655,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept connections from outside</source>
|
||||
<translation>Разрешать соединения извне</translation>
|
||||
<translation>Принимать входящие соединения</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Allow incoming connections</source>
|
||||
@@ -1802,6 +1802,10 @@
|
||||
<source>-fallbackfee is set very high! This is the transaction fee you may pay when fee estimates are not available.</source>
|
||||
<translation>Установлено очень большое значение -fallbackfee! Это комиссия за транзацию, которую вы можете заплатить, если оценка размера комиссии не доступна. </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: %d)</source>
|
||||
<translation>Принимать транзакции пересылаемые от узлов из белого списка даже если они не удовлетворяют требованиям ретрансляции (по умолчанию: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
|
||||
<translation>Привязаться к указанному адресу и всегда прослушивать только его. Используйте [хост]:порт для IPv6</translation>
|
||||
@@ -1818,6 +1822,10 @@
|
||||
<source>Distributed under the MIT software license, see the accompanying file COPYING or <http://www.opensource.org/licenses/mit-license.php>.</source>
|
||||
<translation>Распространяется под лицензией MIT, см. приложенный файл COPYING или <http://www.opensource.org/licenses/mit-license.php>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading %s: You can't enable HD on a already existing non-HD wallet</source>
|
||||
<translation>Ошибка загрузки %s: Вы не можете включить HD в уже существующем не-HD кошельке</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading %s! All keys read correctly, but transaction data or address book entries might be missing or incorrect.</source>
|
||||
<translation>Ошибка чтения %s! Все ключи прочитаны верно, но данные транзакций или записи адресной книги могут отсутствовать или быть неправильными.</translation>
|
||||
@@ -1846,6 +1854,10 @@
|
||||
<source>This is a pre-release test build - use at your own risk - do not use for mining or merchant applications</source>
|
||||
<translation>Это пре-релизная тестовая сборка - используйте на свой страх и риск - не используйте для добычи или торговых приложений</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain</source>
|
||||
<translation>Невозможно отмотать базу данных до пред-форкового состояния. Вам будет необходимо перекачать цепочку блоков.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use UPnP to map the listening port (default: 1 when listening and no -proxy)</source>
|
||||
<translation>Использовать UPnP для проброса порта (по умолчанию: 1, если используется прослушивание и нет -proxy)</translation>
|
||||
@@ -1862,6 +1874,10 @@
|
||||
<source>Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.</source>
|
||||
<translation>Вносить в белый список участников, подключающихся с указанной маски сети или IP. Можно использовать многократно.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You need to rebuild the database using -reindex-chainstate to change -txindex</source>
|
||||
<translation>Вам необходимо пересобрать базы данных с помощью -reindex-chainstate, чтобы изменить -txindex</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%s corrupt, salvage failed</source>
|
||||
<translation>%s поврежден, восстановить не удалось</translation>
|
||||
@@ -1886,6 +1902,14 @@
|
||||
<source>Block creation options:</source>
|
||||
<translation>Параметры создания блоков:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot resolve -%s address: '%s'</source>
|
||||
<translation>Не удаётся разрешить адрес в параметре -%s: '%s'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change index out of range</source>
|
||||
<translation>Изменение индекса вне диапазона</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect only to the specified node(s)</source>
|
||||
<translation>Подключаться только к указанному узлу(ам)</translation>
|
||||
@@ -1950,6 +1974,10 @@
|
||||
<source>Error loading %s: Wallet requires newer version of %s</source>
|
||||
<translation>Ошибка загрузки %s: Для бумажника требуется более новая версия %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading %s: You can't disable HD on a already existing HD wallet</source>
|
||||
<translation>Ошибка загрузки %s: Вы не можете включить HD в уже существующем не-HD кошельке</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error loading block database</source>
|
||||
<translation>Ошибка чтения базы данных блоков</translation>
|
||||
@@ -1974,6 +2002,10 @@
|
||||
<source>Incorrect or no genesis block found. Wrong datadir for network?</source>
|
||||
<translation>Неверный или отсутствующий начальный блок. Неправильный каталог данных для сети?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Initialization sanity check failed. %s is shutting down.</source>
|
||||
<translation>Начальная проверка исправности не удалась. %s завершает работу.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid -onion address: '%s'</source>
|
||||
<translation>Неверный -onion адрес: '%s'</translation>
|
||||
@@ -1994,6 +2026,10 @@
|
||||
<source>Location of the auth cookie (default: data dir)</source>
|
||||
<translation>Расположение куки входы(по умолчанию: data dir)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimum bytes per sigop in transactions we relay and mine (default: %u)</source>
|
||||
<translation>Минимально байт на sigop в транзакциях, которые мы ретранслируем и добываем (по умолчанию: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not enough file descriptors available.</source>
|
||||
<translation>Недостаточно файловых дескрипторов.</translation>
|
||||
@@ -2022,13 +2058,17 @@
|
||||
<source>Rebuild chain state from the currently indexed blocks</source>
|
||||
<translation>Перестроить индекс цепи из текущих индексированных блоков</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rewinding blocks...</source>
|
||||
<translation>Перемотка блоков...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||
<translation>Установить размер кэша БД в мегабайтах(от %d до %d, по умолчанию: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Задать максимальную стоимость блока (по умолчанию: %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>Задать максимальное BIP141 значение блока (по умолчанию: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2154,6 +2194,10 @@
|
||||
<source>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.</source>
|
||||
<translation>Этот продукт включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit <https://www.openssl.org/> и криптографическое ПО, написанное Eric Young и ПО для работы с UPnP, написанное Thomas Bernard.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use hierarchical deterministic key generation (HD) after BIP32. Only has effect during wallet creation/first start</source>
|
||||
<translation>Использовать иерархическую детерминированную генерацию ключей (HD) после BIP32. Применяется в процессе создания бумажника / первого запуска</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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</source>
|
||||
<translation>Участники из белого списка не могуть быть забанены за DoS, и их транзакции всегда транслируются, даже если они уже содержатся в памяти. Полезно, например, для шлюза.</translation>
|
||||
@@ -2374,6 +2418,10 @@
|
||||
<source>Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported.</source>
|
||||
<translation>Обнаружен не поддерживаемый аргумент -socks. Выбор версии SOCKS более невозможен, поддерживаются только прокси SOCKS5.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported argument -whitelistalwaysrelay ignored, use -whitelistrelay and/or -whitelistforcerelay.</source>
|
||||
<translation>Не поддерживаемый аргумент -whitelistalwaysrelay игнорируется, используйте -whitelistrelay и/или -whitelistforcerelay.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)</source>
|
||||
<translation>Использовать отдельный прокси SOCKS5 для соединения с участниками через скрытые сервисы Tor (по умолчанию: %s)</translation>
|
||||
@@ -2450,10 +2498,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Установить размер пула ключей в <n> (по умолчанию: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Задать минимальный размер блока в байтах (по умолчанию: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Задать число потоков выполнения запросов RPC (по умолчанию: %d)</translation>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<name>AddressBookPage</name>
|
||||
<message>
|
||||
<source>Right-click to edit address or label</source>
|
||||
<translation>Kliknutím pravým tlačidlom upravte adresu alebo popis</translation>
|
||||
<translation>Kliknutím pravým tlačidlom upraviť adresu alebo popis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create a new address</source>
|
||||
@@ -11,11 +11,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>&New</source>
|
||||
<translation>&Nové</translation>
|
||||
<translation>&Nový</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy the currently selected address to the system clipboard</source>
|
||||
<translation>Kopírovať práve zvolenú adresu do systémového klipbordu</translation>
|
||||
<translation>Zkopírovať práve zvolenú adresu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Copy</source>
|
||||
@@ -114,6 +114,10 @@
|
||||
<source>&About %1</source>
|
||||
<translation>&O %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show information about %1</source>
|
||||
<translation>Ukázať informácie o %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About &Qt</source>
|
||||
<translation>O &Qt</translation>
|
||||
@@ -126,6 +130,10 @@
|
||||
<source>&Options...</source>
|
||||
<translation>&Možnosti...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Modify configuration options for %1</source>
|
||||
<translation>Upraviť nastavenia pre %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Encrypt Wallet...</source>
|
||||
<translation>&Zašifrovať Peňaženku...</translation>
|
||||
@@ -254,6 +262,14 @@
|
||||
<source>%n active connection(s) to Bitcoin network</source>
|
||||
<translation><numerusform>%n aktívne pripojenie do siete Bitcoin</numerusform><numerusform>%n aktívne pripojenia do siete Bitcoin</numerusform><numerusform>%n aktívnych pripojení do siete Bitcoin</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Indexing blocks on disk...</source>
|
||||
<translation>Indexujem bloky na disku...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Processing blocks on disk...</source>
|
||||
<translation>Spracovávam bloky na disku...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No block source available...</source>
|
||||
<translation>Nedostupný zdroj blokov...</translation>
|
||||
@@ -310,6 +326,14 @@
|
||||
<source>Up to date</source>
|
||||
<translation>Aktualizovaný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the %1 help message to get a list with possible Bitcoin command-line options</source>
|
||||
<translation>Ukáž %1 zoznam možných nastavení Bitcoinu pomocou príkazového riadku</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 client</source>
|
||||
<translation>%1 klient</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Catching up...</source>
|
||||
<translation>Sťahujem...</translation>
|
||||
@@ -496,6 +520,10 @@
|
||||
<source>(%1-bit)</source>
|
||||
<translation>(%1-bit)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About %1</source>
|
||||
<translation>O %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Command-line options</source>
|
||||
<translation>Voľby príkazového riadku</translation>
|
||||
@@ -532,13 +560,25 @@
|
||||
<source>Show splash screen on startup (default: %u)</source>
|
||||
<translation>Zobraziť uvítaciu obrazovku pri štarte (predvolené: %u)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<message>
|
||||
<source>Reset all settings changed in the GUI</source>
|
||||
<translation>Zrušiť všetky zmeny v GUI</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Intro</name>
|
||||
<message>
|
||||
<source>Welcome</source>
|
||||
<translation>Vitajte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to %1.</source>
|
||||
<translation>Vitajte v %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>As this is the first time the program is launched, you can choose where %1 will store its data.</source>
|
||||
<translation>Keďže toto je prvé spustenie programu, môžete si vybrať, kam %1 bude ukladať vaše údaje.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the default data directory</source>
|
||||
<translation>Použiť predvolený dátový adresár</translation>
|
||||
@@ -593,6 +633,14 @@
|
||||
<source>&Main</source>
|
||||
<translation>&Hlavné</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically start %1 after logging in to the system.</source>
|
||||
<translation>Automaticky spustiť %1 pri spustení systému.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Start %1 on system login</source>
|
||||
<translation>&Spustiť %1 pri prihlásení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Size of &database cache</source>
|
||||
<translation>Veľkosť vyrovnávacej pamäti &databázy</translation>
|
||||
@@ -729,6 +777,14 @@
|
||||
<source>&Window</source>
|
||||
<translation>&Okno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Hide the icon from the system tray.</source>
|
||||
<translation>&Skryť ikonu zo systémovej lišty.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide tray icon</source>
|
||||
<translation>Skryť ikonu v oblasti oznámení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show only a tray icon after minimizing the window.</source>
|
||||
<translation>Zobraziť len ikonu na lište po minimalizovaní okna.</translation>
|
||||
@@ -749,6 +805,10 @@
|
||||
<source>User Interface &language:</source>
|
||||
<translation>Jazyk užívateľského rozhrania:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The user interface language can be set here. This setting will take effect after restarting %1.</source>
|
||||
<translation>Jazyk uživateľského rozhrania sa dá nastaviť tu. Toto nastavenie sa uplatní až po reštarte %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Unit to show amounts in:</source>
|
||||
<translation>&Zobrazovať hodnoty v jednotkách:</translation>
|
||||
@@ -1038,6 +1098,18 @@
|
||||
<source>User Agent</source>
|
||||
<translation>Aplikácia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open the %1 debug log file from the current data directory. This can take a few seconds for large log files.</source>
|
||||
<translation>Otvoriť %1 ladiaci výpis z aktuálnej zložky. Pre veľké súbory to môže chvíľu trvať.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Decrease font size</source>
|
||||
<translation>Zmenšiť písmo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Increase font size</source>
|
||||
<translation>Zväčšiť písmo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Services</source>
|
||||
<translation>Služby</translation>
|
||||
@@ -1517,6 +1589,10 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>ShutdownWindow</name>
|
||||
<message>
|
||||
<source>%1 is shutting down...</source>
|
||||
<translation>%1 sa vypína...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do not shut down the computer until this window disappears.</source>
|
||||
<translation>Nevypínajte počítač kým toto okno nezmizne.</translation>
|
||||
@@ -1651,6 +1727,14 @@
|
||||
<source>Accept command line and JSON-RPC commands</source>
|
||||
<translation>Prijímať príkazy z príkazového riadku a JSON-RPC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>If <category> is not supplied or if <category> = 1, output all debugging information.</source>
|
||||
<translation>Pokiaľ <category> nie je nastavená, alebo <category> = 1, vypíš všetky informácie pre ladenie.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Prune configured below the minimum of %d MiB. Please use a higher number.</source>
|
||||
<translation>Redukcia nastavená pod minimálnu hodnotu %d MiB. Prosím použite vyššiu hodnotu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error: A fatal internal error occurred, see debug.log for details</source>
|
||||
<translation>Chyba: Vyskytla sa interná chyba, pre viac informácií zobrazte debug.log</translation>
|
||||
@@ -1683,6 +1767,10 @@
|
||||
<source>Bind to given address and always listen on it. Use [host]:port notation for IPv6</source>
|
||||
<translation>Spojiť s danou adresou a vždy na nej počúvať. Použite zápis [host]:port pre IPv6</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot obtain a lock on data directory %s. %s is probably already running.</source>
|
||||
<translation>Nemožné uzamknúť zložku %s. %s pravdepodobne už beží.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup</source>
|
||||
<translation>Vymazať všetky transakcie z peňaženky a pri spustení znova získať z reťazca blokov iba tie získané pomocou -rescan</translation>
|
||||
@@ -1695,10 +1783,22 @@
|
||||
<source>Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)</source>
|
||||
<translation>Vykonaj príkaz keď sa zmení transakcia peňaženky (%s v príkaze je nahradená TxID)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please check that your computer's date and time are correct! If your clock is wrong, %s will not work properly.</source>
|
||||
<translation>Prosím skontrolujte systémový čas a dátum. Keď je váš čas nesprávny, %s nebude fungovať správne.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please contribute if you find %s useful. Visit %s for further information about the software.</source>
|
||||
<translation>Keď si myslíte, že %s je užitočný, podporte nás. Pre viac informácií o software navštívte %s.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)</source>
|
||||
<translation>Nastaviť počeť vlákien overujúcich skripty (%u až %d, 0 = auto, <0 = nechať toľkoto jadier voľných, prednastavené: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct</source>
|
||||
<translation>Databáza blokov obsahuje blok, ktorý vyzerá byť z budúcnosti. Toto môže byť spôsobené nesprávnym systémovým časom vášho počítača. Obnovujte databázu blokov len keď ste si istý, že systémový čas je nastavený správne.</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>Toto je pred-testovacia verzia - použitie je na vlastné riziko - nepoužívajte na tvorbu bitcoin ani obchodovanie.</translation>
|
||||
@@ -1729,6 +1829,10 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Block creation options:</source>
|
||||
<translation>Voľby vytvorenia bloku:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change index out of range</source>
|
||||
<translation>Menný index mimo rozsah</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect only to the specified node(s)</source>
|
||||
<translation>Pripojiť sa len k určenej nóde</translation>
|
||||
@@ -1737,6 +1841,10 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Connection options:</source>
|
||||
<translation>Možnosti pripojenia:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copyright (C) %i-%i</source>
|
||||
<translation>Copyright (C) %i-%i</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Corrupted block database detected</source>
|
||||
<translation>Zistená poškodená databáza blokov</translation>
|
||||
@@ -1765,6 +1873,10 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Enable publish raw block in <address></source>
|
||||
<translation>Povoliť zverejnenie raw bloku pre <address></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable publish raw transaction in <address></source>
|
||||
<translation>Povoliť publikovať hrubý prevod v <address></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error initializing block database</source>
|
||||
<translation>Chyba inicializácie databázy blokov</translation>
|
||||
@@ -1809,6 +1921,10 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Incorrect or no genesis block found. Wrong datadir for network?</source>
|
||||
<translation>Nesprávny alebo žiadny genesis blok nájdený. Nesprávny dátový priečinok alebo sieť?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Initialization sanity check failed. %s is shutting down.</source>
|
||||
<translation>Kontrola čistoty pri inicializácií zlyhala. %s sa vypína.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid -onion address: '%s'</source>
|
||||
<translation>Neplatná -onion adresa: '%s'</translation>
|
||||
@@ -1833,6 +1949,14 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Only connect to nodes in network <net> (ipv4, ipv6 or onion)</source>
|
||||
<translation>Pripojiť iba k uzlom v sieti <net> (ipv4, ipv6, alebo onion)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Print this help message and exit</source>
|
||||
<translation>Vytlačiť túto pomocnú správu a ukončiť</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Print version and exit</source>
|
||||
<translation>Vytlačiť verziu a ukončiť</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Prune cannot be configured with a negative value.</source>
|
||||
<translation>Redukovanie nemôže byť nastavené na zápornú hodnotu.</translation>
|
||||
@@ -1841,6 +1965,14 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Prune mode is incompatible with -txindex.</source>
|
||||
<translation>Redukovanie je nekompatibilné s -txindex.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rebuild chain state and block index from the blk*.dat files on disk</source>
|
||||
<translation>Obnoviť stav reťazca a index blokov zo súborov blk*.dat na disku.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rebuild chain state from the currently indexed blocks</source>
|
||||
<translation>Obnoviť stav reťazca z aktuálne indexovaných blokov.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||
<translation>Nastaviť veľkosť pomocnej pamäti databázy v megabajtoch (%d do %d, prednastavené: %d)</translation>
|
||||
@@ -1853,6 +1985,14 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Specify wallet file (within data directory)</source>
|
||||
<translation>Označ súbor peňaženky (v priečinku s dátami)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The source code is available from %s.</source>
|
||||
<translation>Zdrojový kód je dostupný z %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to bind to %s on this computer. %s is probably already running.</source>
|
||||
<translation>Nemožné pripojiť k %s na tomto počíťači. %s už pravdepodobne beží.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported argument -benchmark ignored, use -debug=bench.</source>
|
||||
<translation>Nepodporovaný parameter -benchmark bol ignorovaný, použite -debug=bench.</translation>
|
||||
@@ -1881,6 +2021,14 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Wallet %s resides outside data directory %s</source>
|
||||
<translation>Peňaženka %s sa nachádza mimo dátového priečinka %s </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet debugging/testing options:</source>
|
||||
<translation>Ladiace / testovacie možnosti peňaženky.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet needed to be rewritten: restart %s to complete</source>
|
||||
<translation>Peňaženka musí byť prepísaná: pre dokončenie reštartujte %s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet options:</source>
|
||||
<translation>Voľby peňaženky:</translation>
|
||||
@@ -1997,6 +2145,10 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>RPC server options:</source>
|
||||
<translation>Možnosti servra RPC:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rescan the block chain for missing wallet transactions on startup</source>
|
||||
<translation>Pri spustení skontrolovať reťaz blokov pre chýbajúce transakcie peňaženky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send trace/debug info to console instead of debug.log file</source>
|
||||
<translation>Odoslať trace/debug informácie na konzolu namiesto debug.info žurnálu</translation>
|
||||
@@ -2161,10 +2313,6 @@ The network does not appear to fully agree! Some miners appear to be experiencin
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Nastaviť veľkosť kľúča fronty na <n> (predvolené: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Nastaviť minimálnu veľkosť bloku v bajtoch (predvolené: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Nastaviť počet vlákien na obsluhu RPC volaní (predvolené: %d)</translation>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<TS language="sr" version="2.1">
|
||||
<context>
|
||||
<name>AddressBookPage</name>
|
||||
<message>
|
||||
<source>Right-click to edit address or label</source>
|
||||
<translation>Kliknite desnim klikom radi izmene adrese ili oznake</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create a new address</source>
|
||||
<translation>Napravite novu adresu</translation>
|
||||
@@ -17,10 +21,18 @@
|
||||
<source>&Copy</source>
|
||||
<translation>Kopirajte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>C&lose</source>
|
||||
<translation>Zatvorite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete the currently selected address from the list</source>
|
||||
<translation>Izbrisite trenutno izabranu adresu sa liste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export the data in the current tab to a file</source>
|
||||
<translation>Eksportuj podatke iz izabrane kartice u fajl</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Delete</source>
|
||||
<translation>&Избриши</translation>
|
||||
|
||||
@@ -2094,10 +2094,6 @@
|
||||
<source>Set database cache size in megabytes (%d to %d, default: %d)</source>
|
||||
<translation>Sätt databasens cachestorlek i megabyte (%d till %d, förvalt: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Sätt maximal blockkostnad (förvalt: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
<translation>Sätt maximal blockstorlek i byte (förvalt: %d)</translation>
|
||||
@@ -2526,10 +2522,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Sätt storleken på nyckelpoolen till <n> (förvalt: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Sätt minsta blockstorlek i byte (standard: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Ange antalet trådar för att hantera RPC anrop (förvalt: %d)</translation>
|
||||
|
||||
@@ -2099,8 +2099,8 @@
|
||||
<translation>Veritabanı önbellek boyutunu megabayt olarak belirt (%d ilâ %d, varsayılan: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>Azami blok maliyetini ayarla (varsayılan: %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>Azami BIP141 blok ağırlığını ayarla (varsayılan: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2530,10 +2530,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Anahtar alan boyutunu <n> değerine ayarla (varsayılan: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Bayt olarak asgari blok boyutunu tanımla (varsayılan: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Hizmet RCP aramaları iş parçacığı sayısını belirle (varsayılan: %d)</translation>
|
||||
|
||||
@@ -2262,10 +2262,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>Встановити розмір пулу ключів <n> (типово: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>Встановити мінімальний розмір блоку в байтах (типово: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>Встановити число потоків для обслуговування викликів RPC (типово: %d)</translation>
|
||||
|
||||
@@ -63,9 +63,25 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>BanTableModel</name>
|
||||
</context>
|
||||
<message>
|
||||
<source>IP/Netmask</source>
|
||||
<translation>IP/Netmask</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Banned Until</source>
|
||||
<translation>Bị cấm đến</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>BitcoinGUI</name>
|
||||
<message>
|
||||
<source>Sign &message...</source>
|
||||
<translation>Chứ ký & Tin nhắn...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Synchronizing with network...</source>
|
||||
<translation>Đồng bộ hóa với mạng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Overview</source>
|
||||
<translation>&Tổng quan</translation>
|
||||
@@ -74,6 +90,18 @@
|
||||
<source>Node</source>
|
||||
<translation>Node</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show general overview of wallet</source>
|
||||
<translation>Hiện thỉ thông tin sơ lược chung về Ví</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Transactions</source>
|
||||
<translation>&Giao dịch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse transaction history</source>
|
||||
<translation>Duyệt tìm lịch sử giao dịch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>E&xit</source>
|
||||
<translation>T&hoát</translation>
|
||||
@@ -82,6 +110,14 @@
|
||||
<source>Quit application</source>
|
||||
<translation>Thoát chương trình</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&About %1</source>
|
||||
<translation>&Thông tin về %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show information about %1</source>
|
||||
<translation>Hiện thông tin về %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About &Qt</source>
|
||||
<translation>Về &Qt</translation>
|
||||
@@ -90,6 +126,30 @@
|
||||
<source>Show information about Qt</source>
|
||||
<translation>Xem thông tin về Qt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Options...</source>
|
||||
<translation>&Tùy chọn...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Modify configuration options for %1</source>
|
||||
<translation>Chỉnh sửa thiết đặt tùy chọn cho %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Encrypt Wallet...</source>
|
||||
<translation>&Mã hóa ví tiền</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Backup Wallet...</source>
|
||||
<translation>&Sao lưu ví tiền...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Change Passphrase...</source>
|
||||
<translation>&Thay đổi mật khẩu...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Sending addresses...</source>
|
||||
<translation>&Địa chỉ gửi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Receiving addresses...</source>
|
||||
<translation>Địa chỉ nhận</translation>
|
||||
@@ -98,6 +158,30 @@
|
||||
<source>Open &URI...</source>
|
||||
<translation>Mở &URI...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Reindexing blocks on disk...</source>
|
||||
<translation>Đánh chỉ số (indexing) lại các khối (blocks) trên ổ đĩa ...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send coins to a Bitcoin address</source>
|
||||
<translation>Gửi coins đến tài khoản Bitcoin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Backup wallet to another location</source>
|
||||
<translation>Sao lưu ví tiền ở vị trí khác</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change the passphrase used for wallet encryption</source>
|
||||
<translation>Thay đổi cụm mật mã dùng cho mã hoá Ví</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Debug window</source>
|
||||
<translation>&Cửa sổ xử lý lỗi (debug)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Verify message...</source>
|
||||
<translation>&Tin nhắn xác thực</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bitcoin</source>
|
||||
<translation>Bitcoin</translation>
|
||||
@@ -122,6 +206,18 @@
|
||||
<source>Show or hide the main Window</source>
|
||||
<translation>Hiện hoặc ẩn cửa sổ chính</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Encrypt the private keys that belong to your wallet</source>
|
||||
<translation>Mã hoá các khoá bí mật trong Ví của bạn.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sign messages with your Bitcoin addresses to prove you own them</source>
|
||||
<translation>Dùng địa chỉ Bitcoin của bạn ký các tin nhắn để xác minh những nội dung tin nhắn đó là của bạn.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Verify messages to ensure they were signed with specified Bitcoin addresses</source>
|
||||
<translation>Kiểm tra các tin nhắn để chắc chắn rằng chúng được ký bằng các địa chỉ Bitcoin xác định.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&File</source>
|
||||
<translation>&File</translation>
|
||||
@@ -134,6 +230,30 @@
|
||||
<source>&Help</source>
|
||||
<translation>Trợ &giúp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tabs toolbar</source>
|
||||
<translation>Thanh công cụ (toolbar)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Request payments (generates QR codes and bitcoin: URIs)</source>
|
||||
<translation>Yêu cầu thanh toán(tạo mã QR và địa chỉ Bitcoin: URLs)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the list of used sending addresses and labels</source>
|
||||
<translation>Hiện thỉ danh sách các địa chỉ và nhãn đã dùng để gửi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the list of used receiving addresses and labels</source>
|
||||
<translation>Hiện thỉ danh sách các địa chỉ và nhãn đã dùng để nhận.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open a bitcoin: URI or payment request</source>
|
||||
<translation>Mở bitcoin:URL hoặc yêu cầu thanh toán</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Command-line options</source>
|
||||
<translation>7Tùy chọn dòng lệnh</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n hour(s)</source>
|
||||
<translation><numerusform>%n giờ</numerusform></translation>
|
||||
@@ -154,6 +274,18 @@
|
||||
<source>%n year(s)</source>
|
||||
<translation><numerusform>%n năm</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 behind</source>
|
||||
<translation>%1 chậm trễ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last received block was generated %1 ago.</source>
|
||||
<translation>Khối (block) cuối cùng nhận được cách đây %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Transactions after this will not yet be visible.</source>
|
||||
<translation>Những giao dịch sau đó sẽ không hiện thị.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Lỗi</translation>
|
||||
@@ -170,6 +302,40 @@
|
||||
<source>Up to date</source>
|
||||
<translation>Đã cập nhật</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Catching up...</source>
|
||||
<translation>Bắt kịp...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Date: %1
|
||||
</source>
|
||||
<translation>Ngày: %1
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Amount: %1
|
||||
</source>
|
||||
<translation>Số lượng: %1
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Type: %1
|
||||
</source>
|
||||
<translation>Loại: %1
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Label: %1
|
||||
</source>
|
||||
<translation>Nhãn hiệu: %1
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Address: %1
|
||||
</source>
|
||||
<translation>Địa chỉ: %1
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sent transaction</source>
|
||||
<translation>Giao dịch đã gửi</translation>
|
||||
@@ -178,7 +344,15 @@
|
||||
<source>Incoming transaction</source>
|
||||
<translation>Giao dịch đang tới</translation>
|
||||
</message>
|
||||
</context>
|
||||
<message>
|
||||
<source>Wallet is <b>encrypted</b> and currently <b>unlocked</b></source>
|
||||
<translation>Ví tiền <b> đã được mã hóa</b>và hiện <b>đang mở</b></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet is <b>encrypted</b> and currently <b>locked</b></source>
|
||||
<translation>Ví tiền <b> đã được mã hóa</b>và hiện <b>đang khóa</b></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CoinControlDialog</name>
|
||||
<message>
|
||||
@@ -201,10 +375,26 @@
|
||||
<source>Fee:</source>
|
||||
<translation>Phí:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>After Fee:</source>
|
||||
<translation>Sau thuế, phí:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change:</source>
|
||||
<translation>Thay đổi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(un)select all</source>
|
||||
<translation>(bỏ)chọn tất cả</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tree mode</source>
|
||||
<translation>Chế độ cây</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>List mode</source>
|
||||
<translation>Chế độ danh sách</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Amount</source>
|
||||
<translation>Lượng</translation>
|
||||
@@ -228,6 +418,10 @@
|
||||
</context>
|
||||
<context>
|
||||
<name>EditAddressDialog</name>
|
||||
<message>
|
||||
<source>Edit Address</source>
|
||||
<translation>Thay đổi địa chỉ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Label</source>
|
||||
<translation>Nhãn</translation>
|
||||
@@ -250,6 +444,30 @@
|
||||
<source>version</source>
|
||||
<translation>version</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(%1-bit)</source>
|
||||
<translation>(%1-bit)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Command-line options</source>
|
||||
<translation>&Tùy chọn dòng lệnh</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Usage:</source>
|
||||
<translation>Mức sử dụng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>command-line options</source>
|
||||
<translation>tùy chọn dòng lệnh</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set language, for example "de_DE" (default: system locale)</source>
|
||||
<translation>Chọn ngôn ngữ, ví dụ "de_DE" (mặc định: Vị trí hệ thống)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set SSL root certificates for payment request (default: -system-)</source>
|
||||
<translation>Đặt chứng nhận SSL gốc cho yêu cầu giao dịch (mặc định: -hệ thống-)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Intro</name>
|
||||
@@ -257,6 +475,10 @@
|
||||
<source>Welcome</source>
|
||||
<translation>Chào mừng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use the default data directory</source>
|
||||
<translation>Sử dụng vị trí dữ liệu mặc định</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Lỗi</translation>
|
||||
@@ -287,14 +509,58 @@
|
||||
<source>MB</source>
|
||||
<translation>MB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept connections from outside</source>
|
||||
<translation>Chấp nhận các kết nối từ bên ngoài</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Allow incoming connections</source>
|
||||
<translation>Cho phép nhận kết nối</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1)</source>
|
||||
<translation>Địa chỉ IP của proxy (ví dụ IPv4: 127.0.0.1 / IPv6: ::1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Third party transaction URLs</source>
|
||||
<translation>Phần mềm giao dịch bên thứ ba URLs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>W&allet</source>
|
||||
<translation>Ví</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect to the Bitcoin network through a SOCKS5 proxy.</source>
|
||||
<translation>Kết nối đến máy chủ Bitcoin thông qua SOCKS5 proxy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Proxy &IP:</source>
|
||||
<translation>Proxy &IP:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Port:</source>
|
||||
<translation>&Cổng:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Port of the proxy (e.g. 9050)</source>
|
||||
<translation>Cổng proxy (e.g. 9050) </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>IPv4</source>
|
||||
<translation>IPv4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>IPv6</source>
|
||||
<translation>IPv6</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Display</source>
|
||||
<translation>&Hiển thị</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>User Interface &language:</source>
|
||||
<translation>Giao diện người dùng & ngôn ngữ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&OK</source>
|
||||
<translation>&OK</translation>
|
||||
@@ -307,6 +573,10 @@
|
||||
<source>default</source>
|
||||
<translation>mặc định</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>none</source>
|
||||
<translation>Trống</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>OverviewPage</name>
|
||||
@@ -314,6 +584,14 @@
|
||||
<source>Form</source>
|
||||
<translation>Form</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Available:</source>
|
||||
<translation>Khả dụng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pending:</source>
|
||||
<translation>Đang chờ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Total:</source>
|
||||
<translation>Tổng:</translation>
|
||||
@@ -400,6 +678,10 @@
|
||||
<source>Fee:</source>
|
||||
<translation>Phí:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>After Fee:</source>
|
||||
<translation>Sau thuế, phí:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change:</source>
|
||||
<translation>Thay đổi:</translation>
|
||||
|
||||
@@ -2260,10 +2260,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>设置私钥池大小为 <n> (默认:%u) </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>设置数据块 最小字节数 (默认: %u) </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>设置RPC服务线程数 (默认: %d) </translation>
|
||||
|
||||
@@ -2100,8 +2100,8 @@
|
||||
<translation>設定資料庫快取大小是多少百萬位元組(MB,範圍: %d 到 %d,預設值: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block cost (default: %d)</source>
|
||||
<translation>設定區塊成本的最大值(預設值: %d)</translation>
|
||||
<source>Set maximum BIP141 block weight (default: %d)</source>
|
||||
<translation>設定 BIP141 區塊重量的最大值(預設值: %d)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set maximum block size in bytes (default: %d)</source>
|
||||
@@ -2531,10 +2531,6 @@
|
||||
<source>Set key pool size to <n> (default: %u)</source>
|
||||
<translation>設定密鑰池大小為 <n> (預設值: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set minimum block size in bytes (default: %u)</source>
|
||||
<translation>設定區塊大小下限為多少位元組(預設值: %u)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set the number of threads to service RPC calls (default: %d)</source>
|
||||
<translation>設定處理 RPC 服務請求的執行緒數目(預設值: %d)</translation>
|
||||
|
||||
@@ -43,6 +43,8 @@ void OptionsModel::Init(bool resetSettings)
|
||||
if (resetSettings)
|
||||
Reset();
|
||||
|
||||
checkAndMigrate();
|
||||
|
||||
QSettings settings;
|
||||
|
||||
// Ensure restart flag is unset on client startup
|
||||
@@ -429,3 +431,22 @@ bool OptionsModel::isRestartRequired()
|
||||
QSettings settings;
|
||||
return settings.value("fRestartRequired", false).toBool();
|
||||
}
|
||||
|
||||
void OptionsModel::checkAndMigrate()
|
||||
{
|
||||
// Migration of default values
|
||||
// Check if the QSettings container was already loaded with this client version
|
||||
QSettings settings;
|
||||
static const char strSettingsVersionKey[] = "nSettingsVersion";
|
||||
int settingsVersion = settings.contains(strSettingsVersionKey) ? settings.value(strSettingsVersionKey).toInt() : 0;
|
||||
if (settingsVersion < CLIENT_VERSION)
|
||||
{
|
||||
// -dbcache was bumped from 100 to 300 in 0.13
|
||||
// see https://github.com/bitcoin/bitcoin/pull/8273
|
||||
// force people to upgrade to the new value if they are using 100MB
|
||||
if (settingsVersion < 130000 && settings.contains("nDatabaseCache") && settings.value("nDatabaseCache").toLongLong() == 100)
|
||||
settings.setValue("nDatabaseCache", (qint64)nDefaultDbCache);
|
||||
|
||||
settings.setValue(strSettingsVersionKey, CLIENT_VERSION);
|
||||
}
|
||||
}
|
||||
@@ -84,9 +84,11 @@ private:
|
||||
/* settings that were overriden by command-line */
|
||||
QString strOverriddenByCommandLine;
|
||||
|
||||
/// Add option to list of GUI options overridden through command line/config file
|
||||
// Add option to list of GUI options overridden through command line/config file
|
||||
void addOverriddenOption(const std::string &option);
|
||||
|
||||
// Check settings version and upgrade default values if required
|
||||
void checkAndMigrate();
|
||||
Q_SIGNALS:
|
||||
void displayUnitChanged(int unit);
|
||||
void coinControlFeaturesChanged(bool);
|
||||
|
||||
@@ -101,7 +101,7 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx
|
||||
result.push_back(Pair("confirmations", confirmations));
|
||||
result.push_back(Pair("strippedsize", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS)));
|
||||
result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION)));
|
||||
result.push_back(Pair("cost", (int)::GetBlockCost(block)));
|
||||
result.push_back(Pair("weight", (int)::GetBlockWeight(block)));
|
||||
result.push_back(Pair("height", blockindex->nHeight));
|
||||
result.push_back(Pair("version", block.nVersion));
|
||||
result.push_back(Pair("versionHex", strprintf("%08x", block.nVersion)));
|
||||
@@ -559,7 +559,7 @@ UniValue getblock(const UniValue& params, bool fHelp)
|
||||
" \"confirmations\" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain\n"
|
||||
" \"size\" : n, (numeric) The block size\n"
|
||||
" \"strippedsize\" : n, (numeric) The block size excluding witness data\n"
|
||||
" \"cost\" : n (numeric) The block cost\n"
|
||||
" \"weight\" : n (numeric) The block weight (BIP 141)\n"
|
||||
" \"height\" : n, (numeric) The block height or index\n"
|
||||
" \"version\" : n, (numeric) The block version\n"
|
||||
" \"versionHex\" : \"00000000\", (string) The block version formatted in hexadecimal\n"
|
||||
|
||||
@@ -224,7 +224,7 @@ UniValue getmininginfo(const UniValue& params, bool fHelp)
|
||||
"{\n"
|
||||
" \"blocks\": nnn, (numeric) The current block\n"
|
||||
" \"currentblocksize\": nnn, (numeric) The last block size\n"
|
||||
" \"currentblockcost\": nnn, (numeric) The last block cost\n"
|
||||
" \"currentblockweight\": nnn, (numeric) The last block weight\n"
|
||||
" \"currentblocktx\": nnn, (numeric) The last block transaction\n"
|
||||
" \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n"
|
||||
" \"errors\": \"...\" (string) Current errors\n"
|
||||
@@ -243,7 +243,7 @@ UniValue getmininginfo(const UniValue& params, bool fHelp)
|
||||
UniValue obj(UniValue::VOBJ);
|
||||
obj.push_back(Pair("blocks", (int)chainActive.Height()));
|
||||
obj.push_back(Pair("currentblocksize", (uint64_t)nLastBlockSize));
|
||||
obj.push_back(Pair("currentblockcost", (uint64_t)nLastBlockCost));
|
||||
obj.push_back(Pair("currentblockweight", (uint64_t)nLastBlockWeight));
|
||||
obj.push_back(Pair("currentblocktx", (uint64_t)nLastBlockTx));
|
||||
obj.push_back(Pair("difficulty", (double)GetDifficulty()));
|
||||
obj.push_back(Pair("errors", GetWarnings("statusbar")));
|
||||
@@ -358,7 +358,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
|
||||
" ],\n"
|
||||
" \"fee\": n, (numeric) difference in value between transaction inputs and outputs (in Satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one\n"
|
||||
" \"sigops\" : n, (numeric) total SigOps cost, as counted for purposes of block limits; if key is not present, sigop cost is unknown and clients MUST NOT assume it is zero\n"
|
||||
" \"cost\" : n, (numeric) total transaction size cost, as counted for purposes of block limits\n"
|
||||
" \"weight\" : n, (numeric) total transaction weight, as counted for purposes of block limits\n"
|
||||
" \"required\" : true|false (boolean) if provided and true, this transaction must be in the final block\n"
|
||||
" }\n"
|
||||
" ,...\n"
|
||||
@@ -377,7 +377,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
|
||||
" \"noncerange\" : \"00000000ffffffff\", (string) A range of valid nonces\n"
|
||||
" \"sigoplimit\" : n, (numeric) cost limit of sigops in blocks\n"
|
||||
" \"sizelimit\" : n, (numeric) limit of block size\n"
|
||||
" \"costlimit\" : n, (numeric) limit of block cost\n"
|
||||
" \"weightlimit\" : n, (numeric) limit of block weight\n"
|
||||
" \"curtime\" : ttt, (numeric) current timestamp in seconds since epoch (Jan 1 1970 GMT)\n"
|
||||
" \"bits\" : \"xxx\", (string) compressed target of next block\n"
|
||||
" \"height\" : n (numeric) The height of the next block\n"
|
||||
@@ -546,6 +546,9 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
|
||||
UpdateTime(pblock, consensusParams, pindexPrev);
|
||||
pblock->nNonce = 0;
|
||||
|
||||
// NOTE: If at some point we support pre-segwit miners post-segwit-activation, this needs to take segwit support into consideration
|
||||
const bool fPreSegWit = (THRESHOLD_ACTIVE != VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_SEGWIT, versionbitscache));
|
||||
|
||||
UniValue aCaps(UniValue::VARR); aCaps.push_back("proposal");
|
||||
|
||||
UniValue transactions(UniValue::VARR);
|
||||
@@ -574,8 +577,13 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
|
||||
|
||||
int index_in_template = i - 1;
|
||||
entry.push_back(Pair("fee", pblocktemplate->vTxFees[index_in_template]));
|
||||
entry.push_back(Pair("sigops", pblocktemplate->vTxSigOpsCost[index_in_template]));
|
||||
entry.push_back(Pair("cost", GetTransactionCost(tx)));
|
||||
int64_t nTxSigOps = pblocktemplate->vTxSigOpsCost[index_in_template];
|
||||
if (fPreSegWit) {
|
||||
assert(nTxSigOps % WITNESS_SCALE_FACTOR == 0);
|
||||
nTxSigOps /= WITNESS_SCALE_FACTOR;
|
||||
}
|
||||
entry.push_back(Pair("sigops", nTxSigOps));
|
||||
entry.push_back(Pair("weight", GetTransactionWeight(tx)));
|
||||
|
||||
transactions.push_back(entry);
|
||||
}
|
||||
@@ -657,9 +665,14 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
|
||||
result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1));
|
||||
result.push_back(Pair("mutable", aMutable));
|
||||
result.push_back(Pair("noncerange", "00000000ffffffff"));
|
||||
result.push_back(Pair("sigoplimit", (int64_t)MAX_BLOCK_SIGOPS_COST));
|
||||
int64_t nSigOpLimit = MAX_BLOCK_SIGOPS_COST;
|
||||
if (fPreSegWit) {
|
||||
assert(nSigOpLimit % WITNESS_SCALE_FACTOR == 0);
|
||||
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("costlimit", (int64_t)MAX_BLOCK_COST));
|
||||
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)));
|
||||
|
||||
@@ -51,6 +51,7 @@ enum
|
||||
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts
|
||||
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance
|
||||
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65)
|
||||
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY = (1U << 10), // enable CHECKSEQUENCEVERIFY (BIP112)
|
||||
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS = (1U << 11), // enable WITNESS (BIP141)
|
||||
};
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ CTxMemPoolEntry::CTxMemPoolEntry(const CTransaction& _tx, const CAmount& _nFee,
|
||||
hadNoDependencies(poolHasNoInputsOf), inChainInputValue(_inChainInputValue),
|
||||
spendsCoinbase(_spendsCoinbase), sigOpCost(_sigOpsCost), lockPoints(lp)
|
||||
{
|
||||
nTxCost = GetTransactionCost(_tx);
|
||||
nTxWeight = GetTransactionWeight(_tx);
|
||||
nModSize = _tx.CalculateModifiedSize(GetTxSize());
|
||||
nUsageSize = RecursiveDynamicUsage(*tx) + memusage::DynamicUsage(tx);
|
||||
|
||||
@@ -75,7 +75,7 @@ void CTxMemPoolEntry::UpdateLockPoints(const LockPoints& lp)
|
||||
|
||||
size_t CTxMemPoolEntry::GetTxSize() const
|
||||
{
|
||||
return GetVirtualTransactionSize(nTxCost);
|
||||
return GetVirtualTransactionSize(nTxWeight, sigOpCost);
|
||||
}
|
||||
|
||||
// Update the given tx for any in-mempool descendants.
|
||||
|
||||
@@ -78,7 +78,7 @@ class CTxMemPoolEntry
|
||||
private:
|
||||
std::shared_ptr<const CTransaction> tx;
|
||||
CAmount nFee; //!< Cached to avoid expensive parent-transaction lookups
|
||||
size_t nTxCost; //!< ... and avoid recomputing tx cost (also used for GetTxSize())
|
||||
size_t nTxWeight; //!< ... and avoid recomputing tx weight (also used for GetTxSize())
|
||||
size_t nModSize; //!< ... and modified size for priority
|
||||
size_t nUsageSize; //!< ... and total memory usage
|
||||
int64_t nTime; //!< Local time when entering the mempool
|
||||
@@ -122,7 +122,7 @@ public:
|
||||
double GetPriority(unsigned int currentHeight) const;
|
||||
const CAmount& GetFee() const { return nFee; }
|
||||
size_t GetTxSize() const;
|
||||
size_t GetTxCost() const { return nTxCost; }
|
||||
size_t GetTxWeight() const { return nTxWeight; }
|
||||
int64_t GetTime() const { return nTime; }
|
||||
unsigned int GetHeight() const { return entryHeight; }
|
||||
bool WasClearAtEntry() const { return hadNoDependencies; }
|
||||
|
||||
@@ -602,19 +602,42 @@ UniValue dumpwallet(const UniValue& params, bool fHelp)
|
||||
file << strprintf("# * Best block at time of backup was %i (%s),\n", chainActive.Height(), chainActive.Tip()->GetBlockHash().ToString());
|
||||
file << strprintf("# mined on %s\n", EncodeDumpTime(chainActive.Tip()->GetBlockTime()));
|
||||
file << "\n";
|
||||
|
||||
// add the base58check encoded extended master if the wallet uses HD
|
||||
CKeyID masterKeyID = pwalletMain->GetHDChain().masterKeyID;
|
||||
if (!masterKeyID.IsNull())
|
||||
{
|
||||
CKey key;
|
||||
if (pwalletMain->GetKey(masterKeyID, key))
|
||||
{
|
||||
CExtKey masterKey;
|
||||
masterKey.SetMaster(key.begin(), key.size());
|
||||
|
||||
CBitcoinExtKey b58extkey;
|
||||
b58extkey.SetKey(masterKey);
|
||||
|
||||
file << "# extended private masterkey: " << b58extkey.ToString() << "\n\n";
|
||||
}
|
||||
}
|
||||
for (std::vector<std::pair<int64_t, CKeyID> >::const_iterator it = vKeyBirth.begin(); it != vKeyBirth.end(); it++) {
|
||||
const CKeyID &keyid = it->second;
|
||||
std::string strTime = EncodeDumpTime(it->first);
|
||||
std::string strAddr = CBitcoinAddress(keyid).ToString();
|
||||
CKey key;
|
||||
if (pwalletMain->GetKey(keyid, key)) {
|
||||
file << strprintf("%s %s ", CBitcoinSecret(key).ToString(), strTime);
|
||||
if (pwalletMain->mapAddressBook.count(keyid)) {
|
||||
file << strprintf("%s %s label=%s # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, EncodeDumpString(pwalletMain->mapAddressBook[keyid].name), strAddr);
|
||||
file << strprintf("label=%s", EncodeDumpString(pwalletMain->mapAddressBook[keyid].name));
|
||||
} else if (keyid == masterKeyID) {
|
||||
file << "hdmaster=1";
|
||||
} else if (setKeyPool.count(keyid)) {
|
||||
file << strprintf("%s %s reserve=1 # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, strAddr);
|
||||
file << "reserve=1";
|
||||
} else if (pwalletMain->mapKeyMetadata[keyid].hdKeypath == "m") {
|
||||
file << "inactivehdmaster=1";
|
||||
} else {
|
||||
file << strprintf("%s %s change=1 # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, strAddr);
|
||||
file << "change=1";
|
||||
}
|
||||
file << strprintf(" # addr=%s%s\n", strAddr, (pwalletMain->mapKeyMetadata[keyid].hdKeypath.size() > 0 ? " hdkeypath="+pwalletMain->mapKeyMetadata[keyid].hdKeypath : ""));
|
||||
}
|
||||
}
|
||||
file << "\n";
|
||||
|
||||
@@ -2081,7 +2081,7 @@ UniValue encryptwallet(const UniValue& params, bool fHelp)
|
||||
// slack space in .dat files; that is bad if the old data is
|
||||
// unencrypted private keys. So:
|
||||
StartShutdown();
|
||||
return "wallet encrypted; Bitcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup.";
|
||||
return "wallet encrypted; Bitcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed and a new HD seed was generated (if you are using HD). You need to make a new backup.";
|
||||
}
|
||||
|
||||
UniValue lockunspent(const UniValue& params, bool fHelp)
|
||||
@@ -2260,16 +2260,16 @@ UniValue getwalletinfo(const UniValue& params, bool fHelp)
|
||||
"Returns an object containing various wallet state info.\n"
|
||||
"\nResult:\n"
|
||||
"{\n"
|
||||
" \"walletversion\": xxxxx, (numeric) the wallet version\n"
|
||||
" \"balance\": xxxxxxx, (numeric) the total confirmed balance of the wallet in " + CURRENCY_UNIT + "\n"
|
||||
" \"unconfirmed_balance\": xxx, (numeric) the total unconfirmed balance of the wallet in " + CURRENCY_UNIT + "\n"
|
||||
" \"immature_balance\": xxxxxx, (numeric) the total immature balance of the wallet in " + CURRENCY_UNIT + "\n"
|
||||
" \"txcount\": xxxxxxx, (numeric) the total number of transactions in the wallet\n"
|
||||
" \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n"
|
||||
" \"keypoolsize\": xxxx, (numeric) how many new keys are pre-generated\n"
|
||||
" \"unlocked_until\": ttt, (numeric) the timestamp in seconds since epoch (midnight Jan 1 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked\n"
|
||||
" \"paytxfee\": x.xxxx, (numeric) the transaction fee configuration, set in " + CURRENCY_UNIT + "/kB\n"
|
||||
" \"masterkeyid\": \"<hash160>\", (string) the Hash160 of the HD master pubkey\n"
|
||||
" \"walletversion\": xxxxx, (numeric) the wallet version\n"
|
||||
" \"balance\": xxxxxxx, (numeric) the total confirmed balance of the wallet in " + CURRENCY_UNIT + "\n"
|
||||
" \"unconfirmed_balance\": xxx, (numeric) the total unconfirmed balance of the wallet in " + CURRENCY_UNIT + "\n"
|
||||
" \"immature_balance\": xxxxxx, (numeric) the total immature balance of the wallet in " + CURRENCY_UNIT + "\n"
|
||||
" \"txcount\": xxxxxxx, (numeric) the total number of transactions in the wallet\n"
|
||||
" \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n"
|
||||
" \"keypoolsize\": xxxx, (numeric) how many new keys are pre-generated\n"
|
||||
" \"unlocked_until\": ttt, (numeric) the timestamp in seconds since epoch (midnight Jan 1 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked\n"
|
||||
" \"paytxfee\": x.xxxx, (numeric) the transaction fee configuration, set in " + CURRENCY_UNIT + "/kB\n"
|
||||
" \"hdmasterkeyid\": \"<hash160>\", (string) the Hash160 of the HD master pubkey\n"
|
||||
"}\n"
|
||||
"\nExamples:\n"
|
||||
+ HelpExampleCli("getwalletinfo", "")
|
||||
@@ -2291,7 +2291,7 @@ UniValue getwalletinfo(const UniValue& params, bool fHelp)
|
||||
obj.push_back(Pair("paytxfee", ValueFromAmount(payTxFee.GetFeePerK())));
|
||||
CKeyID masterKeyID = pwalletMain->GetHDChain().masterKeyID;
|
||||
if (!masterKeyID.IsNull())
|
||||
obj.push_back(Pair("masterkeyid", masterKeyID.GetHex()));
|
||||
obj.push_back(Pair("hdmasterkeyid", masterKeyID.GetHex()));
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
@@ -626,6 +626,15 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
||||
|
||||
Lock();
|
||||
Unlock(strWalletPassphrase);
|
||||
|
||||
// if we are using HD, replace the HD master key (seed) with a new one
|
||||
if (!hdChain.masterKeyID.IsNull()) {
|
||||
CKey key;
|
||||
CPubKey masterPubKey = GenerateNewHDMasterKey();
|
||||
if (!SetHDMasterKey(masterPubKey))
|
||||
return false;
|
||||
}
|
||||
|
||||
NewKeyPool();
|
||||
Lock();
|
||||
|
||||
@@ -1166,16 +1175,42 @@ CAmount CWallet::GetChange(const CTransaction& tx) const
|
||||
return nChange;
|
||||
}
|
||||
|
||||
bool CWallet::SetHDMasterKey(const CKey& key)
|
||||
CPubKey CWallet::GenerateNewHDMasterKey()
|
||||
{
|
||||
CKey key;
|
||||
key.MakeNewKey(true);
|
||||
|
||||
int64_t nCreationTime = GetTime();
|
||||
CKeyMetadata metadata(nCreationTime);
|
||||
|
||||
// calculate the pubkey
|
||||
CPubKey pubkey = key.GetPubKey();
|
||||
assert(key.VerifyPubKey(pubkey));
|
||||
|
||||
// set the hd keypath to "m" -> Master, refers the masterkeyid to itself
|
||||
metadata.hdKeypath = "m";
|
||||
metadata.hdMasterKeyID = pubkey.GetID();
|
||||
|
||||
{
|
||||
LOCK(cs_wallet);
|
||||
|
||||
// mem store the metadata
|
||||
mapKeyMetadata[pubkey.GetID()] = metadata;
|
||||
|
||||
// write the key&metadata to the database
|
||||
if (!AddKeyPubKey(key, pubkey))
|
||||
throw std::runtime_error("CWallet::GenerateNewKey(): AddKey failed");
|
||||
}
|
||||
|
||||
return pubkey;
|
||||
}
|
||||
|
||||
bool CWallet::SetHDMasterKey(const CPubKey& pubkey)
|
||||
{
|
||||
LOCK(cs_wallet);
|
||||
|
||||
// store the key as normal "key"/"ckey" object
|
||||
// in the database
|
||||
// key metadata is not required
|
||||
CPubKey pubkey = key.GetPubKey();
|
||||
if (!AddKeyPubKey(key, pubkey))
|
||||
throw std::runtime_error("CWallet::GenerateNewKey(): AddKey failed");
|
||||
// ensure this wallet.dat can only be opened by clients supporting HD
|
||||
SetMinVersion(FEATURE_HD);
|
||||
|
||||
// store the keyid (hash160) together with
|
||||
// the child index counter in the database
|
||||
@@ -2356,7 +2391,7 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt
|
||||
*static_cast<CTransaction*>(&wtxNew) = CTransaction(txNew);
|
||||
|
||||
// Limit size
|
||||
if (GetTransactionCost(txNew) >= MAX_STANDARD_TX_COST)
|
||||
if (GetTransactionWeight(txNew) >= MAX_STANDARD_TX_WEIGHT)
|
||||
{
|
||||
strFailReason = _("Transaction too large");
|
||||
return false;
|
||||
@@ -3296,8 +3331,8 @@ bool CWallet::InitLoadWallet()
|
||||
if (GetBoolArg("-usehd", DEFAULT_USE_HD_WALLET) && walletInstance->hdChain.masterKeyID.IsNull()) {
|
||||
// generate a new master key
|
||||
CKey key;
|
||||
key.MakeNewKey(true);
|
||||
if (!walletInstance->SetHDMasterKey(key))
|
||||
CPubKey masterPubKey = walletInstance->GenerateNewHDMasterKey();
|
||||
if (!walletInstance->SetHDMasterKey(masterPubKey))
|
||||
throw std::runtime_error("CWallet::GenerateNewKey(): Storing master key failed");
|
||||
}
|
||||
CPubKey newDefaultKey;
|
||||
|
||||
@@ -78,7 +78,8 @@ enum WalletFeature
|
||||
FEATURE_WALLETCRYPT = 40000, // wallet encryption
|
||||
FEATURE_COMPRPUBKEY = 60000, // compressed public keys
|
||||
|
||||
FEATURE_LATEST = 60000
|
||||
FEATURE_HD = 130000, // Hierarchical key derivation after BIP32 (HD Wallet)
|
||||
FEATURE_LATEST = FEATURE_COMPRPUBKEY // HD is optional, use FEATURE_COMPRPUBKEY as latest version
|
||||
};
|
||||
|
||||
|
||||
@@ -898,10 +899,13 @@ public:
|
||||
|
||||
/* Set the HD chain model (chain child index counters) */
|
||||
bool SetHDChain(const CHDChain& chain, bool memonly);
|
||||
|
||||
/* Set the current HD master key (will reset the chain child index counters) */
|
||||
bool SetHDMasterKey(const CKey& key);
|
||||
const CHDChain& GetHDChain() { return hdChain; }
|
||||
|
||||
/* Generates a new HD master key (will not be activated) */
|
||||
CPubKey GenerateNewHDMasterKey();
|
||||
|
||||
/* Set the current HD master key (will reset the chain child index counters) */
|
||||
bool SetHDMasterKey(const CPubKey& key);
|
||||
};
|
||||
|
||||
/** A key allocated from the key pool. */
|
||||
|
||||
Reference in New Issue
Block a user