git add test/util/data/ test/util/test_runner.py test/README.md test/lint/lint-format-strings.py contrib/devtools/circular-dependencies.py src/qt/palladiumgui.cpp

This commit is contained in:
2026-02-05 13:31:07 +01:00
parent a5545a27ed
commit c539ebedc7
19 changed files with 170 additions and 44 deletions

0
contrib/devtools/circular-dependencies.py Normal file → Executable file
View File

View File

@@ -70,7 +70,7 @@
#include <QLabel> #include <QLabel>
#include <QPushButton> #include <QPushButton>
#include <QVersionNumber> // Falls Qt Version >= 5.6, sonst String-Vergleich #include <QVersionNumber> // Falls Qt Version >= 5.6, sonst String-Vergleich
#include "clientversion.h" // Wichtig um die eigene Version zu kennen #include <clientversion.h> // Wichtig um die eigene Version zu kennen
const std::string PalladiumGUI::DEFAULT_UIPLATFORM = const std::string PalladiumGUI::DEFAULT_UIPLATFORM =
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
@@ -470,7 +470,7 @@ void PalladiumGUI::createActions()
themeAction = new QAction(tr("&Dark Mode"), this); themeAction = new QAction(tr("&Dark Mode"), this);
themeAction->setCheckable(true); themeAction->setCheckable(true);
connect(themeAction, SIGNAL(triggered()), this, SLOT(toggleTheme())); connect(themeAction, &QAction::triggered, this, &PalladiumGUI::toggleTheme);
} }
void PalladiumGUI::createMenuBar() void PalladiumGUI::createMenuBar()

View File

@@ -92,6 +92,96 @@ options. Run `test/functional/test_runner.py -h` to see them all.
#### Troubleshooting and debugging test failures #### Troubleshooting and debugging test failures
##### Palladium consensus differences and their impact on tests
Palladium diverges from Bitcoin Core in several consensus parameters. The test
framework has been adapted accordingly, but some tests could not be fully
ported yet. This section documents what changed and what to expect.
**Key parameters (regtest)**
| Parameter | Bitcoin Core | Palladium |
|-----------|:------------:|:---------:|
| `COINBASE_MATURITY` | 100 | 120 |
| P2PKH version (mainnet) | 0 | 55 |
| P2PKH version (testnet) | 111 | 127 |
| P2SH version (testnet) | 196 | 115 |
| Bech32 HRP (mainnet) | `bc` | `plm` |
| Bech32 HRP (regtest) | `bcrt` | `rplm` |
| BIP34 / BIP66 / BIP65 / CSV | activated at specific heights | active from height 0 |
Because `COINBASE_MATURITY` is 120 instead of 100, the pre-mined cache chain
is extended beyond the original 199 blocks to `COINBASE_MATURITY + 99 = 219`
blocks so that each test node still has enough mature coinbase outputs available
at startup. Any test that previously hardcoded `generate(101)` or compared
against a fixed block height of 200 has been updated to use the
`COINBASE_MATURITY` constant exported by `test_framework.util`.
**Skipped tests and known issues**
The following tests are currently skipped or conditionally bypassed. Each entry
explains *why* and what would be needed to re-enable it:
- `feature_assumevalid.py`**skipped entirely**. The test builds blocks in
Python and submits them via P2P. Palladium's PoW validation rejects these
blocks because the nonce/nBits do not satisfy the chain's difficulty target.
Re-enabling requires either a PoW-aware block solver in the test framework or
a full rewrite that mines blocks via `generatetoaddress` RPC and then
replays the chain.
- `feature_block.py`**skipped entirely**. Same root cause: the full-block
P2P test constructs blocks manually and they do not pass Palladium's
consensus rules.
- `p2p_unrequested_blocks.py`**skipped entirely**. The test relies on
specific difficulty-rule behaviour that does not apply to the current
Palladium regtest chain.
- `feature_backwards_compatibility.py`**skipped entirely**. Requires
compiled binaries from previous Palladium releases, which are not yet
available.
- `feature_versionbits_warning.py`**skipped at runtime** if the node does
not emit the expected versionbits warning. This can happen when soft-forks are
already active from genesis on regtest.
- `feature_reindex.py`**skipped at runtime** if reindex fails to start
cleanly. On some Palladium regtest configurations this is a known issue.
- `p2p_dos_header_tree.py`**skipped at runtime** if the required header-data
file is not available for the current chain.
- Several tests in `feature_bip68_sequence.py`, `feature_csv_activation.py`,
`feature_cltv.py`, `feature_dersig.py`, and `feature_segwit.py` contain
conditional blocks that **skip sub-tests** when the relevant soft-fork is
already active at the starting height. On Palladium regtest BIP34/66/65/CSV
and SegWit are active from height 0, so their pre-activation test paths are
bypassed automatically.
- `wallet_basic.py` — the `-reindex` argument is commented out in one sub-test
because reindex crashes on Palladium regtest under certain conditions.
If the full suite appears to stall near the end, run the remaining tests
separately with `-j1` and allow extra time for completion.
##### Local test updates (Palladium)
Summary of recent test-specific changes in this fork:
- `feature_proxy.py` was made tolerant to non-deterministic SOCKS5 command
ordering and onion/DNS timing. The test now matches proxy commands by the
expected destination and allows timeouts for onion/DNS checks to avoid hangs.
- `feature_assumevalid.py` is skipped because Python-constructed blocks do not
currently satisfy Palladium's PoW validation, triggering `bad-diffbits` /
incorrect proof-of-work.
What still needs to be fixed:
- Implement a PoW-aware block solver in the Python test framework for
Palladium, or
- Rewrite `feature_assumevalid.py` to mine via `generatetoaddress` and rebuild
the chain for P2P delivery while keeping the invalid-signature block logic.
##### Resource contention ##### Resource contention
The P2P and RPC ports used by the palladiumd nodes-under-test are chosen to make The P2P and RPC ports used by the palladiumd nodes-under-test are chosen to make
@@ -122,12 +212,14 @@ pkill -9 palladiumd
##### Data directory cache ##### Data directory cache
A pre-mined blockchain with 200 blocks is generated the first time a A pre-mined blockchain is generated the first time a functional test is run
functional test is run and is stored in test/cache. This speeds up and is stored in `test/cache`. The chain length is
test startup times since new blockchains don't need to be generated for `COINBASE_MATURITY + 99` blocks (currently 219) so that every test node has
each test. However, the cache may get into a bad state, in which case enough mature coinbase outputs available immediately. This speeds up test
tests will fail. If this happens, remove the cache directory (and make startup times since new blockchains don't need to be generated for each test.
sure palladiumd processes are stopped as above): However, the cache may get into a bad state, in which case tests will fail.
If this happens, remove the cache directory (and make sure palladiumd
processes are stopped as above):
```bash ```bash
rm -rf test/cache rm -rf test/cache

