← 输入框|github.com|刷新
Skip to content

Version 5.9 - #268

Open
HermanSchoenfeld wants to merge 75 commits into
PascalCoinDev:masterfrom
HermanSchoenfeld:master
Open

HermanSchoenfeld wants to merge 75 commits into
PascalCoinDev:masterfrom
HermanSchoenfeld:master

Conversation

@HermanSchoenfeld

Copy link
Copy Markdown
Contributor

Lots of changes, thought you might like to review

HermanSchoenfeld and others added 30 commits November 2, 2026 11:47
- Import [Sphere 10 Pascal Framework](https://github.com/HermanSchoenfeld/PascalFramework) for caching, concurrency and scoped resources.
- Add per-key and bulk-fetch caching with expiration, invalidation, eviction and synchronized access.
- Add read/write locking with recursive writes, upgradeable reads, timeouts and automatic lock scopes.
- Add cleanup scopes, collection helpers, typed data sources and UTF-8 file text; standardize String APIs and document public types.
- Add Single/Auto/Manual paging with a compact mode button, accurate row counts and scroll resets.
- Reuse complete results when resizing and report completion once per fetched page.
- Add rounded-spoke loading cards, retain rows during updates and fix completion, cancellation, errors, parenting and empty selections.
- Keep wizard windows stationary, retain inputs and allow validation and completion retries.
- Keep generic refresh throttling independent and expose TThrottledEventMode at unit scope.
- Fetch account-key index ranges in one traversal and correct unsigned account-number and price comparisons.
- Handle empty binary values safely during serialization and cryptographic conversion.
- Publish structured progress and synchronization events; reproduce existing display and log messages in their consumers.
- Keep synchronization active through batch gaps and received-block processing; network-off stops new downloads while received work finishes.
- Allow concurrent mempool reads with a self-contained core read/write lock.
- Defer pending reconciliation during catch-up; retain valid indexes and bulk-build rejected-operation results.
- Add pending restore progress and cancellation, bulk marker cleanup and byte-identical buffered saving.
- Flush pending changes on shutdown and replace files atomically, preserving the previous package on I/O failure.
- Reconnect peers and recover safebox downloads after disconnection; log completed chunks at Info.
- Join network/download workers, drain termination callbacks during confirmed shutdown and preserve miner-job snapshots during replies.
- Restore classic wallet key filtering during synchronization and apply pending balances after reconciliation.
- Add cancellable account/history workers and join active filters before classic wallet shutdown.
- Complete send, purchase, sale, key-change and payload wizards with validated operations and explicit wallet unlock ownership.
- Add batch-change approval for skipped accounts, charge only changed accounts and offer custom fees with an optional single payer.
- Restore advanced operations and the RAW/multioperation workbench; merge missing signatures without bypassing validation.
- Use bounded, scrollable operation confirmation and result dialogs.
- Reuse mining keys during startup and selection; rotate only after a mined block when configured.
- Validate private/watch-only key import and backup restoration.
- Load startup data and resolve account keys on cancellable workers; publish selected totals and history bindings after completed queries.
- Refresh main-wallet selections immediately outside node synchronization; suspend grid queries throughout synchronization.
- Add account-index paging, cached history queries, cancellable wallet totals and a bounded account cache that survives safebox replacement.
- Limit Recent Operations to 2,016/8,640 blocks for 7/30 days; search all available history for Maximum and cancel obsolete selections.
- Use bounded visible-row snapshots and cancellable workers for Explorer filters, history, totals and type statistics; fix My Accounts/key filters.
- Restore account/block explorers, RPC tools, message history and language settings; add Block Explorer refresh/reset and click-only operation details.
- Share cached committed counts/timestamps between footer and synchronization view without data/status polling; marshal key notifications to the UI.
- Show dashes until totals first load; show Wallet Keys padlocks in every state.
- Align footer buttons, retain full icon height and correct unsigned key hashes and PASC balances.
- Anchor header/footer controls, preserve modeless focus and fix banner transparency and splash/synchronization flicker.
- Keep startup height fixed with horizontal resizing; restore normal constraints/maximization afterward and join startup/grid workers before shutdown.
- Build the experimental wallet with Delphi/VCL and Lazarus/FPC using paired form resources and conversion tools.
- Add Win32/Win64 Debug/Release targets with separate compiler outputs; keep the Delphi executable in src beside OpenSSL without build events.
- Embed application/tray icons and set application and wallet executable versions to 5.9.0.0.
- Update GNU gettext and regular-expression compatibility for Delphi.
- Document wallet features, Sphere 10 Pascal Framework and Delphi/Lazarus build and test commands.
- Add runners for unit and isolated native regression tests covering shared components, operations, classic wallet, synchronization, loading and shutdown.
- Update checkout, artifact and release actions to supported Node 24 versions.
- Use an Intel macOS runner supported by the Lazarus installer.
- Grant release publishing permissions and fail when build artifacts are missing.
- Preserve Windows, Linux and macOS builds and release archive names.
- Use typed empty thread IDs for pointer-based Darwin ownership and release.
- Apply the same portability fix to core and shared locks.
- Add a portable runner for 62 existing core/framework lock tests without GUI or OpenSSL dependencies.
- Build both wallet applications on Windows, Linux and Intel macOS with separate executable names.
- Include the experimental wallet in platform artifacts and release archives.
- Run all 62 core/framework lock tests with heap checks on every platform.
- Keep platform jobs independent and document side-by-side wallet downloads.
- Version daemon and miner executables at 5.9.0.0.
- Update the miner banner and macOS application bundle.
- Replace old release notes with 5.9 features and side-by-side wallet instructions.
- Report test starts, failures and cleanup phases before writing the final summary.
- Collect native Unix backtraces when the test process crashes.
- Preserve test and heap reports without changing failure results.
- Initialize heap tracing before POSIX thread support.
- Retain all 62 lock tests and heap checks.
- Capture bounded crash backtraces and preserve threading reports.
- Bundle language catalogs, the miner OpenCL kernel and existing license notices.
- Keep classic and experimental wallets together under separate executable names.
- Publish SHA-256 checksums for all three platform archives.
- Use LCL system-command messages on Linux and macOS.
- Retain the VCL guard that prevents maximizing during startup.
- Credit Herman Schoenfeld for the experimental GUI and Sphere 10 Pascal Framework.
- Include Albert Molina and Herman Schoenfeld in its About copyright.
- Preserve original PascalCoin attribution and classic wallet credits.
- Register the common utility fixtures and previously omitted box/comparison tests.
- Add one Windows driver for units and isolated native wallet regressions.
- Cover classic key filtering, reconnection, pending protocol, buffered blocks and mempool locking.
- Keep controller tests isolated and retain progress, heap and native reports.
- Build the experimental wallet in Release mode before testing and packaging.
- Describe accounts, history, keys, operations, networking, mining and tools.
- Store Delphi/FPC screenshots and link them from the README.
- Explain separate classic/experimental applications, builds, tests and downloads.
- Document the Sphere 10 Pascal Framework integration and release changes.
- Wait for a new admission in both grids before releasing held providers.
- Prevent an earlier callback with the same timestamp from satisfying the fence.
- Preserve the latest-request fetch-count assertions.
- Supply block metadata in synthetic progress records.
- Check the required progress text without obsolete punctuation.
- Stage the unchanged wallet beside its bundled runtime for clean CI startup.
- Record executable/runtime hashes and preserve the source tree.
- Exercise all thirteen distinct demo groups through the full test runner.
- Supply the known block fixture and clear focused-case selectors between runs.
- Include both pending proof-of-work vectors and preserve caller settings.
- Record child failures and continue later phases under either PowerShell error policy.
- Document complete native coverage and its separate dataset/Delphi inputs.
- Queue real operations notifications before catch-up suspends pending admission.
- Verify the expected admission rejection during received-block processing.
- Retain actual block notifications, writer-held responsiveness and miner-job checks.
- Explain optimized Release and unoptimized Default Lazarus modes.
- Add Delphi MSBuild and IDE AutoBuild commands for both wallets.
- Credit Herman Schoenfeld's experimental wallet and core contributions alongside Albert Molina's original implementation.
- Read the automatic native exit code without shadowing it in script scope.
- Preserve real failures while allowing later phases to run.
- Verify both successful and failing children through the same nested invocation used by CI.
- Use Single paging when a scenario requires all five account IDs.
- Verify the complete IDs and scroll each account into view before native clicks.
- Retain separate Auto-capacity and history-depth assertions.
- Account for native window frames when sizing LCL message dialogs.
- Keep confirmations, result details and buttons accessible on smaller desktops.
- Verify actual window bounds at 100 and 150 percent in Delphi and FPC.
- Document the viewport required by fixed-size Advanced Operation checks.
- Test bounded message dialogs on the default hosted desktop first.
- Set a temporary Full HD mode for the complete 150-percent UI checks.
- Restrict display changes to GitHub-hosted runners and record native geometry.
- Add focused demo-case selection and retain UI evidence for 14 days.
- Use Classic's configured indexed blockchain reader and legacy-file fallback in the experimental wallet.
- Defer automatic index flushing during replay and restore its policy on every exit.
- Check the actual startup reader and restored flushing policy through the native synchronization fixture.
- Compact navigation before wrapping large totals or manual page-size controls.
- Keep footer controls visible across Single, Auto and Manual modes at native display scaling.
- Wait for pending viewport layout in tests and drain queued native messages within the existing deadline.
- Restore the original RGB values along translucent logo edges in Delphi's stored image list.
- Preserve the artwork, alpha values, masks, dimensions and resource footprint.
- Explain the mask-conversion artifact and verify the banner in Delphi and FPC at 100%, 125% and 150% scaling.
- Move synchronization detail labels down eight pixels in matching Delphi and Lazarus resources.
- Ignore the repository-root .temp directory.
- Align node, miner and executable version metadata at 5.9.1.
- Embed Classic Release version information while preserving its icon and other resources.
- Document the requested locking, buffered streams, recovery, startup, logging and presentation changes.
- Update package download links, release notes and the unit/native test coverage guide.
@tzarebczan

Copy link
Copy Markdown

Holy crap, can't Believe this project is still alive. Might need to dig up my old wallet.

- Resolve the tracked runtime from windows-dll in a clean checkout.
- Remove the logging probes' dependency on an untracked DLL beside the wallet sources.
- Verify all eight native checks in both the Classic and Experimental logging runners.
- Resolve legacy blocks before the primary index range check, matching Classic history lookups.
- Preserve dropdown-controlled history depth and avoid duplicate rows for missing archive blocks.
- Add three layered-storage regressions to the shared Delphi/FPC checks and unit runner.
- Align node, miner and Delphi/Lazarus executable versions at 5.9.2.
- Preserve Classic application resources while updating its embedded version.
- Document the legacy history correction and update release notes and download links.
- The ULog batch publication replaced Lines.Add with a single text rebuild followed by SelStart; on VCL, EM_SETSEL moves the caret without scrolling, so the memo no longer followed the newest line.
- Send EM_SCROLLCARET after positioning the caret in UFRMLogs and UFRMWallet under a Delphi-only guard; LCL already scrolls when SelStart changes. UFRMLogs now uses Winapi.Messages.
- Not verified on a Delphi build; the Free Pascal wallets are unaffected.
- Copy UCache, UCommon.Collections, UCommon.Data, UConcurrency, UStreams and UVisualGrid from PascalFramework so the mirror is byte-identical again, carrying the constructed dispose-policy exception, the translated paging-mode captions with fixed component names and the formatting tidy.
- UCommon.Data drops the Skybuck ToArrayWorkAround in favour of the framework's typed local for filters.ToArray; nothing else called it.
- Copy the framework's UReadWriteScope.Checks and UScope.Tests into the experimental framework tests.
- Verified: experimental wallet suite 947 tests pass with no unfreed memory blocks, and the experimental Lazarus wallet links.
- TPCAbstractMem.IsChecking took a thread-list lease whose result the locked read immediately overwrote; remove the dead line.
- UFileStorage sizes its two header read-ahead wrappers with CT_SizeOfBlockHeader, the constant the surrounding seeks already use, instead of a SizeOf sum.
- TWalletStartupTask creates its progress lock with lrpNoRecursion; neither owner acquires it recursively.
- Verified: experimental wallet suite 947 tests pass.
- UBufferedAdoptionChecks keyed its RandomHash expectation on a private BUFFERED_ADOPTION_RANDOMHASH_ENABLED define that nothing sets, so the check always assumed the early return regardless of configuration.
- Include config.inc and key the expectation and the log line on ASSUME_VALID_POW_OLD_PROTOCOLS, the define that decides whether AllowUseHardcodedRandomHashTable opens the table.
- Verified: wallet suite 947 tests pass with the shipping configuration.
- Expand two one-line finally blocks in UNetProtocol to the multiline form.
- Move the TPCThreadList banner in UThread above TPCThreadList<T>.Add, where that class's implementation begins.
- Drop the unused x variable from both TDisposables.Finalize variants in the embedded UMemory.
- Verified: experimental wallet suite 947 tests pass with an unchanged compiler warning set.
- Align node, miner and Delphi/Lazarus executable versions at 5.9.3.
- Preserve Classic application resources while updating its embedded version.
- Document the review corrections and update release notes and download links.
The macOS job uploaded bare executables, which regular Mac users cannot
launch. A packaging script now builds PascalCoin Wallet.app and PascalCoin
Wallet Experimental.app from an Info.plist template, signs them ad hoc and
places them with an Applications link and a read-me in a compressed DMG.
Tagged releases attach it as PascalCoin-<tag>-x86_64-darwin.dmg beside the
existing darwin archive and include it in SHA256SUMS.
…rsion

The release job failed with mv reporting the same file when the tag matched the version the image was already named after.
Cut the root, wallet guide, build, licence, screenshot and test READMEs to
what a reader acts on: what each is, how to build, run or use it, what it
covers and its caveats. Internal mechanics, proof narration, rationale and
history are gone, and every remaining claim was checked against the code.
Code blocks are unchanged apart from a runner command for the Classic probe.
The root README's implementation notes on locking and buffered streams were
removed because the changelog records them, and its language list now names
only English and partly translated Dutch, since the German and French
catalogs are empty.
The macOS job now cross-compiles both wallets for Apple silicon (aarch64)
on the Intel runner and merges them with the Intel builds into universal
binaries with lipo, failing if either architecture is missing. The disk
image is named PascalCoin-<version>-macOS.dmg so Mac users no longer read
"x86_64" as a PC download, and its read-me says the apps run natively on
Apple silicon and Intel Macs.
Lazarus called ppcx64 directly, which cannot target aarch64, so lazbuild
stopped with "Unsupported target architecture -Paarch64". The step now
locates ppca64, fails clearly when the FPC install lacks it, and passes the
fpc driver to lazbuild so that it selects the Arm64 compiler.
FPC 3.2.2 for aarch64-darwin stops with internal error 2014121702 when a
16-byte TGUID arrives by value at the end of a long parameter list, as in
TOpData.CreateOpData and the operation search in UPCRPCOpData. Both now take
the GUID as constref under FPC and const under Delphi. Neither routine
modifies it, so behavior is unchanged.
Every unit now compiles for aarch64, but Xcode's new linker aborts (Abort
trap: 6) on FPC 3.2.2's aarch64 objects while the Intel link succeeds. The
Arm64 builds now call the fpc driver through a wrapper that passes
-k-ld_classic, and the step logs the linker version.
Test scripts defaulted FPC and Lazarus to one developer's local install and
never searched PATH, so they failed on other machines. They now default to
the fpc and lazbuild found on PATH and otherwise ask for -FpcPath and
-LazarusDirectory. README examples use placeholders such as <new-folder>
instead of local folders.
The embedded Sphere 10 Pascal Framework gets the same corrections as the
framework: DisposeItem, TNumericComparisonKind and NumericComparisonKind,
FHorizontalLine and the idpRelease message, with deprecated aliases for the
old names.
- Raise the explicit shutdown budget from 5000 to 15000 ms. Hosted CI took up
  to about 6 s because the incoming case also waits for its listener to stop.
- Wait in the buffered-frames check until the transport buffer holds the
  complete frame, because ReceiveBuf counts bytes before the receive thread
  appends them.
- Only the backlog probe reads PASCALCOIN_BACKLOG_CASE, so a leftover value no
  longer changes the dedicated probes.
- PendingCatchupProbe exits 1 instead of raising unhandled exceptions, the
  Tools-only harness marker names only the checks that ran, log messages get
  their missing spaces and four default selectors get -DemoCase names.
- Run-BufferedAdoptionChecks.ps1 finds FPC on PATH and falls back to
  windows-dll for OpenSSL, and RunWalletStartupNativeTests.ps1 can rerun into
  the same output folder.
- Document the wallet node-sync probe and the regression runner for the
  connection-restart and pending-protocol probes.
…check

Case 11 read the peer counters as soon as the transport owner reported itself
destroyed, but the counters are decremented just after that flag. The wait
loop now also waits, within its 5-second deadline, for the counters to reach
zero, so a counter that never balances still fails the check.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants