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:
0
contrib/devtools/circular-dependencies.py
Normal file → Executable file
0
contrib/devtools/circular-dependencies.py
Normal file → Executable file
@@ -70,7 +70,7 @@
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#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 =
|
||||
#if defined(Q_OS_MAC)
|
||||
@@ -470,7 +470,7 @@ void PalladiumGUI::createActions()
|
||||
|
||||
themeAction = new QAction(tr("&Dark Mode"), this);
|
||||
themeAction->setCheckable(true);
|
||||
connect(themeAction, SIGNAL(triggered()), this, SLOT(toggleTheme()));
|
||||
connect(themeAction, &QAction::triggered, this, &PalladiumGUI::toggleTheme);
|
||||
}
|
||||
|
||||
void PalladiumGUI::createMenuBar()
|
||||
|
||||
104
test/README.md
104
test/README.md
@@ -92,6 +92,96 @@ options. Run `test/functional/test_runner.py -h` to see them all.
|
||||
|
||||
#### 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
|
||||
|
||||
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
|
||||
|
||||
A pre-mined blockchain with 200 blocks is generated the first time a
|
||||
functional test is run and is stored in test/cache. This speeds up
|
||||
test startup times since new blockchains don't need to be generated for
|
||||
each test. 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):
|
||||
A pre-mined blockchain is generated the first time a functional test is run
|
||||
and is stored in `test/cache`. The chain length is
|
||||
`COINBASE_MATURITY + 99` blocks (currently 219) so that every test node has
|
||||
enough mature coinbase outputs available immediately. This speeds up test
|
||||
startup times since new blockchains don't need to be generated for each test.
|
||||
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
|
||||
rm -rf test/cache
|
||||
|
||||
0
test/lint/lint-format-strings.py
Normal file → Executable file
0
test/lint/lint-format-strings.py
Normal file → Executable file
@@ -154,7 +154,7 @@
|
||||
{ "exec": "./palladium-tx",
|
||||
"args":
|
||||
["-create",
|
||||
"outaddr=1:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o:garbage"],
|
||||
"outaddr=1:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN:garbage"],
|
||||
"return_code": 1,
|
||||
"error_txt": "error: TX output missing or too many separators",
|
||||
"description": "Malformed outaddr argument (too many separators). Expected to fail."
|
||||
@@ -181,8 +181,8 @@
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
|
||||
"in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18",
|
||||
"in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o",
|
||||
"outaddr=4:1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"],
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
|
||||
"outaddr=4:PWj9ftxMBeyugDgNLMyNL82rRGYQJEKpEC"],
|
||||
"output_cmp": "txcreate1.hex",
|
||||
"description": "Creates a new transaction with three inputs and two outputs"
|
||||
},
|
||||
@@ -193,8 +193,8 @@
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
|
||||
"in=bf829c6bcf84579331337659d31f89dfd138f7f7785802d5501c92333145ca7c:18",
|
||||
"in=22a6f904655d53ae2ff70e701a0bbd90aa3975c0f40bfc6cc996a9049e31cdfc:1",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o",
|
||||
"outaddr=4:1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"],
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
|
||||
"outaddr=4:PWj9ftxMBeyugDgNLMyNL82rRGYQJEKpEC"],
|
||||
"output_cmp": "txcreate1.json",
|
||||
"description": "Creates a new transaction with three inputs and two outputs (output in json)"
|
||||
},
|
||||
@@ -305,7 +305,7 @@
|
||||
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
|
||||
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"output_cmp": "txcreatesignv1.hex",
|
||||
"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=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"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)"
|
||||
},
|
||||
@@ -328,7 +328,7 @@
|
||||
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
|
||||
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"output_cmp": "txcreatesignv2.hex",
|
||||
"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=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59485\",\"vout\":\"0foo\",\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"return_code": 1,
|
||||
"error_txt": "error: prevtxs internal object typecheck fail",
|
||||
"description": "Tests the check for invalid vout index in prevtxs for sign"
|
||||
@@ -351,7 +351,7 @@
|
||||
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
|
||||
"set=prevtxs:[{\"txid\":\"Zd49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59412\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"return_code": 1,
|
||||
"error_txt": "error: txid must be hexadecimal string (not 'Zd49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc59412')",
|
||||
"description": "Tests the check for invalid txid due to invalid hex"
|
||||
@@ -363,7 +363,7 @@
|
||||
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
|
||||
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc594\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"return_code": 1,
|
||||
"error_txt": "error: txid must be hexadecimal string (not '4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc594')",
|
||||
"description": "Tests the check for invalid txid valid hex, but too short"
|
||||
@@ -375,7 +375,7 @@
|
||||
"set=privatekeys:[\"5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf\"]",
|
||||
"set=prevtxs:[{\"txid\":\"4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc5948512\",\"vout\":0,\"scriptPubKey\":\"76a91491b24bf9f5288532960ac687abb035127b1d28a588ac\"}]",
|
||||
"sign=ALL",
|
||||
"outaddr=0.001:193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"],
|
||||
"outaddr=0.001:PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"],
|
||||
"return_code": 1,
|
||||
"error_txt": "error: txid must be hexadecimal string (not '4d49a71ec9da436f71ec4ee231d04f292a29cd316f598bb7068feccabdc5948512')",
|
||||
"description": "Tests the check for invalid txid valid hex, but too long"
|
||||
@@ -445,7 +445,7 @@
|
||||
"args":
|
||||
["-create",
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o",
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
|
||||
"outdata=4:54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
|
||||
"output_cmp": "txcreatedata1.hex",
|
||||
"description": "Creates a new transaction with one input, one address output and one data output"
|
||||
@@ -455,7 +455,7 @@
|
||||
["-json",
|
||||
"-create", "nversion=1",
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o",
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
|
||||
"outdata=4:54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
|
||||
"output_cmp": "txcreatedata1.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":
|
||||
["-create",
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o",
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
|
||||
"outdata=54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
|
||||
"output_cmp": "txcreatedata2.hex",
|
||||
"description": "Creates a new transaction with one input, one address output and one data (zero value) output"
|
||||
@@ -474,7 +474,7 @@
|
||||
["-json",
|
||||
"-create",
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o",
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN",
|
||||
"outdata=54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e"],
|
||||
"output_cmp": "txcreatedata2.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":
|
||||
["-create",
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0:4294967293",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"],
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"],
|
||||
"output_cmp": "txcreatedata_seq0.hex",
|
||||
"description": "Creates a new transaction with one input with sequence number and one address output"
|
||||
},
|
||||
@@ -492,7 +492,7 @@
|
||||
["-json",
|
||||
"-create",
|
||||
"in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:0:4294967293",
|
||||
"outaddr=0.18:13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"],
|
||||
"outaddr=0.18:PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"],
|
||||
"output_cmp": "txcreatedata_seq0.json",
|
||||
"description": "Creates a new transaction with one input with sequence number and one address output (output in json)"
|
||||
},
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"1E7SGgAZFCHDnVZLuRViX3gUmxpMfdvd2o"
|
||||
"PMhcReZQJ7mQmLE7FVpFBwekPhzEkR6bvS"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -211,7 +211,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"1AtWkdmfmYkErU16d3KYykJUbEp9MAj9Sb"
|
||||
"PJUgucAWpUERqJfry7e5eeGkCyz2RJun4p"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"1E7SGgAZFCHDnVZLuRViX3gUmxpMfdvd2o"
|
||||
"PMhcReZQJ7mQmLE7FVpFBwekPhzEkR6bvS"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"1E7SGgAZFCHDnVZLuRViX3gUmxpMfdvd2o"
|
||||
"PMhcReZQJ7mQmLE7FVpFBwekPhzEkR6bvS"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -220,7 +220,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"1AtWkdmfmYkErU16d3KYykJUbEp9MAj9Sb"
|
||||
"PJUgucAWpUERqJfry7e5eeGkCyz2RJun4p"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"
|
||||
"PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -58,7 +58,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"1P8yWvZW8jVihP1bzHeqfE4aoXNX8AVa46"
|
||||
"PWj9ftxMBeyugDgNLMyNL82rRGYQJEKpEC"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"
|
||||
"PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"
|
||||
"PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"
|
||||
"PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"13tuJJDR2RgArmgfv6JScSdreahzgc4T6o"
|
||||
"PBV5TGcG5MAMqcMSGAcyHLc8GKssjQ9SJN"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
"reqSigs": 2,
|
||||
"type": "multisig",
|
||||
"addresses": [
|
||||
"1FoG2386FG2tAJS9acMuiDsKy67aGg9MKz",
|
||||
"1FXtz9KU8JNmQDyHdiEm5HDiALuP3zdHvV",
|
||||
"14LuavcBbXZYJ6Tsz3cAUQj9SuQoL2xCQX"
|
||||
"PPPSB1WwJBX5996uvggSP7qbaqHTMvKjPP",
|
||||
"PP8597iKBDrxP4e3ynZHkBByn65GDgZysa",
|
||||
"PBw5ju12eT3jGw8eL7vh9JhR4eagRCFwqz"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "witness_v0_scripthash",
|
||||
"addresses": [
|
||||
"bc1qu9dgdg330r6r84g5mw7wqshg04exv2uttmw2elfwx74h5tgntuzs44gyfg"
|
||||
"plm1qu9dgdg330r6r84g5mw7wqshg04exv2uttmw2elfwx74h5tgntuzsjucj3w"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "witness_v0_keyhash",
|
||||
"addresses": [
|
||||
"bc1q5fgkuac9s2ry56jka5s6zqsyfcugcchry5cwu0"
|
||||
"plm1q5fgkuac9s2ry56jka5s6zqsyfcugcchrwg20kv"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "witness_v0_scripthash",
|
||||
"addresses": [
|
||||
"bc1qp0lfxhnscvsu0j36l36uurgv5tuck4pzuqytkvwqp3kh78cupttqyf705v"
|
||||
"plm1qp0lfxhnscvsu0j36l36uurgv5tuck4pzuqytkvwqp3kh78cupttqrqwev2"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"reqSigs": 1,
|
||||
"type": "pubkeyhash",
|
||||
"addresses": [
|
||||
"193P6LtvS4nCnkDvM9uXn1gsSRqh4aDAz7"
|
||||
"PGdZFKHmUzGPmatghEE4Suf94B1a9ey8gS"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
34
test/util/test_runner.py
Normal file
34
test/util/test_runner.py
Normal 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()
|
||||
Reference in New Issue
Block a user