0
test/lint/lint-format-strings.py Normal file → Executable file
View File

View File

@@ -154,7 +154,7 @@
{ "exec": "./palladium-tx", { "exec": "./palladium-tx",
"args": "args":
["-create", ["-create",
"outaddr=1:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o:garbage"], "outaddr=1:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN:garbage"],
"return_code": 1, "return_code": 1,
"error_txt": "error: TX output missing or too many separators", "error_txt": "error: TX output missing or too many separators",
"description": "Malformed outaddr argument (too many separators). Expected to fail." "description": "Malformed outaddr argument (too many separators). Expected to fail."
@@ -181,8 +181,8 @@
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18", "in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18",
"in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1", "in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o", "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
"outaddr=4:1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"], "outaddr=4:PWj9ftxMBeyugDgNLMyNL82rRGYQJEKpEC"],
"output_cmp": "txcreate1.hex", "output_cmp": "txcreate1.hex",
"description": "Creates a new transaction with three inputs and two outputs" "description": "Creates a new transaction with three inputs and two outputs"
}, },
@@ -193,8 +193,8 @@
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18", "in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18",
"in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1", "in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o", "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
"outaddr=4:1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"], "outaddr=4:PWj9ftxMBeyugDgNLMyNL82rRGYQJEKpEC"],
"output_cmp": "txcreate1.json", "output_cmp": "txcreate1.json",
"description": "Creates a new transaction with three inputs and two outputs (output in json)" "description": "Creates a new transaction with three inputs and two outputs (output in json)"
}, },
@@ -305,7 +305,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"output_cmp": "txcreatesignv1.hex", "output_cmp": "txcreatesignv1.hex",
"description": "Creates a new v1 transaction with a single input and a single output, and then signs the transaction" "description": "Creates a new v1 transaction with a single input and a single output, and then signs the transaction"
}, },
@@ -317,7 +317,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"output_cmp": "txcreatesignv1.json", "output_cmp": "txcreatesignv1.json",
"description": "Creates a new v1 transaction with a single input and a single output, and then signs the transaction (output in json)" "description": "Creates a new v1 transaction with a single input and a single output, and then signs the transaction (output in json)"
}, },
@@ -328,7 +328,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"output_cmp": "txcreatesignv2.hex", "output_cmp": "txcreatesignv2.hex",
"description": "Creates a new transaction with a single input and a single output, and then signs the transaction" "description": "Creates a new transaction with a single input and a single output, and then signs the transaction"
}, },
@@ -339,7 +339,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":\"0foo\",\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":\"0foo\",\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"return_code": 1, "return_code": 1,
"error_txt": "error: prevtxs internal object typecheck fail", "error_txt": "error: prevtxs internal object typecheck fail",
"description": "Tests the check for invalid vout index in prevtxs for sign" "description": "Tests the check for invalid vout index in prevtxs for sign"
@@ -351,7 +351,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"Zd49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59412\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"Zd49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59412\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"return_code": 1, "return_code": 1,
"error_txt": "error: txid must be hexadecimal string (not 'Zd49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59412')", "error_txt": "error: txid must be hexadecimal string (not 'Zd49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59412')",
"description": "Tests the check for invalid txid due to invalid hex" "description": "Tests the check for invalid txid due to invalid hex"
@@ -363,7 +363,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc594\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc594\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"return_code": 1, "return_code": 1,
"error_txt": "error: txid must be hexadecimal string (not '4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc594')", "error_txt": "error: txid must be hexadecimal string (not '4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc594')",
"description": "Tests the check for invalid txid valid hex, but too short" "description": "Tests the check for invalid txid valid hex, but too short"
@@ -375,7 +375,7 @@
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]", "set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc5948512\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]", "set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc5948512\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
"sign=ALL", "sign=ALL",
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"], "outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
"return_code": 1, "return_code": 1,
"error_txt": "error: txid must be hexadecimal string (not '4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc5948512')", "error_txt": "error: txid must be hexadecimal string (not '4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc5948512')",
"description": "Tests the check for invalid txid valid hex, but too long" "description": "Tests the check for invalid txid valid hex, but too long"
@@ -445,7 +445,7 @@
"args": "args":
["-create", ["-create",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o", "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
"outdata=4:54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"], "outdata=4:54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
"output_cmp": "txcreatedata1.hex", "output_cmp": "txcreatedata1.hex",
"description": "Creates a new transaction with one input, one address output and one data output" "description": "Creates a new transaction with one input, one address output and one data output"
@@ -455,7 +455,7 @@
["-json", ["-json",
"-create", "nversion=1", "-create", "nversion=1",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o", "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
"outdata=4:54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"], "outdata=4:54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
"output_cmp": "txcreatedata1.json", "output_cmp": "txcreatedata1.json",
"description": "Creates a new v1 transaction with one input, one address output and one data output (output in json)" "description": "Creates a new v1 transaction with one input, one address output and one data output (output in json)"
@@ -464,7 +464,7 @@
"args": "args":
["-create", ["-create",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o", "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
"outdata=54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"], "outdata=54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
"output_cmp": "txcreatedata2.hex", "output_cmp": "txcreatedata2.hex",
"description": "Creates a new transaction with one input, one address output and one data (zero value) output" "description": "Creates a new transaction with one input, one address output and one data (zero value) output"
@@ -474,7 +474,7 @@
["-json", ["-json",
"-create", "-create",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o", "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
"outdata=54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"], "outdata=54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
"output_cmp": "txcreatedata2.json", "output_cmp": "txcreatedata2.json",
"description": "Creates a new transaction with one input, one address output and one data (zero value) output (output in json)" "description": "Creates a new transaction with one input, one address output and one data (zero value) output (output in json)"
@@ -483,7 +483,7 @@
"args": "args":
["-create", ["-create",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0:4294967293", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0:4294967293",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"], "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"],
"output_cmp": "txcreatedata_seq0.hex", "output_cmp": "txcreatedata_seq0.hex",
"description": "Creates a new transaction with one input with sequence number and one address output" "description": "Creates a new transaction with one input with sequence number and one address output"
}, },
@@ -492,7 +492,7 @@
["-json", ["-json",
"-create", "-create",
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0:4294967293", "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0:4294967293",
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"], "outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"],
"output_cmp": "txcreatedata_seq0.json", "output_cmp": "txcreatedata_seq0.json",
"description": "Creates a new transaction with one input with sequence number and one address output (output in json)" "description": "Creates a new transaction with one input with sequence number and one address output (output in json)"
}, },

View File

@@ -198,7 +198,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"1E7SGgAZFCHDnVZLuRViX3gUmxpMfdvd2o" "PMhcReZQJ7mQmLE7FVpFBwekPhzEkR6bvS"
] ]
} }
}, },
@@ -211,7 +211,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"1AtWkdmfmYkErU16d3KYykJUbEp9MAj9Sb" "PJUgucAWpUERqJfry7e5eeGkCyz2RJun4p"
] ]
} }
} }

View File

@@ -207,7 +207,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"1E7SGgAZFCHDnVZLuRViX3gUmxpMfdvd2o" "PMhcReZQJ7mQmLE7FVpFBwekPhzEkR6bvS"
] ]
} }
} }

View File

@@ -207,7 +207,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"1E7SGgAZFCHDnVZLuRViX3gUmxpMfdvd2o" "PMhcReZQJ7mQmLE7FVpFBwekPhzEkR6bvS"
] ]
} }
}, },
@@ -220,7 +220,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"1AtWkdmfmYkErU16d3KYykJUbEp9MAj9Sb" "PJUgucAWpUERqJfry7e5eeGkCyz2RJun4p"
] ]
} }
} }

View File

@@ -45,7 +45,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o" "PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
] ]
} }
}, },
@@ -58,7 +58,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46" "PWj9ftxMBeyugDgNLMyNL82rRGYQJEKpEC"
] ]
} }
} }

View File

@@ -27,7 +27,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o" "PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
] ]
} }
}, },

View File

@@ -27,7 +27,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o" "PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
] ]
} }
}, },

View File

@@ -27,7 +27,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o" "PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
] ]
} }
} }

View File

@@ -36,7 +36,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o" "PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
] ]
} }
} }

View File

@@ -18,9 +18,9 @@
"reqSigs": 2, "reqSigs": 2,
"type": "multisig", "type": "multisig",
"addresses": [ "addresses": [
"1FoG2386FG2tAJS9acMuiDsKy67aGg9MKz", "PPPSB1WwJBX5996uvggSP7qbaqHTMvKjPP",
"1FXtz9KU8JNmQDyHdiEm5HDiALuP3zdHvV", "PP8597iKBDrxP4e3ynZHkBByn65GDgZysa",
"14LuavcBbXZYJ6Tsz3cAUQj9SuQoL2xCQX" "PBw5ju12eT3jGw8eL7vh9JhR4eagRCFwqz"
] ]
} }
} }

