Commit graph

7707 commits

Author SHA1 Message Date
Mark Friedenbach
23f42e61dd Replace NOP3 with CHECKSEQUENCEVERIFY (BIPXX)
<nInvSequence> CHECKSEQUENCEVERIFY -> <nInvSequence>

Fails if ~txin.nSequence < nInvSequence (the nSequence field of the txin is bit-inverted before the comparison), allowing funds of a txout to be locked for a number of blocks or a duration of time after its inclusion in a block.

Only the logic and unit tests are implemented; this commit does not have changes to policy or consensus behavior.
2015-06-04 22:08:22 -07:00
Mark Friedenbach
2affed549a Move SEQUENCE_THRESHOLD to script/script.h
Will now be needed by CHECKSEQUENCEVERIFY code.
2015-06-04 22:08:22 -07:00
Peter Todd
dfe3d9a4cd Replace NOP2 with CHECKLOCKTIMEVERIFY (BIP65)
<nLockTime> CHECKLOCKTIMEVERIFY -> <nLockTime>

Fails if tx.nLockTime < nLockTime, allowing the funds in a txout to be
locked until some block height or block time in the future is reached.

Only the logic and unittests are implemented; this commit does not have
any actual soft-fork logic in it.

Thanks to Pieter Wuille for rebase.

Credit goes to Gregory Maxwell for the suggestion of comparing the
argument against the transaction nLockTime rather than the current
time/blockheight directly.
2015-06-04 22:08:22 -07:00
Peter Todd
f6f2cf6fba Move LOCKTIME_THRESHOLD to src/script/script.h
Will now be needed by CHECKLOCKTIMEVERIFY code.
2015-06-04 22:08:22 -07:00
Peter Todd
a1757fdea3 Make CScriptNum() take nMaxNumSize as an argument
While the existing numeric opcodes are all limited to 4-byte bignum
arguments, new opcodes will need different limits.
2015-06-04 22:08:22 -07:00
Mark Friedenbach
51680bc859 Add rules--presently disabled--for using GetMedianTimePast as endpoint for lock-time calculations
The lock-time code currently uses CBlock::nTime as the cutoff point for time based locked transactions. This has the unfortunate outcome of creating a perverse incentive for miners to lie about the time of a block in order to collect more fees by including transactions that by wall clock determination have not yet matured. By using CBlockIndex::GetMedianTimePast from the prior block instead, the self-interested miner no longer gains from generating blocks with fraudulent timestamps. Users can compensate for this change by simply adding an hour (3600 seconds) to their time-based lock times.

If enforced, this would be a soft-fork change. This commit only adds the functionality on an unexecuted code path, without changing the behaviour of Bitcoin Core.
2015-06-04 22:08:22 -07:00
Mark Friedenbach
f441365501 Add rules--presently disabled--for using sequence numbers as a relative lock time
In summary, the sequence number of each input in a transaction is used to store an inverted relative locktime: a delta value which is added to the height or time of the block which included the output being spent to generate a per-input lock time from the sequence number. If enforced, this would make transaction replacement possible as replacing an input with a higher sequence number (lower relative lock time) would allow the new transaction to make it on the chain sooner.

