Discussion based on cloud mining specifically using HashFlare.
A crypto currency for the most Noble.
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/5.0.0.0 Finally! After over ten months of development and testing, "Fern" has arrived! This is a whopper. 240 pull requests merged. Essentially a complete rewrite that was started with the scraper (the "neural net" rewrite) in "Denise" has now been completed. Practically the ENTIRE Gridcoin specific codebase resting on top of the vanilla Bitcoin/Peercoin/Blackcoin vanilla PoS code has been rewritten. This removes the team requirement at last (see below), although there are many other important improvements besides that.
Fern was a monumental undertaking. We had to encode all of the old rules active for the v10 block protocol in new code and ensure that the new code was 100% compatible. This had to be done in such a way as to clear out all of the old spaghetti and ring-fence it with tightly controlled class implementations. We then wrote an entirely new, simplified ruleset for research rewards and reengineered contracts (which includes beacon management, polls, and voting) using properly classed code. The fundamentals of Gridcoin with this release are now on a very sound and maintainable footing, and the developers believe the codebase as updated here will serve as the fundamental basis for Gridcoin's future roadmap.
We have been testing this for MONTHS on testnet in various stages. The v10 (legacy) compatibility code has been running on testnet continuously as it was developed to ensure compatibility with existing nodes. During the last few months, we have done two private testnet forks and then the full public testnet testing for v11 code (the new protocol which is what Fern implements). The developers have also been running non-staking "sentinel" nodes on mainnet with this code to verify that the consensus rules are problem-free for the legacy compatibility code on the broader mainnet. We believe this amount of testing is going to result in a smooth rollout.
Given the amount of changes in Fern, I am presenting TWO changelogs below. One is high level, which summarizes the most significant changes in the protocol. The second changelog is the detailed one in the usual format, and gives you an inkling of the size of this release.
Highlights
Protocol
Note that the protocol changes will not become active until we cross the hard-fork transition height to v11, which has been set at 2053000. Given current average block spacing, this should happen around October 4, about one month from now.
Note that to get all of the beacons in the network on the new protocol, we are requiring ALL beacons to be validated. A two week (14 day) grace period is provided by the code, starting at the time of the transition height, for people currently holding a beacon to validate the beacon and prevent it from expiring. That means that EVERY CRUNCHER must advertise and validate their beacon
AFTER the v11 transition (around Oct 4th) and
BEFORE October 18th (or more precisely, 14 days from the actual date of the v11 transition). If you do not advertise and validate your beacon by this time, your beacon will expire and you will stop earning research rewards until you advertise and validate a new beacon. This process has been made much easier by a brand new beacon "wizard" that helps manage beacon advertisements and renewals. Once a beacon has been validated and is a v11 protocol beacon, the normal 180 day expiration rules apply. Note, however, that the 180 day expiration on research rewards has been removed with the Fern update. This means that while your beacon might expire after 180 days, your earned research rewards will be retained and can be claimed by advertising a beacon with the same CPID and going through the validation process again. In other words, you do not lose any earned research rewards if you do not stake a block within 180 days and keep your beacon up-to-date.
The transition height is also when the team requirement will be relaxed for the network.
GUI
Besides the beacon wizard, there are a number of improvements to the GUI, including new UI transaction types (and icons) for staking the superblock, sidestake sends, beacon advertisement, voting, poll creation, and transactions with a message. The main screen has been revamped with a better summary section, and better status icons. Several changes under the hood have improved GUI performance. And finally, the diagnostics have been revamped.
Blockchain
The wallet sync speed has been DRASTICALLY improved. A decent machine with a good network connection should be able to sync the entire mainnet blockchain in less than 4 hours. A fast machine with a really fast network connection and a good SSD can do it in about 2.5 hours. One of our goals was to reduce or eliminate the reliance on snapshots for mainnet, and I think we have accomplished that goal with the new sync speed. We have also streamlined the in-memory structures for the blockchain which shaves some memory use.
There are so many goodies here it is hard to summarize them all.
I would like to thank all of the contributors to this release, but especially thank @cyrossignol, whose incredible contributions formed the backbone of this release. I would also like to pay special thanks to @barton2526, @caraka, and @Quezacoatl1, who tirelessly helped during the testing and polishing phase on testnet with testing and repeated builds for all architectures.
The developers are proud to present this release to the community and we believe this represents the starting point for a true renaissance for Gridcoin!
Summary Changelog
Accrual
Changed
Most significantly, nodes calculate research rewards directly from the magnitudes in EACH superblock between stakes instead of using a two- or three- point average based on a CPID's current magnitude and the magnitude for the CPID when it last staked. For those long-timers in the community, this has been referred to as "Superblock Windows," and was first done in proof-of-concept form by @denravonska.
- Network magnitude unit pinned to a static value of 0.25
- Max research reward allowed per block raised to 16384 GRC (from 12750 GRC)
- New CPIDs begin accruing research rewards from the first superblock that contains the CPID instead of from the time of the beacon advertisement
Removed
- 500 GRC research reward limit for a CPID's first stake
- 6-month expiration for unclaimed rewards
- 10-block spacing requirement between research reward claims
- Rolling 5-day payment-per-day limit
- Legacy tolerances for floating-point error and time drift
- The need to include a valid copy of a CPID's magnitude in a claim
- 10-block emission adjustment interval for the magnitude unit
Beacons
Added
- One-time beacon activation requires that participants temporarily change their usernames to a verification code at one whitelisted BOINC project
- Verification codes of pending beacons expire after 3 days
- Self-service beacon removal
Changed
- Burn fee for beacon advertisement increased from 0.00001 GRC to 0.5 GRC
- Rain addresses derived from beacon keys instead of a default wallet address
- Beacon expiration determined as of the current block instead of the previous block
Removed
- The ability for developers to remove beacons
- The ability to sign research reward claims with non-current but unexpired beacons
Unaltered
As a reminder:
- Beacons expire after 6 months pass (180 days)
- Beacons can be renewed after 5 months pass (150 days)
- Renewed beacons must be signed with the same key as the original beacon
Superblocks
Added
- Magnitudes less than 1 include two fractional places
- Magnitudes greater than or equal to 1 but less than 10 include one fractional place
Changed
- A valid superblock must match a scraper convergence
Removed
- Superblock popularity election mechanics
Voting
Added
- Yes/no/abstain and single-choice response types (no user-facing support yet)
Changed
- To create a poll, a maximum of 250 UTXOs for a single address must add up to 100000 GRC. These are selected from the largest downwards.
- Burn fee for creating polls scaled by the number of UTXOs claimed
- 50 GRC for a poll contract
- 0.001 GRC per claimed UTXO
- Burn fee for casting votes scaled by the number of UTXOs claimed
- 0.01 GRC for a vote contract
- 0.01 GRC to claim magnitude
- 0.01 GRC per claimed address
- 0.001 GRC per claimed UTXO
- Maximum length of a poll title: 80 characters
- Maximum length of a poll question: 100 characters
- Maximum length of a poll discussion website URL: 100 characters
- Maximum number of poll choices: 20
- Maximum length of a poll choice label: 100 characters
Removed
- Magnitude, CPID count, and participant count poll weight types
- The ability for developers to remove polls and votes
Detailed Changelog
[5.0.0.0] 2020-09-03, mandatory, "Fern"
Added
- Backport newer uint256 types from Bitcoin #1570 (@cyrossignol)
- Implement project level rain for rainbymagnitude #1580 (@jamescowens)
- Upgrade utilities (Update checker and snapshot downloadeapplication) #1576 (@iFoggz)
- Provide fees collected in the block by the miner #1601 (@iFoggz)
- Add support for generating legacy superblocks from scraper stats #1603 (@cyrossignol)
- Port of the Bitcoin Logger to Gridcoin #1600 (@jamescowens)
- Implement zapwallettxes #1605 (@jamescowens)
- Implements a global event filter to suppress help question mark #1609 (@jamescowens)
- Add next target difficulty to RPC output #1615 (@cyrossignol)
- Add caching for block hashes to CBlock #1624 (@cyrossignol)
- Make toolbars and tray icon red for testnet #1637 (@jamescowens)
- Add an rpc call convergencereport #1643 (@jamescowens)
- Implement newline filter on config file read in #1645 (@jamescowens)
- Implement beacon status icon/button #1646 (@jamescowens)
- Add gridcointestnet.png #1649 (@caraka)
- Add precision to support magnitudes less than 1 #1651 (@cyrossignol)
- Replace research accrual calculations with superblock snapshots #1657 (@cyrossignol)
- Publish example gridcoinresearch.conf as a md document to the doc directory #1662 (@jamescowens)
- Add options checkbox to disable transaction notifications #1666 (@jamescowens)
- Add support for self-service beacon deletion #1695 (@cyrossignol)
- Add support for type-specific contract fee amounts #1698 (@cyrossignol)
- Add verifiedbeaconreport and pendingbeaconreport #1696 (@jamescowens)
- Add preliminary testing option for block v11 height on testnet #1706 (@cyrossignol)
- Add verified beacons manifest part to superblock validator #1711 (@cyrossignol)
- Implement beacon, vote, and superblock display categories/icons in UI transaction model #1717 (@jamescowens)
- neuralnet: Add integrity checking to researcher accrual snapshot registry #1727 (@jamescowens)
- Add workaround for scrypt assembly on macOS #1740 (@cyrossignol)
- gui: Build onboarding/beacon wizard #1739 (@cyrossignol)
- doc: Add CONTRIBUTING.md from bitcoin #1723 (@div72)
- rpc: Implement inspectaccrualsnapshot and parseaccrualsnapshotfile #1744 (@jamescowens)
- scraper: Add disk based state backing for verified beacon list in scraper #1751 (@jamescowens)
- Add ability to recover beacon in block version 11+ #1768 (@cyrossignol)
- refactor: Add transaction context to contract handlers #1777 (@cyrossignol)
- gui: Add context for when BOINC is attached to a pool #1775 (@cyrossignol)
- doc: Clarify what to do if PR in multiple categories (for CONTRIBUTING.md) #1798 (@RoboticMind)
- qt: Add option to choose not to start the wallet minimized #1804 (@jamescowens)
- superblock: Add check for OutOfSyncByAge to SuperblockValidator::Validate #1806 (@jamescowens)
- contract: Standardize contract validation and add block context #1808 (@cyrossignol)
- add seed.gridcoin.pl to default config #1812 (@wilkart)
- gui: Implement sidestake send display #1813 (@jamescowens)
- gui: Add pool/investor pages to researcher wizard #1819 (@cyrossignol)
- ci: Port lint scripts from Bitcoin #1823 (@div72)
- doc: Create basic readme in contrib #1826 (@RoboticMind)
- gui: Implement TransactionRecord::Message #1829 (@jamescowens)
- rpc: Add private_key_available to beaconstatus #1833 (@a123b)
- gui: Validate email address in researcher wizard #1840 (@a123b)
- rpc: Add "getrawwallettransaction" RPC function #1842 (@cyrossignol)
- consensus: Set block version 11 threshold height for mainnet #1862 (@cyrossignol)
Changed
- Upgrade LevelDB from v1.17 to v1.20 #1562 (@cyrossignol)
- Re-enable scrypt optimizations #1450 (@denravonska)
- Derive CScript from prevector type (optimization) #1554 (@cyrossignol)
- Disable quorum for grandfathered blocks to speed up sync #1568 (@cyrossignol)
- Refactor hashBoinc for binary claim contexts #1558 (@cyrossignol)
- integrated_scraper_2 branch tracking PR #1559 (@jamescowens)
- Upgrade depends - OpenSSL to 1.1.1d #1581 (@jamescowens)
- Ubuntu 19.10 fixes #1590 (@denravonska)
- Force a re-parse of legacy claims in generated blocks #1592 (@cyrossignol)
- Improve the "versionreport" RPC output #1595 (@cyrossignol)
- Overhaul the core tally and accrual system #1583 (@cyrossignol)
- Overhaul the superblock quorum system #1597 (@cyrossignol)
- Add more data to the "superblocks" RPC output #1599 (@cyrossignol)
- Update Windows Build doc #1606 (@barton2526)
- Change the order of calls in gridcoinresearchd.cpp to optimize rpc shunt path #1610 (@jamescowens)
- Change staking tooltip to display frequency #1611 (@jamescowens)
- Enhancements to ETTS #1442 (@jamescowens)
- Standardize money values as integers #1614 (@cyrossignol)
- Clean up and optimize legacy coin age code #1616 (@cyrossignol)
- Some scraper cleanups #1620 (@jamescowens)
- Reorganize accrual code and fix 6-month cutoff #1630 (@cyrossignol)
- Update Copyright years #1633 (@barton2526)
- Change team whitelist delimiter to <> for CPID detection #1634 (@cyrossignol)
- Change team whitelist separator to <> to accomodate more team names #1632 (@jamescowens)
- Change Curl download speed type to support older environments #1640 (@cyrossignol)
- Optimize logo SVGs used for tray icons #1638 (@cyrossignol)
- Tweak consolidateunspent rpc function #1644 (@jamescowens)
- ETTS and staking icon enhancements #1650 (@jamescowens)
- Implement new transaction fees for block version 11 #1652 (@jamescowens)
- Optimize in-memory storage of superblock data #1653 (@cyrossignol)
- Miscellaneous superblock API improvements and housekeeping #1654 (@cyrossignol)
- Update openssl to 1.1.1f compatibility #1660 (@jamescowens)
- Optimize bdb to avoid synchronous flush of database #1659 (@jamescowens)
- Add support for CPID input to "lifetime" RPC function #1668 (@cyrossignol)
- Overhaul the contract handling system #1669 (@cyrossignol)
- Make the autostart mainnet/testnet aware #1671 (@jamescowens)
- Remove slashes from User Agent in peers tab #1674 (@div72)
- Refactor contracts for polymorphic binary payloads #1676 (@cyrossignol)
- Overhaul the beacon system #1678 (@cyrossignol)
- Replace boost::optional with non-owning pointers #1680 (@cyrossignol)
- Optimize proof-of-stake validation #1681 (@cyrossignol)
- Updated Slack link #1683 (@NeuralMiner)
- Update build-unix.md #1686 (@Quezacoatl1)
- Replace deprecated QT methods #1693 (@Pythonix)
- Made protocol.h more similar to bitcoin #1688 (@Pythonix)
- Touch up some details for block version 11 #1697 (@cyrossignol)
- More tweaks for block version 11 #1700 (@cyrossignol)
- Finish the conversion to the BCLog class based logger #1699 (@jamescowens)
- Move claim version transitional code in miner for proper signature #1712 (@cyrossignol)
- doc: Update threads in coding.txt #1730 (@div72)
- qt: Include QPainterPath in trafficgraphwidget.cpp #1733 (@div72)
- doc: Update doc/build-unix.md #1731 (@div72)
- gui: Show peers tab on connections icon click #1734 (@div72)
- refactor: Change return type of IsMine to isminetype && move wallet files to wallet directory #1722 (@div72)
- build: Updates boost to 1.73.0 for depends #1673 (@jamescowens)
- doc: Update Unit Test Readme #1743 (@RoboticMind)
- wallet: Change Assert To Error Message In kernel.cpp #1748 (@RoboticMind)
- scraper: Shorten display representation of verification codes #1754 (@cyrossignol)
- log: Change ".B." to Clear Message #1758 (@RoboticMind)
- util: Fix braindamage in GetDefaultDataDir() #1737 (@jamescowens)
- scraper: Improve scraper processing of beacon verifications #1760 (@jamescowens)
- scraper: Add instrumentation to convergencereport #1763 (@jamescowens)
- rpc: Improve rpc stress test script #1767 (@tunisiano187)
- Generalize enum serialization #1770 (@cyrossignol)
- scraper: Improve handling of ETags in http class and tweak verified beacon logic #1776 (@jamescowens)
- scraper: Improve ProcessNetworkWideFromProjectStats and other tweaks #1778 (@jamescowens)
- researcher: Automate beacon advertisement for renewals only #1781 (@cyrossignol)
- gui: Tweak behavior of beacon page in researcher wizard #1784 (@cyrossignol)
- Prepare for block version 11 hard-fork on testnet #1787 (@cyrossignol)
- scraper: Modify UpdateVerifiedBeaconsFromConsensus #1791 (@jamescowens)
- gui: Optimize OverviewPage::updateTransactions() #1794 (@jamescowens)
- ci: Adopt ci changes from Bitcoin #1795 (@div72)
- consensus: switch snapshot accrual calculation to integer arithmetic #1799 (@cyrossignol)
- voting: Overhaul the voting system #1809 (@cyrossignol)
- contract: Optimize contract replay after chain reorganization #1815 (@cyrossignol)
- contract: Reimplement transaction messages as contracts #1816 (@cyrossignol)
- staking: Sign claim contracts with coinstake transaction #1817 (@cyrossignol)
- gui: Change research wizard text #1820 (@div72)
- net: Update protocol version and clean up net messaging #1824 (@cyrossignol)
- rpc, wallet: Corrections to GetAmounts #1825 (@jamescowens)
- gui: Tweak some minor researcher wizard details #1830 (@cyrossignol)
- gui: Change GetEstimatedStakingFrequency text #1836 (@jamescowens)
- scraper: Scraper global statistics cache optimization #1837 (@jamescowens)
- doc: Update Vulnerability Response Process #1843 (@RoboticMind)
- scraper: Optimization of manifest and parts sharing between ConvergedScraperStatsCache, mapManifest, and mapParts #1851 (@jamescowens)
- consensus: Update Checkpoints #1855 (@barton2526)
- docs: Update docs to build off master #1856 (@barton2526)
- gui: Fix and improve GUI combo box styles #1858 (@cyrossignol)
- build: Tweak Gridcoin installer for Fern release #1863 (@jamescowens)
Removed
- Remove old research age checks (rebase #1365) #1572 (@cyrossignol)
- Remove PrimaryCPID check from diagnostics dialog #1586 (@cyrossignol)
- Remove missed label for PrimaryCPID from diagnostics #1588 (@cyrossignol)
- Remove legacy quorum messaging system (@neural network) #1589 (@cyrossignol)
- Remove old remnants of legacy smart contract experiments #1594 (@cyrossignol)
- Remove block nonce for version 11 #1622 (@cyrossignol)
- Delete obsolete contrib/Installer and Upgrader directories #1623 (@jamescowens)
- Remove redundant LoadAdminMessages() calls #1625 (@cyrossignol)
- Remove some legacy informational RPC commands #1658 (@cyrossignol)
- Remove informational magnitude field from binary claims #1661 (@cyrossignol)
- Remove fDebug3,4, and net and convert to BCLog::LogFlags #1663 (@jamescowens)
- Remove qt5.7.1 depends support build System #1665 (@iFoggz)
- Remove unused jQuery library #1679 (@cyrossignol)
- Remove unused NetworkTimer() function and global state #1701 (@cyrossignol)
- Refactor claim context objects into contracts #1704 (@cyrossignol)
- Clean old assets up #1718 (@div72)
- Remove legacy "rain" RPC (not by-project rain) #1742 (@cyrossignol)
- Temporarily disable voting system on testnet #1769 (@cyrossignol)
- gui: Remove legacy GUI transaction description for contracts #1772 (@cyrossignol)
- gui: Remove transaction fee setting #1780 (@cyrossignol)
- trivial: Cleanup unused legacy functions #1793 (@cyrossignol)
- mining, rpc: Remove kernel-diff-best and kernel-diff-sum #1796 (@jamescowens)
- refactor: Remove libs subdirectory #1802 (@div72)
- scraper: cleanup unused/unnecessary functions #1803 (@jamescowens)
- gui: Remove useless "Detach databases at shutdown" #1810 (@jamescowens)
- test: Remove testnet condition for standard transactions #1814 (@cyrossignol)
- consensus: Remove transitional testnet code #1854 (@cyrossignol)
Fixed
- Fix "Owed" amount in output of "magnitude" RPC method #1569 (@cyrossignol)
- Add support for paths with special characters on Windows #1571 (@cyrossignol)
- Fix lingering peers.dat temp files and clean up remaining paths #1582 (@cyrossignol)
- Fix incorrect beacon length warning in GUI transaction list #1585 (@cyrossignol)
- Fix default config file line endings on Windows #1587 (@cyrossignol)
- Reenable Travis builds for MacOS #1591 (@jamescowens)
- Correct peer detail info background color #1593 (@jamescowens)
- Fix exception in debug3 mode #1598 (@cyrossignol)
- Fix deadlock in "getmininginfo" RPC function #1596 (@cyrossignol)
- Fix accuracy of statistics in "network" RPC output #1602 (@cyrossignol)
- Fix heights for quorum vote weight calculations #1604 (@cyrossignol)
- Fix deadlock in log archiver when rename fails #1607 (@cyrossignol)
- Fix a spurious segmentation fault during client load on Windows with fast CPUs #1608 (@jamescowens)
- Fix lock order debugging and potential deadlocks #1612 (@jamescowens)
- Add dependencies #1613 (@Scalextrix)
- Fix std namespace pollution #1617 (@denravonska)
- Add missing condition for newbie accrual computer #1618 (@cyrossignol)
- Track first reward blocks in research accounts #1619 (@cyrossignol)
- Fix lingering beacon warning after advertisement #1627 (@cyrossignol)
- Fix accrual calculation for new, zero-magnitude CPIDs #1636 (@cyrossignol)
- Fix diagnostics, add ETTS test, fix tooltipcolor, add missing lock, and add email=investor check #1647 (@jamescowens)
- Fix help message of two RPC methods #1656 (@div72)
- Fix legacy accrual for newbie with non-zero past reward #1667 (@cyrossignol)
- Fix GUI autostart on Windows for paths with wide characters #1670 (@cyrossignol)
- Qualify boost bind placeholders with their full namespace #1672 (@Ponce)
- Fix suffix when copying txids #1677 (@div72)
- Unnecessary if-statement removed #1685 (@Pythonix)
- Fix consolidatemsunspent Help Message #1687 (@Pythonix)
- Fix gettransaction help message #1691 (@Pythonix)
- Fix GetNewMint To Look for Stakes #1692 (@RoboticMind)
- Suppress deprecated copy warnings for Qt with GCC 9+ #1702 (@cyrossignol)
- Fix exclusion error on stats processing and misplaced ENDLOCK logging entry #1710 (@jamescowens)
- Removed unnecessary comparison #1708 (@Pythonix)
- Fixed typo #1707 (@Pythonix)
- Fix out-of-bounds exception for peers tab version slashes #1713 (@cyrossignol)
- Fix transition for v1 superblocks when reorganizing #1714 (@cyrossignol)
- Touch up transition to version 2 transactions #1715 (@cyrossignol)
- Avoid mutating transactions in ConnectBlock() #1716 (@cyrossignol)
- Skip beacon advertisement when already pending #1726 (@cyrossignol)
- Fix Windows cross-compilation in newer environments #1728 (@cyrossignol)
- Fix out-of-bounds access in IsMineInner() #1736 (@cyrossignol)
- Fix a couple of block version 11 issues #1738 (@cyrossignol)
- Fix null pointer dereference in GUI researcher model #1741 (@cyrossignol)
- accrual: Reset research accounts when rebuilding accrual snapshots #1745 (@cyrossignol)
- scraper: Correct update for verified beacons #1747 (@jamescowens)
- accrual: Refactor tally initialization for snapshot rebuild #1749 (@cyrossignol)
- rpc: Fix "cpid" field in "beaconconvergence" RPC output #1750 (@cyrossignol)
- accrual: Fix snapshot accrual superblock state transitions #1752 (@cyrossignol)
- scraper: Correct stale verified beacon logic #1753 (@jamescowens)
- rpc: Correct possible divide by zero in getblockstats #1755 (@jamescowens)
- gui: Fix issues with researcher wizard flow #1756 (@cyrossignol)
- wallet: Stop Error When Starting From Zero #1759 (@RoboticMind)
- Don't count empty email as explicit investor #1761 (@cyrossignol)
- accrual: Fix snapshot accrual superblock state transitions #1764 (@cyrossignol)
- rpc: Cleanup Help Message and Fix Typo #1771 (@RoboticMind)
- scraper: Fix scraper etag header case sensitivity #1773 (@cyrossignol)
- consensus: Use explicit time to check if superblock needed #1774 (@cyrossignol)
- gui: Fix scroll area dark theme styles #1785 (@cyrossignol)
- rpc, gui: Fix three divide by zero possibilities #1789 (@jamescowens)
- rpc: Fix balance pre-check in "rainbymagnitude" RPC #1792 (@cyrossignol)
- accrual: Fix outdated comment and correct grammar #1800 (@RoboticMind)
- gui: Fix stuck cursor on labels #1801 (@div72)
- beacon: Fix research wizard beacon renewal status #1805 (@cyrossignol)
- gui: Fix translations for port numbers #1818 (@cyrossignol)
- util: Create parent directory #1821 (@div72)
- mining: Fix coinstake/claim signature order #1828 (@cyrossignol)
- voting: Remove double increment in loop #1831 (@cyrossignol)
- neuralnet, scraper: Fix compilation with gcc5 and older libcurl #1832 (@a123b)
- wallet: Fix smallest coin selection for contracts #1841 (@cyrossignol)
- gui: Fix display of polls with no votes yet #1844 (@cyrossignol)
- gui: add indentation to diagnostic status bar labels #1849 (@jamescowens)
- voting, gui: Fix formatting and alignment of vote shares and percent #1850 (@jamescowens)
- wallet, rpc: Fix for self-transactions in listtransactions #1852 (@jamescowens)
- accrual: Clear any accrual snapshots when syncing from pre-v11 #1853 (@cyrossignol)
- accrual: Fix reset of accrual directory if starting sync below research age height #1857 (@jamescowens)
- gui: Fix researcher wizard layout on macOS with native theme #1860 (@cyrossignol)
submitted by Hey all,
I'm fairly novice at Python, but have started to (attempt to) write useful programs. So far I've put one together that traverses a folder list and checks for a particular folder and either adds it if it isn't there, or renames it if it is labelled incorrectly.
I have recently almost finished my 2nd project. It's a data extractor that calculates percentage returns of most of the world's major stock market indices over a user-selected time period, using the YFinance library.
I've managed to capture and address all errors except for a ValueError to do with the datetime module. It will only come up if the user enters an incorrect date (e.g. the 31st of February) and causes the program to crash.
You will see in the While loop for the 'end date' field, I've tried adding the ValueError statement here (I've also tried other places in the code as well including under the loop that reads the dictionary of stock indices) but each time a wrong date format is entered, the error appears.
What I need help with is:
- How do I catch the ValueError in the loop and cause it to print out a message (I know how to print the message, but can't seem to figure out where to insert the 'except ValueError' statement in the 'try/except' block)
- How can I calculate the total period of months (or years and months) between the user selected date range?
I've been reading up on datetime for much of the weekend but still haven't made any progress with it. I'm sure it's a relatively simple fix, but I am requesting help from those who are much more skilled than I.
Also if anyone notices any redundant info in the code, please don't hesitate to inform me!
Thanks in advance for your help!!
import yfinance as yf import pandas import re import sys import datetime from datetime import timedelta """Title:""" print("MAJOR INDICES STOCK PRICE CALCULATOR (FROM DATE TO DATE) \n") """Ensure user enters correct date format:""" correct_date_format = re.compile(r'\d{4}-\d{2}-\d{2}') """User enters date range:""" while True: start_date_script = "Enter a start date in the format YYYY-MM-DD" start_date_script += "\n(type 'q' then press 'enter' to exit): " end_date_script = "\nEnter an end date in the format YYYY-MM-DD: " end_date_script += "\n(type 'q' then press 'enter' to exit): " start_date = '' end_date = '' """Ensure start/end date matches correct format and give option to exit""" while True: start_date = input(start_date_script) start_date_match = re.search(correct_date_format, start_date) if start_date == 'q': sys.exit() if not start_date_match is None: break else: print( "You must enter a start date in the format YYYY-MM-DD! \n" ) while True: try: end_date = input(end_date_script) except ValueError: print( "This month doesn't have this many days. Please try again.") except IndexError: print("\nPlease enter a larger date range") continue else: end_date_match = re.search(correct_date_format, end_date) if end_date == 'q': sys.exit() if end_date <= start_date: print("\nThe end date cannot be before the start date!") print() continue if not end_date_match is None: break else: print( "You must enter an end date in the format YYYY-MM-DD!\n" ) """List of all ticker symbols to be used""" yahoo_tickers = { 'All Ords': '^AORD', 'S&P ASX 200': '^AXJO', 'NZX50': '^NZ50', 'NASDAQ': '^NDX', 'S&P 500': '^GSPC', 'Dow Jones': '^DJI', 'FTSE': '^FTSE', 'DAX': '^GDAXI', 'Hang Seng': '^HSI', 'Nikkei225': '^N225', 'Gold': 'GC=F', 'Oil': 'CL=F', 'CMC Crypto 200': '^CMC200', 'Bitcoin (in AUD)': 'BTC-AUD', 'MSCI World index': 'XWD.TO' } """Calculate difference between end date and set time periods""" datetimeFormat = '%Y-%m-%d' date1 = start_date date2 = end_date diff = datetime.datetime.strptime(date1, datetimeFormat)\ - datetime.datetime.strptime(date2, datetimeFormat) print() print("-------------------------------------------------") print("Total days in period:", abs(diff.days)) print("-------------------------------------------------") """Return percentage change reports from major indices:""" for index, ticker_code in yahoo_tickers.items(): try: ticker = yf.Ticker(ticker_code) ticker_history = ticker.history(start = start_date, end = end_date) except ValueError: print( "Incorrect amount of days for month. Please try again.") except(IndexError, KeyError): print( "To avoid the above error, try extending your date range\n." ) else: ticker_percent_change = "%.2f" % round( (((ticker_history['Close'][-1] / ticker_history['Close'][0]) - 1)* 100), 2) print( "{0:<50}{1:>10}".format( "\n" + index + " % change in selected period: ", (str(ticker_percent_change) + '%'))) goto_start = "\nDo you want to input a new date range? " goto_start += "\nPress 'y' & 'enter' to input a new date range." goto_start += "\nPress 'n', then 'enter' to exit. " cont_or_exit = input(goto_start) if cont_or_exit == 'y': print() continue if cont_or_exit == 'n': break
submitted by Hi all, new to cloud mining and researching at the moment.
I was wondering whether anybody could share their experiences and things to consider regarding 'reinvesting' vs. profit taking.
As I understand, retaining the same hash rate as the difficulty adjustment increases reduces your reward. Reinvesting your reward into greater hash power will merely keep you treading water in terms of your reward rate, and eat into your take home profits. Surely there comes a point where you decide to stop reinvesting and take the profit instead?
Or am I correct in thinking that people reinvest to retain their hash power, with the expectation that the coin will be worth considerably more in the future and the profit can be taken by cancelling the reinvest option further down the line where the profits will be greater?
Is my above logic correct? What other considerations are there? Are there reinvesting strategies that people use?
Thanks in advance.
submitted by