Commit graph

3973 commits

Author SHA1 Message Date
Olaoluwa Osuntokun
8b2f43e9ce
Merge pull request #2136 from Roasbeef/btcd-24-0-2-rc1
build: bump version to v0.24.2-beta.rc1
2024-03-18 17:45:13 -04:00
Olaoluwa Osuntokun
a90d3d93e9
Merge pull request #2135 from SulaimanAminuBarkindo/improved-der-signature-validation
Add check for maximum signature length in ecdsa.ParseDERSignature
2024-03-18 17:44:26 -04:00
Oliver Gugger
2fc99e0496
Merge pull request #2138 from yyforyongyu/error-matching
rpcclient: add detailed error types
2024-03-18 09:17:28 -06:00
yyforyongyu
8abf969c3c
rpcserver: return the plain reject reason from btcd
This commit changes the `RejectReason` resulted from calling
btcd's `testmempoolaccept` to be un-matched, leaving it to the caller to
decide when and where to match it.
2024-03-18 23:08:48 +08:00
yyforyongyu
36683e0b96
rpcclient: define specific errors for chain backends
This commit adds detailed errors for all possible errors returned from
`sendrawtransaction` or `testmempoolaccept`, enabling upstream callers
to have refined control over the actions to be taken.
2024-03-18 23:08:47 +08:00
Olaoluwa Osuntokun
aee2705f70
build: bump version to v0.24.2-beta.rc1 2024-03-08 17:58:53 -08:00
Olaoluwa Osuntokun
f0ec9fbcce
Merge pull request #2128 from kcalvinalvin/2024-02-27-no-panic-for-subscription-callback-errors
blockchain: always relock chainLock for subscription callbacks
2024-03-08 17:56:14 -08:00
Olaoluwa Osuntokun
8ed234b9f5
Merge pull request #2134 from kcalvinalvin/2024-03-07-make-duplicate-entries-on-mapslice-impossible
blockchain: fix a bug where a duplicate entry is possible in the mapslice
2024-03-08 17:54:08 -08:00
Olaoluwa Osuntokun
e63bf03d2a
Merge pull request #2123 from kcalvinalvin/2024-02-15-no-utxocache-loading-on-reorgs
blockchain: fix inconsistent utxocache and database on reorg
2024-03-08 17:52:57 -08:00
theedtron
b66f5b8379
multi: fix ioutil deprecated function
update i/o functions to use os / io package functions instead
2024-03-08 17:41:41 -08:00
Olaoluwa Osuntokun
447c95c9c2
Merge pull request #2122 from kcalvinalvin/2024-02-15-dont-rely-on-height-fetching
blockchain: don't rely on BlockHeightByHash for prune height calculations
2024-03-08 17:40:16 -08:00
SulaimanAminuBarkindo
9d2184eb2d Add check for maximum signature length in ecdsa.ParseDERSignature
* Updated the `ecdsa.ParseDERSignature` to include the MaxSigLen constant, which defines the maximum length of a DER encoded signature.
* The MaxSigLen constant is set to 72 bytes, as per the explanation in the comment.
* A new test case has been added to test the functionality with a long signature.
* The test case checks if signatures longer than the specified maximum length are properly handled.
* The test ensures that signatures exceeding the maximum length are correctly identified as invalid.
2024-03-07 09:03:20 +01:00
Calvin Kim
078815bcbc blockchain: remove utxoview from the argument in connectBlock
Since no code is now depending on accepting new blocks without the
cache, we get rid of the option to do so.
2024-03-07 15:43:48 +09:00
Calvin Kim
059a668e88 blockchain: check all the maps first before adding an entry
When attempting to insert an entry to the mapslice, we check all the
underlying maps to ensure that the entry doesn't exist.
2024-03-07 15:27:44 +09:00
Calvin Kim
8d1aa01c69 blockchain: add another mapslice duplicate entry case
Duplicate entries are currently possible in the following scenario:

1: Add entries to the mapslice.
2: 1st map is full. Move onto the 2nd map.
3: Delete any entry in the first map.
4: Attempt to add an entry in the 2nd map.

