435 Commits

Author SHA1 Message Date
tomFlowee 30643a8bcf Improve readability. 2026-05-19 17:44:04 +02:00
John Galt 4bae804db1 serialize: reject oversized CompactSize collection counts 2026-05-19 10:22:58 +02:00
John Galt 251107d457 streaming: reject invalid P2P parser byte counts 2026-05-19 10:22:58 +02:00
tomFlowee 738faee2de Add needed includes for compile on Android 2026-05-17 16:30:04 +02:00
tomFlowee 6838d03e57 Fix op-mul activation 2026-05-15 00:03:09 +02:00
John Galt aadc7c0f5a script: include token prefix in forkid signing preimage 2026-05-14 21:28:31 +02:00
John Galt 99c81869ed script: let malformed multisig fall through to P2S 2026-05-14 20:19:07 +02:00
John Galt 4876337a55 utils: allow post-Layla token commitments 2026-05-14 20:19:07 +02:00
John Galt 955b5642a7 policy: make post-Layla P2S standard 2026-05-14 20:19:07 +02:00
John Galt eb07e94a3c script: implement May 2026 loops 2026-05-14 20:19:07 +02:00
John Galt f473edf652 script: implement May 2026 functions 2026-05-14 20:19:07 +02:00
John Galt 6b288766ad script: split eval context for May 2026 frames 2026-05-14 20:19:07 +02:00
John Galt 9cd8f7908f script: implement May 2026 bitwise shifts 2026-05-14 20:19:07 +02:00
John Galt 867788038f script: name May 2026 opcode aliases 2026-05-14 20:19:07 +02:00
John Galt 1d463c68c8 script: charge signature hash iterations 2026-05-14 20:19:07 +02:00
John Galt 1751c3f14b script: enforce May 2025 VM accounting limits 2026-05-14 20:19:07 +02:00
John Galt 2699ea03f9 script: add May 2025 and 2026 VM limit constants 2026-05-14 20:19:07 +02:00
tomFlowee a5505f66c7 Avoid confusion with bigint1 and bigint2 2026-05-14 15:30:23 +02:00
tomFlowee d3948cb5e9 Avoid expensive conversion. 2026-05-14 13:34:48 +02:00
tomFlowee 008eb35f95 Make compile faster
The IDE include checker got to the point where it is actually useful and
this removes a lot of unneeded includes.
Naturally, especially for headers like util.h, this may mean we need to
re-add includes in consuming cpp files that bloats the diff a bit.
2026-05-14 13:27:17 +02:00
tomFlowee 3bf765e2a3 Make sure we have access to Tx
Similar to the previous commit; make sure that the ValidationContext has
access to the new Tx format so new code can use it directly.

In practically all cases (outside of the unit tests) callers already had
a Tx instance. Making it just a matter of sending it with.

Notice that the Tx object is immutable and implicitly shared which makes
it cheaper to pass around.
2026-05-14 13:27:17 +02:00
tomFlowee f0e026d1c7 Be more tolerant in the concept of 'next' 2026-05-14 10:53:37 +02:00
John Galt ad730f4d34 script: add CashToken introspection opcodes 2026-05-14 10:28:44 +02:00
John Galt 078ba3a49c script: hash token prefixes in SIGHASH_UTXOS 2026-05-14 10:28:44 +02:00
John Galt 6f4c85570a primitives: fix indexed output lookup 2026-05-14 10:28:44 +02:00
tomFlowee 6996e56330 Cleanup includes 2026-05-13 17:55:03 +02:00
tomFlowee ced4f98beb Add token support to the Tx object
We add a Token class to Tx, which adds an easy to use API when compared
to the plain iterator. The main point of the API chosen is to make sure
we don't do unneeded parsing or copying for tokens unless needed.

Additionally refactor the ValidationPrivate::UnspentOutput class to
inherit from the Tx::Output class in order to avoid lots of duplicated
logic on handling the data.
2026-05-13 17:20:32 +02:00
tomFlowee 562eba5b64 Make outscript usage shallow
The new SIGHASH_UTXO has a possible attack vector where prepared huge
outputs are used and required to be hashed for the signing preimage.
At most you can force the full node to prepare 20GB of (utxo) data
_prior_ to creation of the preimage. Which is a big issue when it comes
to memory usage of the node.
What this change does is we ensure that the class used for this data is
a ConstBuf as given to us from the utxo. Which are just pointers and not
full data, the data is memory mapped.
So we ensure shallow copies to avoid actually requiring the data to be
in memory until the point where it is used. And it can get swapped out
immediately after.