View File

@@ -18,7 +18,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "witness_v0_scripthash", "type": "witness_v0_scripthash",
"addresses": [ "addresses": [
"bc1qu9dgdg330r6r84g5mw7wqshg04exv2uttmw2elfwx74h5tgntuzs44gyfg" "plm1qu9dgdg330r6r84g5mw7wqshg04exv2uttmw2elfwx74h5tgntuzsjucj3w"
] ]
} }
} }

View File

@@ -18,7 +18,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "witness_v0_keyhash", "type": "witness_v0_keyhash",
"addresses": [ "addresses": [
"bc1q5fgkuac9s2ry56jka5s6zqsyfcugcchry5cwu0" "plm1q5fgkuac9s2ry56jka5s6zqsyfcugcchrwg20kv"
] ]
} }
} }

View File

@@ -18,7 +18,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "witness_v0_scripthash", "type": "witness_v0_scripthash",
"addresses": [ "addresses": [
"bc1qp0lfxhnscvsu0j36l36uurgv5tuck4pzuqytkvwqp3kh78cupttqyf705v" "plm1qp0lfxhnscvsu0j36l36uurgv5tuck4pzuqytkvwqp3kh78cupttqrqwev2"
] ]
} }
} }

View File

@@ -27,7 +27,7 @@
"reqSigs": 1, "reqSigs": 1,
"type": "pubkeyhash", "type": "pubkeyhash",
"addresses": [ "addresses": [
"193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7" "PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"
] ]
} }
} }

34
test/util/test_runner.py Normal file
View File

@@ -0,0 +1,34 @@
#!/usr/bin/env python3
# Copyright (c) 2026 The Palladium Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Run util test scripts."""
import os
import subprocess
import sys
def run(cmd):
print("Running:", " ".join(cmd), flush=True)
return subprocess.call(cmd)
def main():
base = os.path.dirname(__file__)
tests = [
[sys.executable, os.path.join(base, "palladium-util-test.py")],
[sys.executable, os.path.join(base, "rpcauth-test.py")],
]
exit_code = 0
for cmd in tests:
rc = run(cmd)
if rc != 0:
exit_code = rc
sys.exit(exit_code)
if __name__ == "__main__":
main()