Releases: gridcoin-community/Gridcoin-Research
5.4.8.0-leisure
[5.4.8.0], 2024-04-10, leisure
This release is a maintenance release that adds checkpoints post the unintended
fork when 5.4.6.0 was introduced. Given that some folks upgraded to 5.4.7.0 too
late for their wallets to correct out of the fork, some 5.4.7.0 clients continue
to spam the network. This will largely squelch that on 5.4.8.0 nodes. It also
will force the forked 5.4.7.0 or below clients to reset their blockchain and
resync from zero when they upgrade to 5.4.8.0 and run it for the first time.
It is highly encouraged to upgrade to this release.
Jim Owens
Added
- build: add option for sanitizers #2553 (@div72)
- build: CMake: Initial Windows support (MSYS2) #2733 (@CyberTailor)
Changed
- build: enforce SSE2 on x86 targets #2746 (@div72)
- consensus: Update checkpoint data for mainnet and testnet #2756 (@jamescowens)
- gui, util: Enhance verify checkpoints fail handling; use RegistryBookmarks for DB passivation #2758 (@jamescowens)
Removed
Fixed
- build, depends: fix compilation with XCode 15 #2747 (@div72)
- Fix man page installation path for cmake builds #2749 (@theMarix)
- consensus, mrc, sidestake: add mrc fees to staker to rewards to be allocated via sidestaking #2753 (@jamescowens)
- Fix Systemd unit install location #2754 (@theMarix)
- scraper: Corrections to scraper_net after removal of cntPartsRcvd decrement and increment #2755 (@jamescowens)
- rpc: fix setban segfault #2757 (@div72)
5.4.7.0-leisure
[5.4.7.0], 2024-03-13, leisure
This release is solely to implement the disconnection of version 5.4.5.0 and
below nodes as the last cleanup action due to the inadvertent fork caused at
3190603/4 as a result of the inadvertent protocol change introduced in
5.4.6.0. A more detailed explanation is in order:
The default contract version is supposed to change from 2 to 3 at the block v13
hardfork, which was envisioned to be set as part of the Natasha milestone
release. The way this is accomplished is that the default contract version is
incremented to 3, and then logic is used to ensure the contract version actually
used is 2 until the v13 fork point is reached. The fork point for v13 was not
set in version 5.4.6.0, as it was intended to be 100% protocol compatible with
5.4.0.0 - 5.4.5.0, i.e. a leisure upgrade; however, a coding omission caused tx
messages sent from 5.4.6.0 nodes to be version 3 instead of version 2
immediately. This caused nodes 5.4.5.0 and below to reject the transaction
containing the message and the block causing a fork.
This mistake is mine and mine alone, and I am regretful about it. This is the
first forking incident we have had in a number of years, but I take this type
of event very seriously. Regression testing is done as well as longer time
testnet testing and some mainnet testing before that, but this particular type
of issue is hard to catch.
By the time this actually occurred on mainnet, there was far more weight on the
5.4.6.0 side of the fork than the 5.4.5.0 side, so it made the most sense to
continue forward with the 5.4.6.0 side, and require everybody that had not
already upgraded to upgrade, essentially turning 5.4.6.0 into a mandatory.
All but a few folks have upgraded now to 5.4.6.0, but we still have a few nodes
(with aggregrate difficulty ~ 1.0) on the 5.4.5.0 fork and these nodes are
connecting to 5.4.6.0 peers. Given that the fork common block is fairly deep at
this point (the fork point was at 3190603/4 and the head of the chain is at
3194579 as of this writing), this is causing a lot of unnecessary network
traffic between 5.4.5.0 and 5.4.6.0 nodes to pass orphan blocks around.
At this point it makes sense to implement an automatic disconnect for all nodes
5.4.5.0 and below. The code already disconnected nodes below 5.4.0.0 as the
protocol version in wallets less than 5.4.0.0 is out of date. Because the
protocol version was not incremented from 5.4.5.0 to 5.4.6.0, we have to
distinguish and disconnect here based on the node sub version string, which
contains 5.4.x (and is also displayed in the peers table).
Note this is similar in concept to what we do in a normal mandatory, where we
normally disconnect pre-mandatory version nodes after a grace period from the
hard fork height. Obviously the conditions are not ideal here, but this is the
best answer at this point.
This should solve the elevated CPU usage and network bandwidth of wallets that
are receiving all of the orphan block traffic.
This release also includes the small adjustment to the Fraction class to solve
the compilation problems on Arch.
Added
- net, consensus: Ban nodes 5.4.5.0 and below #2751 (@jamescowens)
Changed
Removed
Fixed
- util: Adjust Fraction class addition overload overflow tests #2748 (@jamescowens)
5.4.6.0-hotfix-1
This hotfix includes PR2748 which corrects test suite errors This hotfix is only necessary if C++ compiler flag -D_GLIBCXX_ASSERTIONS is set during build. Currently this is true for Arch distribution. This hotfix is NOT necessary for normal wallet operation.
5.4.6.0-leisure
[5.4.6.0], 2024-03-02, leisure, "Miss Piggy"
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.6.0
This is the 5.4.6.0 leisure release, the final release in the Miss Piggy
milestone.
This is an important release that contains a number of bugfixes that enhance
stability for the wallet and implement poll caching, automatic background
updates and performance improvements for polls/voting. It also includes most
of the basic machinery needed to support the v13 block version protocol which
will be in the next mandatory at the following milestone, Natasha, although the
v13 block height has not been set, so we remain at v12 for now.
Some highlights:
- GUI control of sidestaking via settings -> options -> staking has been
implemented. Sidestaking has been converted over to integer arithmetic to
eliminate floating point consensus issues in preparation for the v13 mandatory,
which will support mandatory sidestaking. - Caching of polls in the client with automatic background updating, and poll
expiration reminders. This is a major improvement to polling. Some corrections
were made to how the wallet handles "my vote" tracking. - CMake build system support, which allows CMake to be used instead of
autotools. Note this does not yet work for Windows builds, but that is coming.
This should be helpful for maintainers. - Removal of almost all OpenSSL dependencies in favor of upstream native
implementations, with the exception of SSL RPC (deprecated anyway), and
indirect use through CURL, which is required in the scraper and a few other
areas. - A number of important fixes and updates, including a fix for the beacon
history stall problem that some folks have experienced, and an issue that caused
a major fork in testnet back in September 2023. - PR #2711 changes the JSON keys in the superblocks RPC command to lower snake
case, which is the RPC standard. This could cause scripts that process the
superblocks command output to fail, so a small adjustment to scripts that use
that command may be necessary.
A number of people besides myself contributed to this release. I would like to
thank the following people:
- @adriaanjoubert
- @CyberTailor
- @barton26
- @div72
- @theMarix
- @PrestackI
- @Pythonix
- The translation volunteers on Transifex
It is highly recommended that EVERYONE upgrade to this release.
There is much planned for Gridcoin in the future. I encourage folks to join the
discussion on Discord to participate.
Jim Owens
Added
- contrib: add nix file for compilation environment #2660 (@div72)
- gui: Make main Gridcoin window geometry save unique to datadir location #2661 (@jamescowens)
- build: Initial CMake support #2676 (@CyberTailor)
- util: Add
-shutdownnotify
andstartupnotify
options from upstream #2688 (@barton2526) - gui, staking: Implement facilities for mandatory sidestakes and sidestake GUI #2704 (@jamescowens)
- gui, voting: Implement poll result caching and poll stale indicator #2709 (@jamescowens)
- gui, projects: Implement greylist state for projects in GUI projects table #2715 (@jamescowens)
- gui, poll: Implement poll expiration reminders #2716 (@jamescowens)
- serialize: allow variants to be serialized #2729 (@div72)
- gui: Implement poll field length limiters in GUI forms #2742 (@jamescowens)
Changed
- consensus, contract, scraper, protocol, project, beacon, rpc: Replace remaining appcache sections with native structures #2639 (@jamescowens)
- build: update libsecp256k1 to v0.3.0 #2655 (@div72)
- build: Replace $(AT) with .SILENT #2674 (@barton2526)
- build: allow system bdb #2675 (@div72)
- Resize Header Column with Additional Text #2683 (@PrestackI)
- rpc: use RPCErrorCode everywhere #2687 (@Pythonix)
- wallet: SecureString to allow null characters #2690 (@barton2526)
- random: port some upstream changes #2696 (@div72)
- depends: Bump dependencies #2692 (@barton2526)
- doc: Update link to Discord server #2693 (@adriaanjoubert)
- rpc: Change capitalization, remove whitespace of rpc keys #2711 (@Pythonix)
- ci: bump MacOS version to 12 #2713 (@div72)
- depends: no-longer nuke libc++abi.so* in native_clang package #2719 (@div72)
- doc: update windows
-fstack-clash-protection
doc #2720 (@div72) - Silence
-Wcast-function-type
warning #2721 (@div72) - build: Use newest
config.{guess,sub}
available #2722 (@div72) - refactor: use the try_lock result in TryEnter #2723 (@div72)
- Updates for file src/qt/locale/bitcoin_en.ts in pt_PT #2726 (@gridcoin-community)
- ci: do not silently fail #2727 (@div72)
- Properly include Boost Array header #2730 (@theMarix)
- build: Update depends zlib to 1.3.1 #2734 (@jamescowens)
- util: Enhance Fraction class overflow resistance #2735 (@jamescowens)
- refactor: Fix compilation warnings #2737 (@jamescowens)
- gui, util: Improve upgrade dialog #2738 (@jamescowens)
- util: Improve allocation class #2740 (@jamescowens)
- translations: translation updates for Miss Piggy release #2745 (@jamescowens)
Removed
- gui: Disable snapshot GUI action #2700 (@jamescowens)
- build, crypto, script: remove most of OpenSSL usage #2705 (@div72)
- util: remove WSL 1 workaround in fs #2717 (@div72)
Fixed
- diagnostics: fix missing arg in ETTS warning #2684 (@div72)
- misc: fix include guard in netaddress.h #2695 (@div72)
- gui: Fix expired pending beacon display #2698 (@jamescowens)
- consensus: Fix 20230904 testnet forking issue #2703 (@jamescowens)
- gui: Fix filter by type in Transaction View #2708 (@jamescowens)
- depends: make fontconfig build under clang-16 #2718 (@div72)
- diag: fix researcher mode check #2725 (@div72)
- gui: Add missing switch cases for ALREADY_IN_MEMPOOL #2728 (@jamescowens)
- beacon, registry: Fix beacon history stall #2731 (@jamescowens)
- build: Implement comp_double comparison function in certain tests #2741 (@jamescowens)
- ci: change Qt path in CMake CI #2743 (@div72)
- net: Correct -tor argument handling #2744 (@jamescowens)
5.4.5.0-leisure
[5.4.5.0] 2023-04-23, leisure
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.5.0
This is an important leisure release and follows right on the heals of
5.4.4.0, because we fixed one thing only to break another in a worse way. By
worse I mean that some people with old keys could get a corrupt wallet message
on startup. In troubleshooting this issue, as it turns out, there is more to
the story than just the compressed flag not being set properly. Gridcoin has
been around a long time. A number of older wallets may have keys generated by
openssl that aren't handled correctly by the secp256k1 DER parser. We switched
over to secp256k1 from openssl for keys in 5.4.0.0, to align with Bitcoin
upstream. It is not entirely clear why Bitcoin does not see this issue with old
keys. Regardless, to be safe, we have disabled the ability to import HEX
formatted keps with importprivkey. This loss of HEX import functionality should
affect essentially no one, since the Base58, WIF, form is what everybody uses.
It is highly recommended that EVERYONE upgrade to this release.
Added
none
Changed
none
Removed
none
Fixed
5.4.4.0-leisure
[5.4.4.0] 2023-04-21, leisure
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.4.0
This is an important leisure release. It is not mandatory but contains an
important bug fix for exporting and importing private keys which has been
present since the last mandatory, 5.4.0.0. For releases between 5.4.0.0 and
5.4.3.0 inclusive, dumpwallet and importwallet work correctly, but dumpprivkey
and importprivkey do not.
It is highly recommended that EVERYONE upgrade to this release, especially if
you are using dump and import rpc functions for keys.
Added
none
Changed
none
Removed
none
Fixed
- wallet, rpc: Add missing assignment of fCompressed in dumpprivkey #2680 (@jamescowens)
5.4.3.0-leisure
[5.4.3.0] 2023-04-05, leisure
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.3.0
This is a very small intramilestone leisure release to integrate a few hotfixes
after 5.3.2.0.
In particular the workaround for backup wallet is important for those running
Linux with Boost 1.74 and whom have replaced the usual walletbackups
subdirectory with a symlink to another volume to redirect the automatic backups.
Added
- install: Enhance windows installer - detect running gridcoinresearch(d).exe and ask to close before continuing #2672 (@jamescowens)
- gui: Add one minute QTimer to update beacon age/expiration in tooltip #2671 (@jamescowens)
Changed
none
Removed
none
Fixed
- util: Implement workaround for backupwallet to deal with Boost 1.74 regression on copy_file #2669 (@jamescowens)
- banman: use GetPerformanceCounter instead of GetRandBytes #2668 (@div72)
5.4.2.0-leisure
[5.4.2.0] 2023-03-26, leisure, "LaVerne"
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.2.0
This is the 5.4.2.0 leisure release, the final release in the LaVerne milestone.
The changelog for this release is shorter than usual, but don't let that fool
you! Here are the most significant features in this release:
- #2540: HD wallet functionality (BIP32, but NOT BIP39 seed phrase support).
See details below. - #2620: Inclusion of Berkeley DB version 5.3 in tree and standardization of
all wallet.dat files to the bdb 5.3 format. THIS IS VERY IMPORTANT See
details below. - #2619: Optimization of critical section locking during poll refresh to fix
non-responsive GUI with wallets that have slow disks. This addresses the
complaint of non-responsive GUI when there are a lot of polls in progress and
the poll refresh is done on a computer with a regular HDD. - #2645, #2659: Improvements to the MRC request screen to improve information
and reduce confusion. - #2624: Update of pool cpids and avw rules. This adds the new pool (GRC Pool
5) to the list of valid pools for pool mode and also updates the poll % AVW
requirements passed by governance poll "Adopt New AVW Percentage Requirements
for Polls" c186e2fd5fa81541e74838c1f3b1268c471b55dc6c37aa1b3b9ea84ecd20801c. - #2612: Backport of Bitcoin Core ARMv8 SHA2 intrinsics which should speed up
newer ARM devices that are running a wallet.
For HD wallet functionality, please see the documentation in the PR:
#2540. Note that
people with existing wallets that choose to upgrade will have a HYBRID wallet
that contains both legacy private keys, the new hdseed key, and keys that are
generated from the hdseed. Backing up the hdseed covers all of the keys
generated from the hdseed, but not legacy keys. Those must also be backed up. It
is still safest to store copies of the wallet backup file(s) automatically
stored by the wallet every 24 hours in the walletbackups subdirectory of the
wallet data directory.
We have not yet implemented seed phrase support (BIP39).
IMPORTANT
If you are running a Windows wallet or certain Linux distribution wallets that
use the older Berkeley DB 4.8, such as Fedora or OpenSUSE, your Berkeley DB
version of your wallet.dat file will be upgraded automatically to 5.3 when you
first run Gridcoin after upgrading to this release. This should be completely
transparent to you. If for some reason you decide to downgrade, you need to be
aware that the older release will NOT successfully read your wallet.dat file
without doing a special procedure. If you downgrade to 5.4.1.0 or earlier,
before starting the downgraded wallet, you need to go to the data directory,
which is at %AppData%\GridcoinResearch on Windows or ~/.GridcoinResearch on
Linux by default, and go to the database subdirectory and delete the log.* files
found there. Then you can start the downgraded client and it should be able to
successfully read your wallet.dat file. If you downgrade and forget to do this,
your wallet will warn you about an unrecoverable error. If so, shut the wallet
down, and perform step discussed above, then restart. THIS IS ONLY NECESSARY IF
DOWNGRADING FROM THIS RELEASE.
The advantage of having everyone on the same bdb version, 5.3, is that
wallet.dat files will now be portable across ALL of Gridcoin's supported
operating systems/architectures that are on this version or higher (or were
already running bdb 5.3, such as Debian/Ubuntu, Mint, and Arch for example).
Just remember if you take a wallet.dat that is running on this release and move
it over to a machine running an earlier release on Windows, you will need to do
the procedure above or you will run into an error trying to read the
wallet.dat. Alternatively you can upgrade the target machine's wallet
installation before moving the wallet.dat, which would be preferred.
Thanks to the following contributors for this release:
- barton26
- delta1513
- div72
- jamescowens
- PrestackI
- pythonix
- sitiom
- theMarix
Enjoy!
Jim
[5.4.2.0] 2023-03-26, leisure, "LaVerne"
Added
- [3/3] key, wallet: HD wallets #2540 (@div72)
- ARMv8 SHA2 Intrinsics #2612 (@barton2526)
- build: vendor bdb 5.3 #2620 (@div72)
- scraper, gui: Add external adapter projects indication #2625 (@jamescowens)
- gui: implement INSUFFICIENT_MATURE_FUNDS status for the mrcmodel #2628 (@jamescowens)
- gui, accrual: Implement accrual limit warning #2636 (@jamescowens)
- rpc: add
getnodeaddresses
#2646 (@Pythonix) - consensus: Add new checkpoints #2651 (@barton2526)
Changed
- voting: Optimize poll locks #2619 (@jamescowens)
- util: move threadinterrupt.{cpp,h} to util #2613 (@Pythonix)
- gui, voting: Update pool cpids and avw rules #2624 (@jamescowens)
- ci: bump python and setup-python action version #2626 (@div72)
- gui: Change text from username to name (real name or nickname) #2633 (@jamescowens)
- locale: Translation update, phase 1 #2637 (@jamescowens)
- gui: Change MRC too soon to submit error to be less confusing #2645 (@jamescowens)
- locale: Update translations prior to release (phase 2/2) #2658 (@jamescowens)
- gui: Enhance MRC request form to avoid fee boost field confusion #2659 (@jamescowens)
Removed
none
Fixed
- net: Turn net structures into dumb storage classes (backport) #2561 (@Pythonix)
- build: Include native_X.mk before X.mk #2609 (@barton2526)
- depends: fix OpenSSL for Darwin builds #2610 (@div72)
- build: Change actions runner image to Focal, Force Lint to use 22.04, Change cd runner version #2611 (@barton2526)
- gui: don't show datadir error msgbox if arg isn't specified #2617 (@div72)
- rpc: Repair auditsnapshotaccrual rpc function #2621 (@jamescowens)
- gui: Correct updateBeaconIcon() function in bitcoingui.cpp #2622 (@jamescowens)
- wallet: Strengthen CWalletTx::RevalidateTransactions #2627 (@jamescowens)
- test: Fix Wambiguous-reversed-operator compiler warning, drop boost::assign #2632 (@barton2526)
- gui: Fix wallet overview displaying lower-case poll name #2640 (@delta1513)
- Fix and optimize ResendWalletTransactions #2642 (@jamescowens)
- build(nsis): Write registry keys to HKLM instead of HKCU, Install shortcuts for all users, Fix INSTALLDIR removal bug #2643 (@sitiom)
- gui: Fix TransactionRecord::decomposeTransaction to properly display self-sidestake #2647 (@jamescowens)
- rpc: Fixed the RPC error when running
help voting
while syncing #2649 (@delta1513) - build: Fix compilation with GCC 13 #2653 (@theMarix)
- rpc: Formatting - typo correction rpc help for listresearcheraccounts #2654 (@PrestackI)
5.4.1.0-leisure
[5.4.1.0] 2022-11-27, leisure
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.1.0
This is the 5.4.1.0 leisure release, an intramilestone maintenance release as
part of the LaVerne milestone. Much of this release comprises bugfixes and
updates from the Bitcoin Core upstream. Thanks to @barton2526 for working hard
to port Bitcoin Core PR's for Gridcoin. There are a few notable features that
make this version an important upgrade:
- Implementation of the getmrcinfo rpc function, which reports summary and/or
detailed MRC info for a single CPID or the entire network. - Implementation of the new core diagnostics library, along with an associated
walletdiagnose rpc command to allow running diagnostics on a headless wallet.
The GUI diagnostics were refactored to use the new core library. Thanks
@MinaFarhan! - Implementation of wallet holder's last vote information on the GUI poll
cards. This allows you to see your last vote on each poll in the GUI.
Thanks to the following contributors for this release:
Enjoy!
Jim
[5.4.1.0] 2022-11-27, leisure
Added
- net: Add and document network messages in protocol.h (backport) #2533 (@Pythonix)
- Define MAX_DIGITS_BTC for magic number in BitcoinUnits::format #2555 (@barton2526)
- rpc: Implementation of getmrcinfo #2570 (@jamescowens)
- init: Add init error message if -printtoconsole and -daemon specified simultaneously #2571 (@jamescowens)
- rpc: getmrcinfo part 2 - add calculated minimum fees and fee boosting and by CPID reporting #2575 (@jamescowens)
- fs: fully initialize
_OVERLAPPED
for win32 #2587 (@div72) - util: Diagnose Lib Version #1 #2573 (@MinaFarhan)
- util: Implement core diagnostics #2 (@jamescowens)
- util: modify Win32LockedPageAllocator to query windows for limit. #2536 (@div72)
- gui, voting: Implement information for wallet holder's votes on poll info cards #2605 (@jamescowens)
Changed
- scripted-diff: Drop Darwin version for better maintainability #2557 (@barton2526)
- build: Require gcc8 on Ubuntu Bionic to enable C++17 features #2579 (@barton2526)
- util: Replace use of locale dependent atoi(…) with locale-independent std::from_chars(…) (C++17) #2564 (@barton2526)
- translation: Translation updates #2581 (@jamescowens)
- depends: update urls for dmg tools #2583 (@div72)
- Use ReadLE64 in uint256::GetUint64 instead of duplicating logic #2586 (@div72)
- util: Make Parse{Int,UInt}{32,64} use locale independent std::from_chars(…) (C++17) instead of locale dependent strto{l,ll,ul,ull} #2592 (@barton2526)
- build: don't set PORT=no in config.site #2593 (@barton2526)
- build: Replace
which
command withcommand -v
#2595 (@barton2526) - build: update ax_cxx_compile_stdcxx to serial 14 #2596 (@barton2526)
- gui: Changed the unlocked for staking only icons to green #2598 (@delta1513)
- gui: Translation updates #2599 (@jamescowens)
- build: update CI for linter and actions version #2606 (@jamescowens)
- gui: Update translations #2608 (@jamescowens)
Removed
- refactor: remove unused c-string variant of atoi64() #2562 (@barton2526)
- refactor: Remove unused CDataStream::rdbuf method #2585 (@div72)
Fixed
- net: Fix some benign races (backport) #2532 (@Pythonix)
- rpc: fix invalid parameter error codes for {sign,verify}message RPCs #2556 (@barton2526)
- build: Fix x86_64 <-> arm64 cross-compiling for macOS #2560 (@barton2526)
- rpc, mrc: Fix field name and initialization of mrc_fees_to_staker #2567 (@jamescowens)
- gui: Add missing resizeTableColumns to fix send address book column widths #2569 (@jamescowens)
- accrual: rebuild snapshot registry on corruption instead of crashing #2577 (@div72)
- doc: Fix link to MurmurHash3.cpp (moved from Google Code to Github) #2584 (@div72)
- fix help text for
revokebeacon
command #2591 (@Pythonix) - util: Fix spelling error in gridcoinresearchd.cpp #2590 (@jamescowens)
- depends: always use correct ar for win qt build #2588 (@div72)
- util: Fix some bugs due to new implementation and change in BOINC dir handling (@jamescowens)
- util: Diagnose lib - Implement changes to solve crash on some Boost 1.66 machines #2597 (@jamescowens)
- contrib: Check for
patch
command, Check forwget
command #2594 (@barton2526) - build: Check std::system for -[alert|block|wallet]notify #2582 (@barton2526)
- gui: Changed the wording on the tooltip for the address book #2602 (@delta1513)
- build: pass win32-dll to LT_INIT() #2601 (@barton2526)
- build: minor cleanups to native_clang package #2600 (@barton2526)
- util: restore translations to diagnostics #2603 (@jamescowens)
- refactor: Fix problems found by valgrind #2607 (@jamescowens)
5.4.0.0-mandatory
[5.4.0.0] 2022-08-01, mandatory, "Kermit's Mom"
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.4.0.0
The Gridcoin core developers are proud to release 5.4.0.0 which represents the
Kermit's Mom milestone. This is a mandatory release and includes the long-
awaited implementation of Manual Reward Claims (MRC) and significant
improvments to poll and project structures among many other enhancements and
fixes.
Highlights
Manual Reward Claims (MRC)
The importance of this release to the community cannot be overstated. One of the
most significant challenges to new "crunchers" joining the Gridcoin community
is the payment of the 2nd layer crunching rewards to the crunchers for work they
are doing for network approved BOINC projects. The implementation of constant
block rewards (CBR) a number of years back improved the participation of wallets
in the staking process dramatically, raising the average difficulty on the
network from about 3 to greater than 18 today, representing more than
180000000 GRC continuously online and staking. This has drastically improved
security of Gridcoin, making it much more resistant to 51% attacks, but has had
the downside of increasing the effective minimum GRC required to solo crunch
to 5000 GRC or more. Without MRC, which is in this release, solo crunchers are
required to stake to get paid their rewards.
Most people regard having enough GRC to stake on average once a month is the
practical minimum for solo crunching, so 5000 GRC is effectively the minimum
bar for entry for solo crunching. Needless to say this is a giant challenge
for many newcomers and greatly harms the growth of the network. The pools help
with the problem by providing a way to earn GRC and eventually collect enough
to solo crunch, but they have a drawback in that the project research when pool
crunching is done in the name of the pool, not the cruncher. MRC sweeps that
giant hurdle away. With MRC you can solo crunch with only about 1 GRC to start.
You simply need enough to send a beacon advertisement (which is the new solo
cruncher's way of letting the network know that they want to get rewarded for
crunching). MRC will now allow a solo cruncher with an active beacon to request
payment at intervals as small as 14 days from the last time they were paid.
There is no minimum payment threshold, only the minimum time threshold. This
request for payment is a "manual reward claim" request, which is where the name
MRC came from originally. Note that what is going on under the hood is that the
requester is sending out a "MRC" request contract that is attached to a
transaction in the Gridcoin blockchain, which is picked up by the next staker,
and causes the staker to stake the reward for the requester as a delegate.
Essentially MRC is a form of delegated staking. Note that for this privilege
the requester will pay a portion of their reward as a fee to the staker and the
foundation. The total fee starts at 40% of the rewards at 14 days and then
declines as 14/(number of days) as the interval between payments is increased.
The foundation gets 80% of the fees and the staker 20%. These ratios were set
and approved by official poll
(id 651a3d7cbb797ee06bd8c2b17c415223d77bb296434866ddf437a42b6d1e9d89,
gridcoin-community/Gridcoin-Tasks#250).
To give a specific example, a new cruncher registers their beacon and starts
crunching. They have a pretty good computer and their magnitude has been
building to the point where at 14 days they have about 35 GRC pending as
rewards. At 14 days after the activation of their beacon, the MRC payment
button on the main screen will allow them to request payment of their rewards.
If they press the button at 14 days, then the requester will get 35 * (1 -
0.40) or 21 GRC. The foundation will get 0.80 * 0.40 * 35 or 11.2 GRC and the
staker will get 0.20 * 0.40 * 35 = 2.8 GRC. If the cruncher waits until 28 days
to request the reward, lets assume his or her magnitude is constant, so the
rewards have doubled, so now the requester has 70 GRC pending. If they press
the button at 28 days, then the requester will get 70 * (1 - 0.20) or 56 GRC.
The foundation will get 0.80 * 0.20 * 70 or 11.2 GRC and the staker will get
0.20 * 0.20 * 70 or 2.8 GRC. Notice that the effective fee to the foundation
and the staker at 28 days is the same as at 14 days. This is by design. The
foundation and staker fees decline as a percentage from the point of view of
the requester's total rewards as the time between payment requests increase
beyond 14 days, but from the point of view of the foundation and staker, the
fees essentially are computed at the 14 day point and remain capped as absolute
numbers.
The MRC request button will appear on the wallet main screen for crunchers
with active beacons and will allow MRC requests once the block v12
functionality block height is reached. This is the post Kermit's Mom release
hardfork point, and it will be at block 2671700, which will occur on or about
August 31, 2022.
Some resources to review for MRC and related concepts:
- Solo crunching guide: https://gridcoin.us/guides/boinc-install.htm
- Staking: https://gridcoin.us/wiki/staking.html
- Beacons: https://gridcoin.us/wiki/beacons.html
- MRC core functionality:
#2425 - MRC GUI functionality:
#2513
Polls
Kermit's Mom has significantly improved both the rigor and functionality of the
polling system. Poll categories were included in the GUI rewrite a while back,
but those categories were GUI only and were not enforced by protocol at the
blockchain level. At the Kermit's Mom hardfork block (2671700), polls will now
use the poll payload v3 contract and associated protocol code, which will
enforce and validate poll categories and the validation rules associated with
them. Minimum poll duration and minimum vote weight percent of active vote
weight, along with poll type requirements are now encoded and/or enforced by
protocol. The GUI will display a "validated" tag for polls that have met
validation requirements for their given poll type. Polls that fail validation
requirements by the end of the poll will show "invalid". Polls with invalid
combinations of poll type, duration, and poll weight type cannot be created and
will also be validated by all nodes and rejected if an invalid combination is
received.
Polls also support the inclusion of additional fields, and the PROJECT poll
type now requires the additional fields of project_name and project_url in
the poll. This is in anticipation of driving automated whitelisting
functionality in a future release.
For more information, please see:
- Voting: https://gridcoin.us/wiki/voting.html
- Whitelist: https://gridcoin.us/wiki/whitelist-process.html
- Poll validation:
#2522 - Poll GUI additional fields components:
#2525
Projects
Kermit's Mom has implemented the inclusion of a GPPR controls required flag in
the project structure. After the Kermit's Mom hardfork point (2671700), all
project entries for the whitelist will require the GDPR protection flag to be
set to either true or false to indicate whether the project requires the user
to give permission for project statistics for that user to be exported. This is
used to drive a new column in the projects tab table in the researcher
(cruncher) wizard, and indicate a possible situation where a cruncher may not
have granted the necessary permission.
For more information, please see:
- Whitelist: https://gridcoin.us/guides/whitelist.html
- GDPR Protection Display:
#2527
libsecp256k1 port from Bitcoin Core
This one is not visible on the outside to anyone, but is a major improvement to
Gridcoin's plumbing. @div72 did a fabulous job porting over Bitcoin Core's
libsecp256k1 to Gridcoin. This replaces OpenSSL for all elliptic curve
cryptography on the blockchain itself with Bitcoin's more efficient (and more
secure) version. OpenSSL is now only used by the CURL library for https
communication with external websites in the scraper project download. This will
remain as CURL is well encapsulated and well maintained.
There were many other improvements and fixes that are in the Kermit's Mom
release. Please refer to the change log below for details. This release was a
group effort. Thanks to everybody who submitted a PR merged into the release. A
special thanks to @barton2526 for doing many backports/fixes to the build
system, Qt version bumps, and other utility backports. Thanks to @Pythonix for
submitting backports and fixes to the network code. And thanks to @iFoggz for
submitting enhancements to the scanforunspent rpc. A special thanks to m3prx for
submitting the winning icon for MRC submission used in the GUI.
A teaser of the major feature to look forward to for the next milestone,
LaVerne: HD wallet support! This is another long sought piece of
functionality that will allow folks to store one keyphrase to regenerate all
keys if necessary and provide the foundation for proper hardware based wallet
functionality.
Jim Owens
[5.4.0.0] 2022-08-01, mandatory, "Kermit's Mom"
Added
- test: Add TrimString(...) tests #2447 (@barton2526)
- test: Add dead code detection #2449 (@barton2526)
- test: Add explicit references to related CVE's in comments #2467 (@barton2526)
- test: Add testing of ParseInt/ParseUInt edge cases with leading +/-/0:s #2470 (@barton2526)
- consensus, contract, mining, resea...