This commit does not implement the transaction replacement logic. Nor does this commit make the relative lock time rules as consensus or policy rules. It merely adds new, but disabled functionality and unit tests for that functionality.
2015-06-04 22:08:22 -07:00
Mark Friedenbach
2be1de38aa Get rid of CTxIn::IsFinal(), which is only used in one location and whose semantics will not survive revival of sequence numbers 2015-06-04 22:08:22 -07:00
Mark Friedenbach
553ff39655 Reverse structure of IsFinalTx()
Instead of checking if the transaction is in a category of cases to return true and failing otherwise, we return false if the tx is a failure case and otherwise return true. This removes an early-exit opportunity which will no longer be possible once sequence numbers are re-enabled, but has no change in behaviour.
2015-06-04 22:08:22 -07:00
Mark Friedenbach
ad6f810c37 Prevent block.nTime from decreasing
Under some circumstances it is possible for there to be a significant, discontinuous jump in a node's clock value. On mining nodes, this can result in block templates which are no longer valid due to time-based nLockTime constraints. UpdateTime() is modified so that it will never decrease a block's nLockTime, thereby preventing such invalidations.
2015-06-04 22:08:22 -07:00
Mark Friedenbach
4d5f4e2d4d Explicitly set tx.nVersion for the genesis block and mining tests
If/when CTransaction::CURRENT_VERSION is incremented, this will break CChainParams and the miner tests. This fix sets the transaction version explicitly where we depend on the hash value (genesis block, proof of work checks).
2015-06-04 22:08:22 -07:00
Matt Corallo
2b6745d37f EMPTY_COMMIT: CLTV Commits follow 2015-06-03 20:46:44 -07:00
Wladimir J. van der Laan
181771b712
json: fail read_string if string contains trailing garbage
Change `read_string` to fail when not the entire input has been
consumed. This avoids unexpected, even dangerous behavior (fixes #6223).

The new JSON parser adapted in #6121 also solves this problem so in
master this is a temporary fix, but should be backported to older releases.

Also adds tests for the new behavior.

Github-Pull: #6226
Rebased-From: 4e157fc60d
2015-06-03 15:16:18 +02:00
Luke Dashjr
ecc96f5ba9
Remove P2SH coinbase flag, no longer interesting
Github-Pull: #6203
Rebased-From: d449772cf6
2015-06-02 09:14:13 +02:00
Wladimir J. van der Laan
ebd7d8d78c
Parameter interaction: disable upnp if -proxy set
To protect privacy, do not use UPNP when a proxy is set. The user may
still specify -listen=1 to listen locally (for a hidden service), so
don't rely on this happening through -listen.

Fixes #2927.

Conflicts:
	src/init.cpp

Rebased-From: 8c35b6f3be
Github-Pull: #6153
2015-05-27 09:35:40 +02:00
Wladimir J. van der Laan
ae3d8f371a
Fix two problems in CSubNet parsing
Fix two CSubNet constructor problems:

- The use of `/x` where 8 does not divide x was broken, due to a
  bit-order issue

- The use of e.g. `1.2.3.4/24` where the netmasked bits in the network
  are not 0 was broken. Fix this by explicitly normalizing the netwok
  according to the bitmask.

Also add tests for these cases.

Fixes #6179. Thanks to @jonasschnelli for reporting and initial fix.

Rebased-From: b45c50ce51
Github-Pull: #6186
2015-05-27 09:11:27 +02:00
Wladimir J. van der Laan
e4a7d51537
Simplify code for CSubnet
Simplify the code by using CAddress.ip directly, instead of the reversed
GetByte() semantics.

Rebased-From: 19e8d7be42
Github-Pull: #6186
2015-05-27 09:10:56 +02:00
Wladimir J. van der Laan
16f45600c8
doc: small amandment to release notes 2015-05-16 10:37:27 +02:00
Wladimir J. van der Laan
ff32503267
Release notes 0.10.2 2015-05-12 17:08:58 +02:00
Gregory Maxwell
da656068ec
Avoid crash on start in TestBlockValidity with gen=1.
When the internal miner is enabled at the start of a new node, there
 is an near instant assert in TestBlockValidity because its attempting
 to mine a block before the top checkpoint.

Also avoids a data race around vNodes.

Github-Pull: #6123
Rebased-From: bba7c24929
2015-05-12 16:38:04 +02:00
Wladimir J. van der Laan
49e4d14f75
Translations update 2015-05-12 16:33:04 +02:00
Wladimir J. van der Laan
d7e7727658
Preparations for 0.10.2 release 2015-05-12 16:23:53 +02:00
Jonas Schnelli
424ae6629b
don't imbue boost::filesystem::path with locale "C" on windows
fixes https://github.com/bitcoin/bitcoin/issues/6078

Github-Pull: #6093
Rebased-From: b3ffcdf916 3da7849007
2015-05-10 14:26:22 +02:00
Wladimir J. van der Laan
9a5b88cc0c
Merge pull request #6114
824c011 wallet: fix boost::get usage with boost 1.58 (Cory Fields)
2015-05-07 10:08:45 +02:00
Cory Fields
824c011d16 wallet: fix boost::get usage with boost 1.58
Backport from master
2015-05-06 16:52:46 -04:00
Wladimir J. van der Laan
ebc0e41ede
qt: translation update for next 0.10 point release 2015-05-04 13:12:30 +02:00
Gregory Maxwell
d8ac901842
doc: improve credits in release notes 2015-04-25 10:05:13 +02:00
Wladimir J. van der Laan
bf8ad0dc6b
update release notes for 0.10.1rc3 2015-04-20 14:05:01 +02:00
Gregory Maxwell
139cd8177b
Cap nAttempts penalty at 8 and switch to pow instead of a division loop.
On hosts that had spent some time with a failed internet connection their
 nAttempts penalty was going through the roof (e.g. thousands for all peers)
 and as a result the connect search was pegging the CPU and failing to get
 more than a 4 connections after days of running (because it was taking so
 long per try).

Rebased-From: a784f90c98
Github-Pull: #6029
2015-04-20 13:59:19 +02:00
Suhas Daftuar
bac6fca3c9
Set nSequenceId when a block is fully linked
Also adds a test to CheckBlockIndex

Conflicts:
	src/main.cpp

Rebased-From: c1ecee8f72
Github-Pull: #6010
2015-04-20 13:48:52 +02:00
Wladimir J. van der Laan
3a70613398
Merge pull request #6025
323de27 Initialization: setup environment before starting QT tests (dexX7)
7494e09 Initialization: setup environment before starting tests (dexX7)
df45564 Initialization: set fallback locale as environment variable (dexX7)
2015-04-20 13:44:11 +02:00
dexX7
323de27f4b
Initialization: setup environment before starting QT tests
The environment is prepared by the main thread to guard against invalid locale settings.
2015-04-18 16:06:22 +02:00
dexX7
7494e0915b
Initialization: setup environment before starting tests
The environment is prepared by the main thread to guard against invalid locale settings and to prevent deinitialization issues of Boost path, which can result in app crashes.
2015-04-18 16:06:20 +02:00
dexX7
df45564cf0
Initialization: set fallback locale as environment variable
The scope of `std::locale::global` appears to be smaller than `setenv("LC_ALL", ...)` and insufficient to fix messed up locale settings for the whole application.
2015-04-18 16:06:15 +02:00
mrbandrews
57d1f46952
Fix CheckBlockIndex for reindex.
Some tests in CheckBlockIndex require chainActive.Tip(), but when reindexing, chainActive has not been set on the first call to CheckBlockIndex.

reindex.py starts a node, mines 3 blocks, stops, and reindexes with CheckBlockIndex enabled.

Rebased-From: 0421c18f3a
Github-Pull: #6012
2015-04-16 10:34:30 +02:00
Matt Corallo
eae305f4c4
Fix missing lock in submitblock
Rebased-From: eb63bf86cf
Github-Pull: #6007
2015-04-14 10:52:03 +02:00
Wladimir J. van der Laan
34127c77cb
doc: update release notes pre rc2 2015-04-09 10:19:52 +02:00
Gavin Andresen
1c62e84099
Keep mempool consistent during block-reorgs
This fixes a subtle bug involving block re-orgs and non-standard transactions.

Start with a block containing a non-standard transaction, and
one or more transactions spending it in the memory pool.

Then re-org away from that block to another chain that does
not contain the non-standard transaction.

Result before this fix: the dependent transactions get stuck
in the mempool without their parent, putting the mempool
in an inconsistent state.

Tested with a new unit test (adapted for 0.10).

Rebased-From: ad9e86dca1
Github-Pull: #5945
2015-04-06 11:38:43 +02:00
Wladimir J. van der Laan
149c1d890d
doc: Credit Jonas Nick in release notes
For discovering the vulnerability and discussing the fix that led to PR #5860.
2015-04-06 09:27:41 +02:00
Wladimir J. van der Laan
24e48991d3
Merge pull request #5961
bf1cc80 Docs: Use new Bitcoin.org download URLs (David A. Harding)
2015-04-03 07:49:39 +02:00
David A. Harding
bf1cc80372
Docs: Use new Bitcoin.org download URLs
To give the torrents (which use web seeds) better names, we updated the
URL scheme on bitcoin.org/bin. This updates the release notes and
release doc accordingly, plus updates some other details based on recent
changes to the site.

[skip ci]
2015-04-02 10:38:38 -04:00
Wladimir J. van der Laan
9e1cc16296
doc: add historical release notes for 0.10.0
Rebased-From: 15facb4aca
2015-04-01 18:44:49 +02:00
Wladimir J. van der Laan
fe3122580e
update release notes for #5953/#5900 2015-04-01 17:27:54 +02:00
Wladimir J. van der Laan
2b7636c3d6
Merge pull request #5953
a1f425b Add a consistency check for the block chain data structures (Pieter Wuille)

This is a port of #5900 to 0.10.

Github-Pull: #5900
2015-04-01 17:26:33 +02:00
Wladimir J. van der Laan
ae1479a114
update release notes after #5941 2015-04-01 16:48:23 +02:00
Pieter Wuille
aa587d4cae
Scale up addrman
This change was suggested as Countermeasure 6 in
Eclipse Attacks on Bitcoin’s Peer-to-Peer Network, Ethan Heilman,
Alison Kendler, Aviv Zohar, Sharon Goldberg. ePrint Archive Report
2015/263. March 2015.

Rebased-From: 1d21ba2f5e
Github-Pull: #5941
2015-04-01 16:39:55 +02:00
Pieter Wuille
0c6f334c32
Always use a 50% chance to choose between tried and new entries
This change was suggested as Countermeasure 2 in
Eclipse Attacks on Bitcoin’s Peer-to-Peer Network, Ethan Heilman,
Alison Kendler, Aviv Zohar, Sharon Goldberg. ePrint Archive Report
2015/263. March 2015.

Rebased-From: c6a63ceeb4
Github-Pull: #5941
2015-04-01 16:39:36 +02:00
Pieter Wuille
214154e6fc
Do not bias outgoing connections towards fresh addresses
This change was suggested as Countermeasure 2 in
Eclipse Attacks on Bitcoin’s Peer-to-Peer Network, Ethan Heilman,
Alison Kendler, Aviv Zohar, Sharon Goldberg. ePrint Archive Report
2015/263. March 2015.

Rebased-From: 68ba3f67bd500a64fb8932c6b41924ddc31d76f
Github-Pull: #5941
2015-04-01 16:39:30 +02:00
Pieter Wuille
2218d4bbe0
Simplify hashing code
Conflicts:
	src/addrman.cpp

Rebased-From: a8ff7c62ed
Github-Pull: #5941
2015-04-01 16:38:54 +02:00
Pieter Wuille
cf0218f8b2
Make addrman's bucket placement deterministic.
Give each address a single fixed location in the new and tried tables,
which become simple fixed-size arrays instead of sets and vectors.

This prevents attackers from having an advantages by inserting an
address multiple times.

This change was suggested as Countermeasure 1 in
Eclipse Attacks on Bitcoin’s Peer-to-Peer Network, Ethan Heilman,
Alison Kendler, Aviv Zohar, Sharon Goldberg. ePrint Archive Report
2015/263. March 2015.

It is also more efficient.

Conflicts:
	src/addrman.cpp
	src/addrman.h

Rebased-From: e6b343d880
Github-Pull: #5941
2015-04-01 16:38:47 +02:00