When attempting (4), the entry should just be overwritten but a
duplicate gets added.
2024-03-07 15:24:00 +09:00
Olaoluwa Osuntokun
a4f447006e
Merge pull request #2131 from kcalvinalvin/2024-03-05-fix-intermittent-addrmgr-bug
addrmgr: fix intermittent addrmanager_internal_test bug
2024-03-05 12:07:57 -06:00
Calvin Kim
99846b0805 blockchain: remove unused fetchUtxosMain() 2024-03-06 02:44:51 +09:00
Calvin Kim
78b158dc56 blockchain: get rid of database as an argument in fetchInputUtxos
Allowing the caller to fetch from either the database or the cache
resulted in inconsistencies if the cache were ever to be dirty.
Removing this option eliminates this problem.
2024-03-06 02:42:33 +09:00
Calvin Kim
a254998bc5 blockchain: change reorg utxo cache behavior
The assumption in the previous code was incorrect in that we were
assuming that the chainLock is held throughout the entire chain reorg.
This is not the case since the chainLock is let go of during the
callback to the subscribers.

Because of this, we need to ensure that the utxo set is consistent on
each block disconnect. To achieve this, additional flushes are added
during block disconnects.

Also the utxocache is no longer avoided during block connects and when
we're checking for the validity of the block connects and disconnects as
we can just use the cache instead of trying to avoid it.
2024-03-06 02:40:24 +09:00
Calvin Kim
f2caa8fadc blockchain: don't rely on BlockHeightByHash for prune height
calculations

Since BlockHeightByHash only returns the heights for blocks that are in
the main chain, when a block that is stale gets pruned, this will cause
an error in the block height lookup and cause an error in block
processing.

Look up the node directly from the index and if the node isn't found,
just skip that node. For utxoCache.lastFlushHash, if that isn't found,
just force a flush.
2024-03-06 02:15:39 +09:00
Calvin Kim
f9da3387f1 addrmgr: fix intermittent addrmanager_internal_test bug
Sometimes the tests in the addrmanager_internal_test will fail with:
"addrmanager_internal_test.go: expected to find 5 addresses, found 4"

This is because the generated address with randAddr() may not always
generate an address that's routable. If the address is not routable,
that address will not be added to the manager when calling AddAddress().

This bug is fixed by creating a new function routableRandAddr() that
always creates a routable random address.
2024-03-05 16:33:08 +09:00
Olaoluwa Osuntokun
1a2b599bf1
Merge pull request #2125 from yyforyongyu/add-gettxspendingprevout
Add `gettxspendingprevout` for `btcd` and fix version check
2024-03-01 15:04:20 -06:00
yyforyongyu
0d4ed16ed7
btcd: increase version number to 0.24.1 2024-02-28 16:40:11 +08:00
yyforyongyu
34721f02c1
rpcclient: replace ErrBitcoindVersion with ErrBackendVersion 2024-02-28 03:38:48 +08:00
yyforyongyu
4cf49bd72c
multi: turn BackendVersion into an interface
This commit adds a new interface, `BackendVersion`, to support checking
versions for multiple both btcd and bitcoind. Once neutrino version is
also pinned here, it should also be checked.
2024-02-27 23:04:47 +08:00
yyforyongyu
9e6070a707
rpcclient: start tracking btcd version 2024-02-27 23:04:46 +08:00
yyforyongyu
0d52a890f2
rpcclient: handle backend versioning in one file 2024-02-27 23:04:46 +08:00
yyforyongyu
a033b0d6e7
rpcclient+integration: add new method GetTxSpendingPrevOut 2024-02-27 23:04:46 +08:00
yyforyongyu
5f71df165e
rpcclient: track bitcoind version 24.0.0
We need this for `gettxspendingprevout`.
2024-02-27 22:58:33 +08:00
yyforyongyu
72bbdd55a6
rpcserver+mempool: implement gettxspendingprevout for btcd
This commit adds the RPC method `gettxspendingprevout` for btcd.
2024-02-27 22:58:33 +08:00
yyforyongyu
dd31767617
btcjson: add new command GetTxSpendingPrevOutCmd 2024-02-27 22:58:33 +08:00
Calvin Kim
3d1150a1a8 blockchain: always relock chainLock for subscription callbacks
For various b.sendNotifcation() callbacks, if a runtime panic happens,
we don't get any useful debugging information since the error that
happens first is the "unlock of unlocked mutex" error.

