Skip to content

Version 5.9 - #268

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

HermanSchoenfeld wants to merge 62 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.
- Preserve the calculated footer height in optimized FPC builds and document the register-allocation defect.
- Keep controls inside their native parents across DPI changes and busy-provider resizing.
- Mirror the shared fix and regressions from Sphere 10 Pascal Framework: https://github.com/HermanSchoenfeld/PascalFramework.
- Exercise native wallet layouts with Release optimization.
- Keep large operation counters, dates, amounts and descriptions readable without overlap.
- Preserve payload space when resizing and reflow after native DPI scaling finishes.
- Cover large values, Unicode and live DPI changes in Delphi and Lazarus checks.
- Add an information button and right-click Details action for the selected operation.
- Keep row clicks, keyboard navigation and scrolling passive, retaining selection after viewing details.
- Disable Details while the grid is unavailable or the selected operation hash is invalid.
- Verify native input routing and the history picker in Delphi and Lazarus.
- Add orange Coin lettering to the README logo while preserving the original P symbol and Pascal paths.
- Retain the existing mark size in the wider wordmark.
- Explain explicit Details actions, scalable operation fields and Release-mode layout checks.
- Update the Build 5.9 change list and release notes.
- Use each project's default configuration in the basic build commands.
- Describe experimental Release and Debug modes as optional choices.
- Remove the duplicate title and retain PascalCoin as the logo's alternative text.
- Publish validated safebox checkpoints atomically and recover readable snapshots without overwriting rejected files.
- Keep incomplete writes unstable and pause block, operation and mining admission until restart.
- Drain background index workers cooperatively and preserve complete raw-block backups.
- Register checkpoint, node lifecycle and background-storage regressions in the test runner.
- Coalesce operations queries after 250 ms of silence while account pages refresh immediately.
- Show synchronization and restart-required storage status consistently in both wallets.
- Align banner and Details controls, and give key-selector objects explicit ownership.
- Cover rapid selections, loading completion, real block batches and network shutdown in native tests.
- Restore the README introduction and 2026 copyright.
- Describe safe checkpoint recovery, persistent storage errors and cooperative shutdown.
- Update the Build 5.9 change list and release notes for operations coalescing and native UI fixes.
- Document the additional storage tests and current Delphi/FPC test entry points.
- Use the core TReadWriteLock across node, networking, storage, mining and wallet application guards.
- Allow shared reads on proven read-only paths and preserve recursive writes for mutable streams, caches, callbacks and operation sequencing.
- Keep primitive admission independent of logging, retain timeout limits and balance operation-component ownership before destruction.
- Register actual-owner regressions for recursion, exclusion, timed wakeups and unsigned timeout conversion.
- Release snapshots safely after incomplete safebox construction or failed backend replacement.
- Preserve the original file-open error and existing successful Clear behavior.
- Cover direct, scoped and constructor cleanup with locked-file regressions.
- Import TBufferedStream from Sphere 10 Pascal Framework: https://github.com/HermanSchoenfeld/PascalFramework.
- Buffer legacy checkpoints, pending-operation input, serialized block headers and optional RandomHash input with explicit ownership and length-cache choices.
- Keep read buffering and stream-length caching independent, with explicit unread-data flushing before disabling the byte buffer.
- Register 101 shared stream contracts and eleven actual-core adoption checks with parallel Delphi/FPC probes.
- Skip checkpoints beyond local history or the requested restore limit and replay eligible local blocks.
- Retain protected failures for unreadable storage and preserve unused source files.
- Report progress and honor cancellation during legacy checkpoint inspection.
- Extend the shared storage runner to 43 recovery, progress and cancellation cases.
- Detach queued log records before calling GUI listeners so rendering does not hold the producer queue lock.
- Publish native log-control text once per batch in both Classic and Experimental wallets.
- Preserve filtering, retention, multiline text, reentrant delivery and record ownership on exceptions.
- Register shared handoff tests and native memo checks for both wallets.
- 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.
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