This ensures we are immune to the SIGHASH_UTXO attack vector.
2026-05-12 15:46:48 +02:00
tomFlowee 0aa874b621 Cleanups and fixes.
This fixes a surprising interaction of the utxo checks with the
script verify flag SCRIPT_VERIFY_STRICTENC.
2026-05-11 22:55:32 +02:00
John Galt d1f6296398 script: enable May 2023 SIGHASH_UTXOS 2026-05-09 23:52:30 +02:00
John Galt e2ad620969 script: enable May 2022 native introspection opcodes 2026-05-09 23:52:30 +02:00
tomFlowee 6c992b9fd1 Work around bug in old version of boost.
Modula by zero will make the CPU throw a signal at our process, as
such (just like divide by zero) we should detect it.
Boost does that just fine in newer versions, but we need to write
that line ourselves for older ones.
2026-05-09 23:52:30 +02:00
John Galt 3bb2e22859 validation: enforce May 2023 tx size and version rules 2026-05-08 23:22:28 +02:00
tomFlowee a43372ceaa Avoid scary gcc warning
This would give a memcpy warning that is known to happen with boost
multiprecision but is ultimately
harmless.
2026-05-07 22:05:11 +02:00
tomFlowee 4a12e4885f Use new math in interpreter, regardless of flags.
This avoids overhead for a case that never happens.
2026-05-07 21:40:25 +02:00
tomFlowee f1012f0797 Move classes out of public ones.
script.h is installed and part of the library 'flowee_utils', as such
it makes sense to move those new classes out of the ones seen by
downstream users.
2026-05-07 21:12:56 +02:00
John Galt de512b9edb Import BigInt protocol upgrade 2026-05-07 17:51:05 +02:00
tomFlowee cd317bc3c0 Cleanup p2sh32
The activation is past and there is no point in having a flag passed
through a dozen methods in order to detect when to enable it.
Because it is always enabled.
2026-05-07 16:15:26 +02:00
John Galt 96f036e78d script: enable Upgrade9 P2SH32 validation
Adds the SCRIPT_ENABLE_P2SH_32 script flag and applies it at the existing May 2023 activation point
2026-05-07 15:29:55 +02:00
John Galt 45b8369aaf add chipnet chain 2026-05-07 12:21:35 +02:00
tomFlowee e18d78d30e Remove include 2026-05-07 10:37:09 +02:00
tomFlowee d71aeb7b40 Add support for p2sh32 2026-04-22 17:01:26 +02:00
tomFlowee d819e0fa4c Make p2sh address extraction work.
This now uses the proper prefix/postfix to detect a p2sh.
2026-04-22 13:28:53 +02:00
tomFlowee c3e2f98b75 Remove expensive and not used ToString() methods.
The mining code still called that, this replaces it with standard
log lines that cost less at runtime and keeps the code that is
rarely run away from the shared parts.
2026-04-20 22:45:56 +02:00
tomFlowee 0a2e552168 Move more logic over to byte-array based Block
This introduces a new BlockHeader helper class which Block and
MutableBlock can both produce, which helps a lot of methods to
be ported to no longer be dependent on us using a MutableBlock
object, which is too costly to use when we have no intention
to alter the block.
2026-04-20 22:21:18 +02:00
tomFlowee 900e790bf0 Avoid warning: make more =default. 2026-04-15 00:07:09 +02:00
tomFlowee 25f9e6979c Changes to use the new format
For transaction::checkTransaction():
this in practice avoids lots of mallocs and overhead while doing
transaction checks.

For merkleroot, the same benefits. Avoiding copying and mallocs.
2026-04-15 00:07:09 +02:00
tomFlowee ff4a433173 Remove dead code. 2026-04-15 00:07:09 +02:00
tomFlowee 363153e9df Support logging line numbers and file/method names. 2026-04-11 00:26:48 +02:00
tomFlowee ef96b62937 Add calling thread ID to the log output. 2026-04-10 23:53:01 +02:00