This is because we temporarily unlock the chainLock for callbacks and
then relock them.  However, since the relocking code is executed after
the completion of the callback, if an error happens during that
callback, we never relock the chainLock.

Switching to an anonymous function and having the unlock code as a
defer will ensure that the lock always relocks.
2024-02-27 14:32:42 +09:00
Olaoluwa Osuntokun
9ea2eea99b
Merge pull request #2112 from devlzcode/expose-newfutureerror
feat: Expose newFutureError for developer friendliness
2024-02-26 16:20:30 -08:00
Olaoluwa Osuntokun
5b6d265dd9
Merge pull request #2108 from kcalvinalvin/2024-01-22-dont-update-mempool
netsync: don't update mempool/fee estimator unless we're synced up
2024-02-26 16:19:51 -08:00
Olaoluwa Osuntokun
d55c55a81f
Merge pull request #2119 from nikicat/nb/include-unsafe
Added 'include_unsafe' option to FundRawTransaction
2024-02-22 14:46:04 -08:00
Calvin Kim
5a91ea23ca blockchain_test, fullblocktests: add test to check for utxo
existance/non-existance

New test instance BlockDisconnectExpectUTXO tests that a utxo
exists/doesn't exist after a specific block has been disconnected.
2024-02-21 19:09:03 +09:00
Calvin Kim
a0c9e3b384 blockchain: add case for pruning stale blocks
Pruning stale blocks will make the block validation fail for the block
that the prune was triggered on as BlockHeightByHash will not return the
height for blocks that are not in the main chain.

We add a test case to ensure that the test fails in the above case.
2024-02-16 16:17:04 +09:00
Calvin Kim
8836219a02 blockchain: return error in db.View instead of t.Fatal
Calling t.Fatal inside db.View makes the test hang on failures.  Return
the error and call t.Fatal outside of db.View avoids this.
2024-02-16 16:17:04 +09:00
Nikolay Bryskin
069a0eca29
Added 'include_unsafe' option to FundRawTransaction 2024-02-05 14:55:17 +02:00
ly
c4b1448212
feat: Expose newFutureError for developer friendliness 2024-01-25 19:24:23 -08:00
Olaoluwa Osuntokun
13152b35e1
Merge pull request #2089 from kcalvinalvin/2024-01-03-add-last-flush-time-on-initconsistentstate
blockchain: set the lastflushtime when setting the lastflushhash
2024-01-23 20:25:55 -08:00
Olaoluwa Osuntokun
8e53942b98
Merge pull request #2107 from Halimao/refactor/make-help
refactor: add `make help` to display the usage for project Makefile
2024-01-23 20:14:29 -08:00
Halimao
2a55ff4884 refactor: add make help command that describes goals 2024-01-24 10:28:18 +08:00
Olaoluwa Osuntokun
62e6af035e
Merge pull request #2105 from yyforyongyu/fix-batch-mem-leak
rpcclient: make sure batch requests are GCed
2024-01-22 16:01:08 -08:00
Calvin Kim
c17cf800dc netsync: don't update mempool/fee estimator unless we're synced up
Noticed during ibd that there's a slight overhead for
handleBlockchainNotification on mempool/fee estimator updates. Since
there's no reason to be looking at this while we're not caught up,
return early and avoid the calls.
2024-01-22 13:35:55 +09:00
yyforyongyu
9cda0f7e95
wire: add Copy method to MsgBlock 2024-01-21 18:43:15 +08:00
yyforyongyu
e8a5a55379
rpcclient: make sure batch requests are GCed
This commit makes sure the batch requests are always GCed before sending
back the responses for them. In particular,
- `removeRequest` didn't remove the item from `batchList`, which is now
  fixed.
- `Send` didn't remove the request from `requestMap`, which is now fixed
  by using `removeRequest`.
2024-01-19 18:56:22 +08:00
Olaoluwa Osuntokun
17fdc5219b
Merge pull request #2053 from yyforyongyu/testmempoolaccept
support `testmempoolaccept` for both `bitcoind` and `btcd`
2024-01-16 12:06:49 -08:00
yyforyongyu
fbe65bfc01
gomod: run go mod tidy for all modules
Also add the `make tidy-module` copied from `lnd`.
2024-01-15 17:22:42 +08:00
yyforyongyu
8817ebdd39
integration: print logs to console 2024-01-15 17:22:42 +08:00