Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
195 commits
Select commit Hold shift + click to select a range
0984261
audit: freeze transfer recovery gate failure [FINDING-149]
ALENOC Oct 9, 2026
8d4e86d
test: wait for transfer crash recovery tip [FINDING-149]
ALENOC Oct 9, 2026
a349da3
audit: freeze anchor and raw funding limitations [FINDING-150][FINDIN…
ALENOC Oct 9, 2026
b8bc089
audit: confirm macOS package in CI [FINDING-089]
ALENOC Oct 9, 2026
bbe2ced
audit: freeze asset RPC and Qt findings [FINDING-152-155]
ALENOC Oct 9, 2026
9d24b8b
audit: freeze macOS runner loss [FINDING-156]
ALENOC Oct 9, 2026
7a25024
rpc: generate protected default asset destinations [FINDING-152]
ALENOC Oct 9, 2026
3424ddc
test: prove fail-safe anchor funding limits [FINDING-148][FINDING-150…
ALENOC Oct 9, 2026
588ef7e
test: cover asset index and legacy migration limits [FINDING-153][FIN…
ALENOC Oct 9, 2026
193d264
docs: explain anchor funding and asset migration [FINDING-148][FINDIN…
ALENOC Oct 9, 2026
205c673
audit: record asset regression evidence [FINDING-148][FINDING-149][FI…
ALENOC Oct 9, 2026
879a818
qt: show contextual protected asset destinations [FINDING-154]
ALENOC Oct 9, 2026
870a0be
audit: track Qt verification gate [FINDING-154]
ALENOC Oct 9, 2026
d64ed5a
test: prove exact-fee anchor recovery [FINDING-148]
ALENOC Oct 9, 2026
09220ec
audit: retain asset release blockers [FINDING-067]
ALENOC Oct 9, 2026
5c90bf0
audit: correct exact-fee regression evidence [FINDING-148]
ALENOC Oct 9, 2026
0a100e7
audit: record pinned Qt build [FINDING-154]
ALENOC Oct 9, 2026
e0893a6
audit: record activation proposal approval [FINDING-067]
ALENOC Oct 9, 2026
73dfc7f
audit: freeze legacy asset sunset gap [FINDING-157]
ALENOC Oct 9, 2026
e9e7ba6
audit: freeze PQ-only asset ownership gap [FINDING-158]
ALENOC Oct 9, 2026
055d6ef
audit: record paired CI evidence [FINDING-084] [FINDING-089] [FINDING…
ALENOC Oct 9, 2026
198b930
consensus: parse PQ-only asset prefix [FINDING-158]
ALENOC Oct 9, 2026
6dbc4db
docs: record PQ-only asset format checkpoint [FINDING-158]
ALENOC Oct 9, 2026
17053c0
wallet: construct PQ-only asset outputs [FINDING-158]
ALENOC Oct 9, 2026
2e07c1a
audit: freeze PQ-only scriptSig malleability [FINDING-159]
ALENOC Oct 9, 2026
99101c0
audit: freeze block compatibility and custody gaps [FINDING-160] [FIN…
ALENOC Oct 9, 2026
767e1b2
audit: freeze PQ asset message subscription regression [FINDING-162]
ALENOC Oct 9, 2026
ebc97a6
audit: freeze PQ asset address and restriction leaks [FINDING-163] [F…
ALENOC Oct 9, 2026
802bf24
[FINDING-158][FINDING-159][FINDING-161] Enforce PQ-only asset scripts…
ALENOC Oct 10, 2026
5f34f8c
[FINDING-158][FINDING-162][FINDING-163] Preserve PQ-only wallet custo…
ALENOC Oct 10, 2026
b715332
[FINDING-158][FINDING-164] Route asset RPC and Qt outputs to PQ-only …
ALENOC Oct 10, 2026
6ed46c9
[FINDING-164] Restore PQ-only tag and freeze history in wallet and Qt
ALENOC Oct 10, 2026
3ed3230
[FINDING-158][FINDING-159][FINDING-161][FINDING-162][FINDING-163][FIN…
ALENOC Oct 10, 2026
a9a7856
[FINDING-165][FINDING-166] Freeze CI qualification failures
ALENOC Oct 12, 2026
3c1d8c0
[FINDING-165] Remove optional Python RIPEMD160 from PQ tests
ALENOC Oct 12, 2026
2c95760
[FINDING-166] Report mandatory unit test failures in Build Raven
ALENOC Oct 12, 2026
1df4321
[FINDING-165][FINDING-166] Record local verification
ALENOC Oct 12, 2026
ea10413
[FINDING-161] Exclude premature PQ-only asset outputs from policy
ALENOC Oct 12, 2026
90a16ef
[FINDING-161] Record boundary regression and limitation
ALENOC Oct 12, 2026
a939b16
[FINDING-160] Document native block upgrade boundary
ALENOC Oct 12, 2026
934839c
[FINDING-167] Record pinned FreeType source outage
ALENOC Oct 12, 2026
829e895
[FINDING-167] Use direct Savannah FreeType mirror
ALENOC Oct 12, 2026
4c2bc19
[FINDING-167] Record local ARM64 fetch regression
ALENOC Oct 12, 2026
471deae
[FINDING-160] Record two-binary PQ witness boundary
ALENOC Oct 12, 2026
f143e7f
[FINDING-168] Freeze wallet rewrite plaintext finding
ALENOC Oct 12, 2026
7703614
[FINDING-168] Reproduce partial BDB page clearing
ALENOC Oct 12, 2026
75a478f
[FINDING-158] Clarify asset PQ-only migration
ALENOC Oct 12, 2026
0b6d74b
[FINDING-153] Align asset guidance with PQ-only identifiers
ALENOC Oct 12, 2026
b8f88f1
[FINDING-148] Prove dust anchor recovery
ALENOC Oct 12, 2026
5f21bb1
[FINDING-168] Clear entire new Berkeley DB pages
ALENOC Oct 12, 2026
a693657
[FINDING-148][FINDING-150][FINDING-151] Document anchor limits
ALENOC Oct 12, 2026
45855dd
[FINDING-153] Mark prior index aggregation superseded
ALENOC Oct 12, 2026
dedfe0c
[FINDING-154] Record pinned Qt interaction evidence
ALENOC Oct 12, 2026
d64c348
[FINDING-168] Reject unsafe wallet rewrite pages
ALENOC Oct 12, 2026
9151946
[FINDING-168] Record full-page regression and local proof
ALENOC Oct 12, 2026
14b7ead
[FINDING-067] Record exact-SHA CI and Qt artifact qualification
ALENOC Oct 13, 2026
c74dc42
[FINDING-158] Verify PQ-only asset format with Core 4.8.0
ALENOC Oct 13, 2026
1dfae5b
[FINDING-067] Set approved bit 13 public activation windows
ALENOC Oct 13, 2026
dce0649
[FINDING-067] Align asset deployment notes with PQ-only format
ALENOC Oct 13, 2026
6bdbae2
[FINDING-067] Record bit 13 parameter proof and release gates
ALENOC Oct 13, 2026
e2e86a5
[FINDING-067] Record paired CI for approved bit 13 timing
ALENOC Oct 13, 2026
b7d1774
[FINDING-067] Record partial testnet history evidence
ALENOC Oct 13, 2026
5ee01cb
[FINDING-067] Verify all candidate artifact manifests
ALENOC Oct 13, 2026
73cbc93
[FINDING-160] Document approved bit 12 network upgrade
ALENOC Oct 13, 2026
3c3bf83
[FINDING-160] Correct remaining compatibility claims
ALENOC Oct 13, 2026
6a2acc7
[FINDING-160] Record approved incompatible deployment plan
ALENOC Oct 13, 2026
1abbcfe
[FINDING-166] Record accepted historical CI disposition
ALENOC Oct 13, 2026
2827cca
[FINDING-067] Describe staged asset protection in README
ALENOC Oct 13, 2026
a809f67
[FINDING-067] Use plain punctuation in README
ALENOC Oct 13, 2026
2df4d2d
[FINDING-067] Schedule bit 12 mainnet activation
ALENOC Oct 13, 2026
948b1ea
[FINDING-160] Document bit 12 operator rollout
ALENOC Oct 13, 2026
7c0d43c
[FINDING-067] Record bit 12 qualification status
ALENOC Oct 13, 2026
7c7ef25
[FINDING-160] Clarify miner signaling scope
ALENOC Oct 13, 2026
01bb516
[FINDING-169] Freeze functional cache CI failure
ALENOC Oct 13, 2026
e6d0338
[FINDING-169] Reconnect cache peers before mining
ALENOC Oct 13, 2026
4078257
[FINDING-169] Record cache peer regression evidence
ALENOC Oct 13, 2026
26726e6
[FINDING-067] Refresh release translation source
ALENOC Oct 13, 2026
21005a7
[FINDING-067] Record translation source verification
ALENOC Oct 13, 2026
d45aa5b
[FINDING-170] Resolve cache test binary from source tree
ALENOC Oct 13, 2026
06f9d90
[FINDING-170] Record standalone cache gate failure
ALENOC Oct 13, 2026
f21e964
[FINDING-067] Record complete testnet history scan
ALENOC Oct 13, 2026
6faabc2
[FINDING-171] Freeze repeat ARM64 source failure
ALENOC Oct 13, 2026
38b84a9
[FINDING-171] Add verified FreeType source fallback
ALENOC Oct 13, 2026
25cf51a
[FINDING-067] Set release version 4.8.1
ALENOC Oct 13, 2026
fd1c277
[FINDING-171] Record verified source fallback regression
ALENOC Oct 13, 2026
cee06da
[FINDING-169] Record successful cache security gates
ALENOC Oct 13, 2026
bfa2efb
[FINDING-170] Record standalone cache CI pass
ALENOC Oct 13, 2026
0d2552f
[FINDING-172] Freeze optional transaction tool link failure
ALENOC Oct 13, 2026
a468e2a
[FINDING-067] Refresh 4.8.1 release manpages
ALENOC Oct 13, 2026
17e2d5c
[FINDING-067][FINDING-172] Record manual and optional tool status
ALENOC Oct 13, 2026
19ade99
[FINDING-067] Document 4.8.1 asset and build limitations
ALENOC Oct 13, 2026
09277a9
[FINDING-172] Link optional transaction tool with core archive
ALENOC Oct 13, 2026
af0cc47
[FINDING-172] Exercise optional transaction tool in security gates
ALENOC Oct 13, 2026
55be9a0
[FINDING-172] Record optional tool repair and regression
ALENOC Oct 13, 2026
7d9844c
[FINDING-160] Record 4.8.1 block boundary checks
ALENOC Oct 13, 2026
f837f1f
[FINDING-067] Clarify voluntary PQ migration limit
ALENOC Oct 13, 2026
7c1a721
[FINDING-067] Record clean testnet chainstate replay
ALENOC Oct 13, 2026
cfc439c
[FINDING-169][FINDING-170] Record paired cache CI success
ALENOC Oct 13, 2026
1a496a0
[FINDING-167][FINDING-171] Record paired FreeType CI success
ALENOC Oct 13, 2026
a16a05b
[FINDING-067] Record versioned paired CI and artifacts
ALENOC Oct 13, 2026
867e3f6
[FINDING-067] Record 4.8.1 CI and testnet qualification
ALENOC Oct 14, 2026
fe3e5e5
[FINDING-067] Reconcile release blockers and testnet limits
ALENOC Oct 14, 2026
edcd4dd
[FINDING-104] Extend transfer activation boundary test
ALENOC Oct 14, 2026
241d151
[FINDING-105] Test mined asset activation boundary
ALENOC Oct 14, 2026
209cd93
[FINDING-106] Test candidate deployment boundaries
ALENOC Oct 14, 2026
3e2d65d
[FINDING-107] Test side-branch activation boundary
ALENOC Oct 14, 2026
975ab4f
[FINDING-067] Record testnet and boundary qualification evidence
ALENOC Oct 14, 2026
87965b3
[FINDING-104] Test mined transfer after activation
ALENOC Oct 14, 2026
9ded737
[FINDING-105] Test mined asset boundary on side branches
ALENOC Oct 14, 2026
fde4d21
[FINDING-106] Require mined activation boundary regression
ALENOC Oct 14, 2026
8bbd40f
[FINDING-173] Freeze XCB artifact source failure
ALENOC Oct 14, 2026
fecdcda
[FINDING-173] Add pinned XCB source fallback
ALENOC Oct 14, 2026
12d4bf2
[FINDING-174] Freeze ccache first-use CI failure
ALENOC Oct 15, 2026
8efa331
[FINDING-174] Initialize ccache before parallel builds
ALENOC Oct 15, 2026
0391e1e
[FINDING-173] Record XCB fallback qualification
ALENOC Oct 15, 2026
ba37d51
[FINDING-174] Record serial cache regression
ALENOC Oct 15, 2026
2480b0c
[FINDING-104] Record mined transfer boundary evidence
ALENOC Oct 15, 2026
f6afca5
[FINDING-105] Record mined asset side-branch evidence
ALENOC Oct 15, 2026
d6bc19b
[FINDING-106] Record enforced and coinbase boundary evidence
ALENOC Oct 15, 2026
58c897c
[FINDING-107] Record cross-deployment side-branch tests
ALENOC Oct 15, 2026
ee30148
[FINDING-067] Record latest testnet and CI gate evidence
ALENOC Oct 15, 2026
76983ad
[FINDING-106] Expand enforced and coinbase boundary matrix
ALENOC Oct 15, 2026
65461d0
[FINDING-107] Expand restricted asset boundary matrix
ALENOC Oct 15, 2026
2fd13fc
[FINDING-105] Connect competing active asset issue branch
ALENOC Oct 15, 2026
cb9bbbb
[FINDING-107] Connect restricted asset branches across activation
ALENOC Oct 15, 2026
3c08913
[FINDING-067] Record testnet and activation branch evidence
ALENOC Oct 15, 2026
0c33cc9
[FINDING-067] Update draft qualification notes
ALENOC Oct 15, 2026
2556cb4
[FINDING-175] Freeze xproto source timeout failure
ALENOC Oct 15, 2026
8552b2c
[FINDING-175] Add verified xproto HTTPS fallback
ALENOC Oct 15, 2026
1961a46
[FINDING-175] Record verified xproto fallback
ALENOC Oct 15, 2026
6e0a221
[FINDING-112] Correct recovery locations and repeat evidence
ALENOC Oct 15, 2026
ff4cb3b
[FINDING-176] Freeze libXau source fallback failure
ALENOC Oct 15, 2026
f154953
[FINDING-176] Add verified libXau HTTPS fallback
ALENOC Oct 15, 2026
0fca1ce
[FINDING-176] Record verified libXau fallback
ALENOC Oct 15, 2026
df41e89
[FINDING-104][FINDING-105][FINDING-106][FINDING-107] Close activation…
ALENOC Oct 15, 2026
e0b9285
[FINDING-067] Record exact remaining release gates
ALENOC Oct 15, 2026
3e9bb50
[FINDING-174] Close ccache race with paired CI evidence
ALENOC Oct 15, 2026
fec5ca2
[FINDING-067] Update draft release qualification notes
ALENOC Oct 15, 2026
86af1ab
[FINDING-112] Record accepted historical disposition
ALENOC Oct 15, 2026
eb09997
[FINDING-067] Update testnet and remaining gates
ALENOC Oct 15, 2026
35fa04a
[FINDING-067][FINDING-112] Update release risk notes
ALENOC Oct 15, 2026
4eb3445
[FINDING-177] Freeze wallet-disabled Qt crash
ALENOC Oct 15, 2026
4f6e630
[FINDING-177] Gate Linux Qt wallet-disabled startup
ALENOC Oct 15, 2026
9861294
[FINDING-177] Guard absent Qt currency control
ALENOC Oct 15, 2026
9061e11
[FINDING-177] Record GUI qualification evidence
ALENOC Oct 15, 2026
cc512da
[FINDING-178] Freeze node-only toolbar option crash
ALENOC Oct 15, 2026
068a87b
[FINDING-178] Gate node-only Qt Options interaction
ALENOC Oct 15, 2026
0441b38
[FINDING-178] Guard absent node-only toolbar controls
ALENOC Oct 15, 2026
54bbf8a
[FINDING-175][FINDING-176] Record green artifact pair
ALENOC Oct 15, 2026
22b6554
[FINDING-067][FINDING-178] Record Qt Options release gate
ALENOC Oct 15, 2026
32eb101
[FINDING-179] Freeze bit12 rollout instructions gap
ALENOC Oct 15, 2026
7adab19
[FINDING-180] Freeze pretag qualification conflict
ALENOC Oct 15, 2026
fe274e2
[FINDING-179][FINDING-180] Document bit-12 rollout and pre-tag qualif…
ALENOC Oct 15, 2026
a689054
[FINDING-179][FINDING-180] Record rollout guidance regression
ALENOC Oct 15, 2026
36d8b89
[FINDING-181] Freeze wallet rewrite CI failure
ALENOC Oct 16, 2026
9688f7e
[FINDING-181] Accept shutdown transport loss in wallet rewrite test
ALENOC Oct 16, 2026
e67b23c
[FINDING-067][FINDING-181] Record wallet rewrite regression
ALENOC Oct 16, 2026
74e834f
[FINDING-182][FINDING-183] Freeze release build failures
ALENOC Oct 16, 2026
1de647a
[FINDING-182] Install Qt X11 runtime for Linux smoke tests
ALENOC Oct 16, 2026
21962b1
[FINDING-183] Add dbus archive fallback mirror
ALENOC Oct 16, 2026
77d8f4c
[FINDING-182][FINDING-183] Record build fixes and evidence
ALENOC Oct 16, 2026
1e58379
[FINDING-067] Record exact-source CI and artifact qualification
ALENOC Oct 16, 2026
d4117d3
[FINDING-049] Reconcile negative mock database open fix
ALENOC Oct 17, 2026
9bb987d
[FINDING-136] Close wallet asset ownership classification
ALENOC Oct 17, 2026
a724583
[FINDING-022] Close aarch64 cross-build with CI artifact proof
ALENOC Oct 17, 2026
502a6ea
[FINDING-045] Validate plaintext BIP39 lineage before wallet load
ALENOC Oct 17, 2026
a3ce50b
[FINDING-045] Record BIP39 lineage regression and verification
ALENOC Oct 17, 2026
7e36bb8
[FINDING-023] Record five-target artifact qualification checkpoint
ALENOC Oct 17, 2026
1e33543
[FINDING-062] Test bit 12 resource limits across activation and reorg
ALENOC Oct 18, 2026
d07b00b
[FINDING-062] Record activation boundary mutation proof
ALENOC Oct 18, 2026
64fb051
[FINDING-036] Give BIP39 seeds stable unique IDs with atomic migration
ALENOC Oct 18, 2026
3d9294b
[FINDING-036] Record BIP39 seed ID migration proof
ALENOC Oct 18, 2026
1220047
[FINDING-155] Expose protected asset change in transfer dialog
ALENOC Oct 18, 2026
82da3be
[FINDING-155] Record GUI migration field qualification
ALENOC Oct 18, 2026
84a5e35
[FINDING-063] Pin deterministic ML-DSA signature vector
ALENOC Oct 18, 2026
b3803bb
[FINDING-100] Persist reward wallet and payout intent across restart
ALENOC Oct 18, 2026
3960209
[FINDING-063][FINDING-100] Record local verification and residual gates
ALENOC Oct 18, 2026
b8dffce
[FINDING-070] Recover bounded deterministic PQ keys and wallet history
ALENOC Oct 18, 2026
09faa9b
[FINDING-070] Record recovery proof and operator procedure
ALENOC Oct 18, 2026
405b4d5
[FINDING-100] Execute mandatory reward restart regression
ALENOC Oct 18, 2026
e4f88d1
[FINDING-100] Record required test launch regression
ALENOC Oct 18, 2026
0e1399a
[FINDING-020][FINDING-070][FINDING-100] Harden required gate executio…
ALENOC Oct 18, 2026
4869df7
[FINDING-020] Record gate negative controls and remaining scope
ALENOC Oct 18, 2026
4f026d0
[FINDING-101] Isolate restricted views by wallet and restore index state
ALENOC Oct 18, 2026
54cd1be
[FINDING-101] Record wallet isolation and remaining GUI proof
ALENOC Oct 18, 2026
6cab670
[FINDING-062] Exercise bit 12 reorg and PQ sigop boundary
ALENOC Oct 18, 2026
a8fa47e
[FINDING-184] Freeze exact-multiple reward batch defect
ALENOC Oct 18, 2026
c90814b
[FINDING-184] Avoid empty reward payout batches
ALENOC Oct 18, 2026
c70679b
[FINDING-185] Add pinned fontconfig source fallback
ALENOC Oct 18, 2026
24d8cae
[FINDING-062][FINDING-184][FINDING-185] Record local verification
ALENOC Oct 18, 2026
1f06ce5
[FINDING-186] Freeze legacy message export gap
ALENOC Oct 18, 2026
212610f
[FINDING-102][FINDING-186] Scope message state by wallet and export l…
ALENOC Oct 19, 2026
e3831fa
[FINDING-102][FINDING-186] Record wallet messaging verification
ALENOC Oct 19, 2026
af5783d
[FINDING-061][FINDING-062][FINDING-063] Count active PQ sigops at two…
ALENOC Oct 19, 2026
8e87426
[FINDING-061][FINDING-062][FINDING-063] Record PQ sigop cost verifica…
ALENOC Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 42 additions & 4 deletions .github/workflows/build-raven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,22 @@ jobs:
run: |
./autogen.sh
mkdir -p "$HOME/.ccache"
"$PWD/depends/x86_64-pc-linux-gnu/native/bin/ccache" --print-config > /dev/null
CONFIG_SITE="$PWD/depends/x86_64-pc-linux-gnu/share/config.site" \
./configure --without-gui --disable-bench
./configure --without-gui --with-tx --disable-bench

- name: Build and run unit tests
run: |
make -j2
make check
if ! make check; then
for log in src/test-suite.log src/test/test_raven.log; do
if [ -f "$log" ]; then
echo "Failure details from $log:"
tail -n 160 "$log"
fi
done
exit 1
fi

- name: Exercise the real PQ verifier fuzz target
run: |
Expand All @@ -81,8 +90,8 @@ jobs:
run: |
python3 contrib/devtools/test-required-functional-gate.py
python3 test/functional/test_runner.py --require-tests --jobs=2 \
wallet_encryption_rewrite.py wallet_asset_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py \
feature_asset_activation_reorg.py feature_transfer_script_reorg.py feature_rip5_activation_reorg.py \
wallet_encryption_rewrite.py wallet_asset_multiwallet.py feature_rewards_restart.py wallet_pq_recovery.py wallet_restricted_multiwallet.py wallet_messaging_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py \
feature_asset_activation_reorg.py feature_pq_activation_reorg_sigops.py feature_transfer_script_reorg.py feature_rip5_activation_reorg.py feature_enforced_coinbase_activation.py \
feature_asset_dbcrash.py feature_asset_dbcrash_transfer.py feature_asset_db_missing_block.py \
feature_asset_verifydb_sameblock.py feature_transfer_mempool_reorg.py feature_mempool_clear_reissue.py feature_mempool_reissue_restart.py feature_transfer_sidebranch.py feature_pq_asset_anchor.py feature_pq_asset_authority_selection.py feature_pq_asset_source_rpc.py feature_pq_asset_wallet_ownership.py feature_loadblock.py \
feature_restricted_dbcrash.py feature_restricted_verifydb.py feature_restricted_verifydb_root.py \
Expand Down Expand Up @@ -227,6 +236,7 @@ jobs:
run: |
./autogen.sh
mkdir -p "$HOME/.ccache"
"$PWD/depends/${{ matrix.host }}/native/bin/ccache" --print-config > /dev/null

- name: Configure Build
run: bash -Eeuo pipefail "${SCRIPTS}/04-configure-build.sh" "${{ matrix.OS }}" "$GITHUB_WORKSPACE"
Expand All @@ -240,6 +250,34 @@ jobs:
- name: Build Raven
run: make -j2

- name: Install Qt runtime test prerequisites
if: matrix.OS == 'linux'
run: sudo apt-get install -y xvfb xauth x11-utils libxtst6 libxkbcommon-x11-0

- name: Verify Qt smoke runtime libraries
if: matrix.OS == 'linux'
shell: bash
run: |
for binary in src/qt/raven-qt src/raven-cli; do
test -x "$binary"
libraries="$(ldd "$binary")"
if grep -Fq 'not found' <<< "$libraries"; then
printf 'Missing runtime libraries for %s:\n%s\n' "$binary" "$libraries"
exit 1
fi
done

- name: Test Qt startup without wallet
if: matrix.OS == 'linux'
run: ./contrib/devtools/test-qt-no-wallet-startup.sh

- name: Test Qt Options without wallet
if: matrix.OS == 'linux'
run: |
xvfb-run -a -s '-screen 0 1024x768x24' \
python3 contrib/devtools/test-qt-no-wallet-options.py \
src/qt/raven-qt src/raven-cli

# Skip the binary checks for now.
# name: Check Binary Security
# run: ${SCRIPTS}/05-binary-checks.sh ${{ MATRIX.OS }} ${{ GITHUB.WORKSPACE }}
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/rip25-v48-final-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ jobs:
run: |
./autogen.sh
mkdir -p "$HOME/.ccache"
"$PWD/depends/x86_64-pc-linux-gnu/native/bin/ccache" --print-config > /dev/null
CONFIG_SITE="$PWD/depends/x86_64-pc-linux-gnu/share/config.site" \
./configure --without-gui --disable-bench
./configure --without-gui --with-tx --disable-bench

- id: build_tests
name: Build tests
Expand Down Expand Up @@ -103,8 +104,8 @@ jobs:
run: |
python3 contrib/devtools/test-required-functional-gate.py
python3 test/functional/test_runner.py --require-tests --jobs=2 \
wallet_encryption_rewrite.py wallet_asset_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py \
feature_asset_activation_reorg.py feature_transfer_script_reorg.py feature_rip5_activation_reorg.py \
wallet_encryption_rewrite.py wallet_asset_multiwallet.py feature_rewards_restart.py wallet_pq_recovery.py wallet_restricted_multiwallet.py wallet_messaging_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py \
feature_asset_activation_reorg.py feature_pq_activation_reorg_sigops.py feature_transfer_script_reorg.py feature_rip5_activation_reorg.py feature_enforced_coinbase_activation.py \
feature_asset_dbcrash.py feature_asset_dbcrash_transfer.py feature_asset_db_missing_block.py \
feature_asset_verifydb_sameblock.py feature_transfer_mempool_reorg.py feature_mempool_clear_reissue.py feature_mempool_reissue_restart.py feature_transfer_sidebranch.py feature_pq_asset_anchor.py feature_pq_asset_authority_selection.py feature_pq_asset_source_rpc.py feature_pq_asset_wallet_ownership.py feature_loadblock.py \
feature_restricted_dbcrash.py feature_restricted_verifydb.py feature_restricted_verifydb_root.py \
Expand Down Expand Up @@ -218,6 +219,7 @@ jobs:
run: |
./autogen.sh
mkdir -p "$HOME/.ccache"
"$PWD/depends/${{ matrix.host }}/native/bin/ccache" --print-config > /dev/null
CONFIG_SITE="$PWD/depends/${{ matrix.host }}/share/config.site" \
./configure ${{ matrix.configure_flags }}

Expand Down
26 changes: 11 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,33 @@ https://ravencoin.org

## RIP-25: Post-Quantum Signatures (This Fork)

This fork implements [RIP-25](doc/RIP-0025-PQ-Signatures.md) ([GitHub Issue #1280](https://github.com/RavenProject/Ravencoin/issues/1280)), a proposal to add **quantum-resistant native RVN transaction signing** to Ravencoin using ML-DSA-44 (FIPS 204).
This fork implements [RIP-25](doc/RIP-0025-PQ-Signatures.md) ([GitHub Issue #1280](https://github.com/RavenProject/Ravencoin/issues/1280)), which adds **quantum-resistant native RVN transaction signing** using ML-DSA-44 (FIPS 204). The 4.8.1 candidate adds a separate bit-13 rule for new asset and owner-token outputs.

### What it does

New **witness v2** addresses use ML-DSA-44 (a NIST-standardized post-quantum signature algorithm) exclusively. Existing ECDSA addresses (witness v0) continue working unchanged. Users can migrate native RVN from ECDSA to ML-DSA-44 addresses before quantum computers can break ECDSA. Ravencoin assets remain on their legacy ownership conditions and are outside the current RIP-25 scope.
New **witness v2** addresses use ML-DSA-44 (a NIST-standardized post-quantum signature algorithm) exclusively. Existing ECDSA addresses continue working unchanged. Users can migrate native RVN to ML-DSA-44 addresses voluntarily. The original bit-12 rule does not change legacy asset ownership. Once bit 13 activates, newly created asset and owner-token outputs require a matching native RVN witness-v2 ML-DSA anchor when spent, with no ECDSA asset signature. Historical outputs retain their classical spending rule until their owners migrate them.

- **Old addresses (witness v0):** ECDSA/secp256k1, unchanged
- **New addresses (witness v2):** ML-DSA-44 only, quantum-resistant
- **Classical addresses:** ECDSA/secp256k1, unchanged
- **PQ addresses (witness v2):** ML-DSA-44 only, quantum-resistant
- **Migration:** Users send native RVN from old to new addresses at their own pace
- **Assets:** Normal, owner, reissuable, unique, restricted, and qualifier assets are not protected by RIP-25
- **Assets:** New post-bit-13 asset and owner-token outputs require an ML-DSA anchor; historical holdings remain classical until voluntary migration

### Key changes

| Area | Change |
|------|--------|
| **Consensus** | BIP9 soft-fork deployment (bit 12, 85% threshold), phased block weight increase (8 → 12 → 16 MWU) |
| **Consensus** | Bit-12 BIP9 signaling (1714 of 2016); incompatible 8 to 12 to 16 MWU block-limit transition and contextual PQ witness discount |
| **Script** | Witness version 2 validation: 2-element witness stack [mldsa_sig, mldsa_pk], SHA256(pk) == program |
| **Policy** | `TX_WITNESS_V2_PQ_KEYHASH` standard type, PQ witness discount (8x), PQ-aware dust threshold |
| **Policy** | `TX_WITNESS_V2_PQ_KEYHASH` standard type and PQ-aware dust threshold |
| **Addresses** | Bech32m encoding for witness v2 (HRP: `rvn` mainnet, `trvn` testnet, `rcrt` regtest) |
| **Network** | `NODE_PQ_HYBRID` service flag (bit 5), 16 MB protocol message limit |
| **Crypto** | `src/crypto/mldsa.h/cpp` — ML-DSA-44 via [liboqs](https://github.com/open-quantum-safe/liboqs) (FIPS 204 compliant) |
| **Keys** | `src/pqkey.h/cpp` — `CPQKey` / `CPQPubKey` for ML-DSA-44 key management |
| **Crypto** | `src/crypto/mldsa.h/cpp`: ML-DSA-44 via [liboqs](https://github.com/open-quantum-safe/liboqs) (FIPS 204 compliant) |
| **Keys** | `src/pqkey.h/cpp`: `CPQKey` / `CPQPubKey` for ML-DSA-44 key management |
| **Wallet** | `getnewpqaddress` RPC, PQ keystore integration, `IsMine` for witness v2 |
| **Assets** | Existing asset scripts remain legacy P2PKH-only; witness-v2 PQ destinations protect native RVN only |
| **Assets** | Bit 13 adds PQ-only asset carriers paired with native RVN witness-v2 inputs; historical asset outputs remain classically spendable |
| **Signing** | ML-DSA-44 signing in `sign.cpp` via `TransactionSignatureCreator` |
| **Build** | liboqs added as dependency (`depends/packages/liboqs.mk`, `configure.ac --with-liboqs`) |
| **Tests** | `src/test/pqkey_tests.cpp` — unit tests for ML-DSA-44 keygen, sign/verify, witness programs |

### Branch

Audit and remediation work is on [`fix/rip25-v48-glm-remediation`](https://github.com/ALENOC/Ravencoin/tree/fix/rip25-v48-glm-remediation).
| **Tests** | `src/test/pqkey_tests.cpp`: unit tests for ML-DSA-44 keygen, sign/verify, witness programs |

### Building with liboqs

Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 4)
define(_CLIENT_VERSION_MINOR, 8)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_REVISION, 1)
define(_CLIENT_VERSION_BUILD, 0)
define(_CLIENT_VERSION_RC, 0)
define(_CLIENT_VERSION_IS_RELEASE, true)
Expand Down
34 changes: 31 additions & 3 deletions contrib/devtools/check-rip25-v48-invariants.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,21 @@ require_fixed 'feature_pq_asset_source_rpc.py' .github/workflows/build-raven.yml
require_fixed 'feature_pq_asset_wallet_ownership.py' test/functional/test_runner.py 'PQ asset wallet ownership regression is not registered'
require_fixed 'feature_mempool_clear_reissue.py' test/functional/test_runner.py 'mempool clear reissue regression is not registered'
require_fixed 'feature_mempool_reissue_restart.py' test/functional/test_runner.py 'mempool reissue restart regression is not registered'
require_fixed "'feature_rewards_restart.py'" test/functional/test_runner.py 'reward restart regression is not registered'
require_fixed 'feature_rewards_restart.py' .github/workflows/rip25-v48-final-gate.yml 'final gate omits reward restart regression'
require_fixed 'feature_rewards_restart.py' .github/workflows/build-raven.yml 'release workflow omits reward restart regression'
require_fixed "'wallet_pq_recovery.py'" test/functional/test_runner.py 'PQ wallet recovery regression is not registered'
require_fixed 'wallet_pq_recovery.py' .github/workflows/rip25-v48-final-gate.yml 'final gate omits PQ wallet recovery regression'
require_fixed 'wallet_pq_recovery.py' .github/workflows/build-raven.yml 'release workflow omits PQ wallet recovery regression'
require_fixed "'wallet_restricted_multiwallet.py'" test/functional/test_runner.py 'restricted multiwallet regression is not registered'
require_fixed 'wallet_restricted_multiwallet.py' .github/workflows/rip25-v48-final-gate.yml 'final gate omits restricted multiwallet regression'
require_fixed 'wallet_restricted_multiwallet.py' .github/workflows/build-raven.yml 'release workflow omits restricted multiwallet regression'
require_fixed "'wallet_messaging_multiwallet.py'" test/functional/test_runner.py 'messaging multiwallet regression is not registered'
require_fixed 'wallet_messaging_multiwallet.py' .github/workflows/rip25-v48-final-gate.yml 'final gate omits messaging multiwallet regression'
require_fixed 'wallet_messaging_multiwallet.py' .github/workflows/build-raven.yml 'release workflow omits messaging multiwallet regression'
require_fixed "'feature_pq_activation_reorg_sigops.py'" test/functional/test_runner.py 'PQ activation reorg and sigop regression is not registered'
require_fixed 'feature_pq_activation_reorg_sigops.py' .github/workflows/rip25-v48-final-gate.yml 'final gate omits PQ activation reorg and sigop regression'
require_fixed 'feature_pq_activation_reorg_sigops.py' .github/workflows/build-raven.yml 'release workflow omits PQ activation reorg and sigop regression'

# GLM-003: contextual 8 -> 12 -> 16 MWU and UTXO-bound 8x discount.
require_fixed 'VersionBitsStateSinceHeight' src/validation.cpp 'deterministic RIP-25 phase boundary missing'
Expand Down Expand Up @@ -619,12 +634,17 @@ require_fixed 'python3 contrib/devtools/test-required-functional-gate.py' "$fina
require_fixed 'python3 test/functional/test_runner.py --require-tests' "$final_gate" 'functional gate permits absent or skipped security tests'
require_fixed 'feature_mempool_clear_reissue.py' "$final_gate" 'final gate omits inherited mempool clear regression'
require_fixed 'feature_mempool_reissue_restart.py' "$final_gate" 'final gate omits inherited reissue restart regression'
require_fixed 'wallet_encryption_rewrite.py wallet_asset_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py' "$final_gate" 'required wallet, multiwallet asset, asset-scope, and chainstate-ahead functional tests are missing'
require_fixed 'wallet_encryption_rewrite.py wallet_asset_multiwallet.py feature_rewards_restart.py wallet_pq_recovery.py wallet_restricted_multiwallet.py wallet_messaging_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py' "$final_gate" 'required wallet, rewards, PQ recovery, restricted multiwallet, messaging multiwallet, asset-scope, and chainstate-ahead functional tests are missing'
require_fixed 'wallet_asset_multiwallet.py' .github/workflows/build-raven.yml 'release security job omits the multiwallet asset regression'
require_fixed "'wallet_asset_multiwallet.py'" test/functional/test_runner.py 'multiwallet asset regression is not in the functional suite'
require_fixed 'id: posttest_integrity' "$final_gate" 'final gate does not recheck source after security tests'
final_security_job="$(sed -n '/^ security-tests:/,/^ build:/p' "$final_gate")"
require_text "$final_security_job" 'test/test_raven_fuzzy --pq-smoke' 'final security job does not run the PQ verifier fuzz smoke test'
mapfile -t final_security_sha_lines < <(grep -nFx ' test "$(git rev-parse HEAD)" = "$GITHUB_SHA"' <<<"$final_security_job" | cut -d: -f1)
(( ${#final_security_sha_lines[@]} == 2 )) || fail 'final security job must execute exact-SHA checks before and after tests'
final_make_check_line="$(grep -nFx ' run: make check' <<<"$final_security_job" | cut -d: -f1 || true)"
[[ "$final_make_check_line" =~ ^[0-9]+$ ]] || fail 'final security job does not execute make check'
(( final_security_sha_lines[0] < final_make_check_line && final_make_check_line < final_security_sha_lines[1] )) || fail 'final security job does not bracket make check with exact-SHA checks'
require_fixed 'id: postbuild_integrity' "$final_gate" 'final gate does not recheck source after cross-builds'
final_build_matrix="$(sed -n '/^ matrix:/,/^ steps:/p' "$final_gate")"
require_text "$final_build_matrix" $' - name: aarch64-disable-wallet\n host: aarch64-linux-gnu\n packages: g++-aarch64-linux-gnu\n configure_flags: --without-gui --disable-wallet --disable-bench\n run_tests: false' 'final gate lacks the aarch64 no-wallet cross-build'
Expand Down Expand Up @@ -667,7 +687,12 @@ require_text "$release_security_job" 'feature_mempool_clear_reissue.py' 'release
require_text "$release_security_job" 'feature_mempool_reissue_restart.py' 'release artifact workflow omits inherited reissue restart regression'
require_text "$release_security_job" 'feature_chainstate_ahead.py' 'release artifact workflow does not test chainstate-ahead recovery'
require_text "$release_security_job" 'test "$(git rev-parse HEAD)" = "$GITHUB_SHA"' 'release security job does not bind tests to the artifact SHA'
require_text "$release_build_job" ' needs: security-tests' 'release artifact matrix can package without passing security tests'
grep -Fxq ' needs: security-tests' <<<"$release_build_job" || fail 'release artifact matrix can package without passing security tests'
mapfile -t release_security_sha_lines < <(grep -nFx ' test "$(git rev-parse HEAD)" = "$GITHUB_SHA"' <<<"$release_security_job" | cut -d: -f1)
(( ${#release_security_sha_lines[@]} == 2 )) || fail 'release security job must execute exact-SHA checks before and after tests'
release_make_check_line="$(grep -nFx ' if ! make check; then' <<<"$release_security_job" | cut -d: -f1 || true)"
[[ "$release_make_check_line" =~ ^[0-9]+$ ]] || fail 'release security job does not execute make check'
(( release_security_sha_lines[0] < release_make_check_line && release_make_check_line < release_security_sha_lines[1] )) || fail 'release security job does not bracket make check with exact-SHA checks'
release_matrix="$(sed -n '/^ matrix:/,/^ steps:/p' "$release_workflow")"
release_axes="$(grep -E '^ [A-Za-z_][A-Za-z_0-9]*:' <<<"$release_matrix" || true)"
[[ "$release_axes" == ' include:' ]] || fail 'release workflow has unexpected matrix axes'
Expand Down Expand Up @@ -723,6 +748,8 @@ if [[ "$mode" == '--structural-only' ]]; then
exit 0
fi

python3 contrib/devtools/test-rip25-invariant-gate-negative-controls.py

test_binary=src/test/test_raven
[[ -x "$test_binary" ]] || fail "behavioral test binary is missing or not executable: $test_binary"
# Qt and benchmark translation units are not linked into the headless
Expand Down Expand Up @@ -804,7 +831,8 @@ echo "$fuzz_smoke_output"
"$fuzz_binary" --pq-seed-tx | "$fuzz_binary"

python3 contrib/devtools/test-required-functional-gate.py
PYTHONPATH=test/functional python3 -m unittest test_framework.test_cache_peers
python3 test/functional/test_runner.py --require-tests --jobs=2 \
wallet_encryption_rewrite.py rpc_assettransfer.py feature_chainstate_ahead.py feature_pq_asset_anchor.py feature_pq_asset_authority_selection.py feature_pq_asset_source_rpc.py feature_pq_asset_wallet_ownership.py feature_mempool_clear_reissue.py feature_mempool_reissue_restart.py
wallet_encryption_rewrite.py feature_rewards_restart.py wallet_pq_recovery.py wallet_restricted_multiwallet.py wallet_messaging_multiwallet.py rpc_assettransfer.py feature_chainstate_ahead.py feature_pq_activation_reorg_sigops.py feature_pq_asset_anchor.py feature_pq_asset_authority_selection.py feature_pq_asset_source_rpc.py feature_pq_asset_wallet_ownership.py feature_mempool_clear_reissue.py feature_mempool_reissue_restart.py

echo 'RIP-25/v4.8 structural + behavioral invariants: OK'
Loading
Loading