Skip to content

Conversation

sipa
Copy link
Member

@sipa sipa commented Mar 12, 2011

This patch changes some internal structures to keep track of spentness of each wallet transaction output separately, to support partially-spent transactions. It contains:

  • an update to the data structures (vfSpent in CWalletTx instead of fSpent)
  • a backward-compatible update to the wallet disk format (written by Satoshi, Gavin knows). Old clients reading back an updated wallet will ignore partially spent transactions when creating new ones, and may report a wrong balance, though.
  • some helper functions (CWalletTx: IsSpent, MarkSpent, MarkDirty to reset cached values, GetAvailableCredit which only counts unredeemed outputs)
  • update to SelectCoins and CreateTransaction to select source transaction outputs separately instead of per whole transaction. This fixes the issue mentioned in http://www.bitcoin.org/smf/index.php?topic=3759.0

The reason for writing this patch: i'm also working on an import/export wallet patch, where situations with partially spent transactions become hard to avoid.

Everything except loading a new wallet into an old client is tested on the testnet, including crafted situations with partially-spent transactions.

@jgarzik
Copy link
Contributor

jgarzik commented Mar 17, 2011

We definitely want this change -- but can you please resubmit a rebase against latest upstream, giving us one (or a few) clean commits?

@jgarzik jgarzik closed this Mar 17, 2011
glv2 referenced this pull request in glv2/peercoin Apr 26, 2014
Documentation change to update the name of the required Berkeley database library required for compiling Peershares on Linux. Change does not impact the Peershares code.
glv2 referenced this pull request in glv2/peercoin Oct 12, 2014
glv2 referenced this pull request in glv2/peercoin Oct 12, 2014
sipa referenced this pull request in sipa/bitcoin Dec 4, 2014
b0210a9 Merge pull request bitcoin#135
ee3eb4b Fix a memory leak and add a number of small tests.
4d879a3 Merge pull request bitcoin#134
d5e8362 Merge pull request #127
7b92cf6 Merge pull request bitcoin#132
0bf70a5 Merge pull request bitcoin#133
29ae131 Make scalar_add_bit test's overflow detection exact
9048def Avoid undefined shift behaviour
efb7d4b Use constant-time conditional moves instead of byte slicing
d220062 Merge pull request bitcoin#131
82f9254 Fix typo
601ca04 Merge pull request #129
35399e0 Bugfix: b is restricted, not r
c35ff1e Convert lambda splitter to pure scalar code.
cc604e9 Avoid division when decomposing scalars
ff8746d Add secp256k1_scalar_mul_shift_var
bd313f7 Merge pull request #119
276f987 Merge pull request #124
25d125e Merge pull request #126
24b3c65 Add a test case for ECDSA recomputing infinity
32600e5 Add a test for r >= order signature handling
4d4eeea Make secp256k1_fe_mul_inner use the r != property
be82e92 Require that r and b are different for field multiplication.
597128d Make num optional
659b554 Make constant initializers independent from num
0af5b47 Merge pull request #120
e2e8a36 Merge pull request #117
c76be9e Remove unused num functions
4285a98 Move lambda-splitting code to scalar.
f24041d Switch all EC/ECDSA logic from num to scalar
6794be6 Add scalar splitting functions
d1502eb Add secp256k1_scalar_inverse_var which delegates to GMP
b5c9ee7 Make test_point_times_order test meaningful again
0b73059 Switch wnaf splitting from num-based to scalar-based
1e6c77c Generalize secp256k1_scalar_get_bits
5213207 Add secp256k1_scalar_add_bit
3c0ae43 Merge pull request #122
6e05287 Do signature recovery/verification with 4 possible recid case
e3d692f Explain why no y=0 check is necessary for doubling
f7dc1c6 Optimize doubling: secp256k1 has no y=0 point
666d3b5 Merge pull request #121
2a54f9b Correct typo in comment
9d64145 Merge pull request #114
99f0728 Fix secp256k1_num_set_bin handling of 0
d907ebc Add bounds checking to field element setters
bb2cd94 Merge pull request #116
665775b Don't split the g factor when not using endomorphism
9431d6b Merge pull request #115
e2274c5 build: osx: attempt to work with homebrew keg-only packages

git-subtree-dir: src/secp256k1
git-subtree-split: b0210a9
glv2 referenced this pull request in glv2/peercoin Dec 7, 2014
dexX7 added a commit to dexX7/bitcoin that referenced this pull request Jul 15, 2015
29c6bc6 Use const int instead of enum for height restrictions (dexX7)
b43da5c Add first test for hardcoded block height restrictions (dexX7)
e7a4200 Break out block restrictions and chain/network utils (dexX7)
gavinandresen pushed a commit to gavinandresen/bitcoin-git that referenced this pull request Mar 1, 2016
migrate gitian-debian apt builder from bitcoinxt project
deadalnix pushed a commit to deadalnix/bitcoin that referenced this pull request Jan 19, 2017
665775b Don't split the g factor when not using endomorphism (Pieter Wuille)
lateminer pushed a commit to lateminer/bitcoin that referenced this pull request Dec 9, 2017
0xartem referenced this pull request in Crowndev/crown-core May 29, 2018
cryptapus added a commit to cryptapus/bitcoin that referenced this pull request Nov 15, 2018
rajarshimaitra pushed a commit to rajarshimaitra/bitcoin that referenced this pull request Mar 23, 2021
Added basic encoding tests for rgb/schema/script.rs
cryptapus pushed a commit to cryptapus/bitcoin that referenced this pull request May 3, 2021
This fixes bitcoin#116.  The crash described there happens when adding an
invalid transaction to the mempool, since the constructor of
CTxMempoolEntry assumes that we have a valid structure for name tx (at
most one name input/output).  This is checked only later at the moment,
failing an assertion.

This patch introduces an earlier check for the validity of a Namecoin
transaction when adding to mempool, so that this assumption is actually
valid later on.  The check still happens as part of CheckInputs, which
is redundant for the mempool addition (not block verification) but that
is no problem.
@bitcoin bitcoin locked as resolved and limited conversation to collaborators Sep 8, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants