
# v0.22.0
#### Master Build Status

## Special Notes
**Upgrade to this release is required**
### Network Upgrade at block 2,200,000
This release contains a network consensus update at block 2,200,000 that activates the following consensus rules:
* A single transaction must not contain more than `90` outputs
* Minimum network transaction fees are now calculated via a fee-per-byte method.
* Transactions with a fee of less than the minimum fee-per-byte amount will be rejected by the network.
* **Fusion** transactions remain free
* See [#967](https://github.com/turtlecoin/turtlecoin/pull/967) for more details.
#### **The change to fee-per byte takes effect immediately in *zedwallet*, *wallet-api*, and *turtle-service* in this release. The software will not wait for the network upgrade before setting the minimum transaction fee via fee-per-byte.**
### End of Support (EOS) Notice
Legacy *zedwallet* is no longer supported. *zedwallet++* has officially replaced legacy *zedwallet* in all builds from here on out. If you're having problems with legacy *zedwallet*, you're on your own.
### End of Life (EOL) Notice
Please note that v0.28.0 will be the last release to contain *turtle-service*. Releases after 0.v28.0 will not longer contain the *turtle-service* binaries and the code will be removed. In preparation for this EOL, please work to implement *wallet-api* in your application(s), perform testing, and report any [issues](https://github.com/turtlecoin/turtlecoin/issues/new?template=bug_report.md) that you encounter so that they may be resolved as quickly as possible.
**Note**: The End of Support (EOS) date for *turtle-service* has not been set at this time. Please pay attention to release notes for further information regarding *turtle-service* EOS.
#### Reminder
Wallets created and/or managed by *zedwallet* are no longer compatiable with with *turtle-service*. To be very clear, *turtle-service* can **only** open wallets created with *turtle-service* as of this release.
## Release Notes
### General Updates
* Implemented [#915](https://github.com/turtlecoin/turtlecoin/pull/915): Switch to GitHub Actions for CI/CD
* Resolved [#925](https://github.com/turtlecoin/turtlecoin/pull/925): Link in SSS3 Support in Argon2
* Accepted [#934](https://github.com/turtlecoin/turtlecoin/pull/934): Remove legacy Zedwallet and promote Zedwallet++ out of beta
* Implemented [#938](https://github.com/turtlecoin/turtlecoin/pull/938): Update error codes to be in line with js backend
* Implemented [#945](https://github.com/turtlecoin/turtlecoin/pull/945): Enforce Excessive Output Creation Limits
* Implemented [#968](https://github.com/turtlecoin/turtlecoin/pull/968): Rework output capping
* Implemented [#951](https://github.com/turtlecoin/turtlecoin/pull/951): Update CuvéeCZ Seed Node
* Implemented [#954](https://github.com/turtlecoin/turtlecoin/pull/953): Reorder transaction validation to be easier to follow
* Implemented [#969](https://github.com/turtlecoin/turtlecoin/pull/969): Remove invalid transactions from pool when included in block
* Implemented [#967](https://github.com/turtlecoin/turtlecoin/pull/967): Fee per byte
* Implemented [#987](https://github.com/turtlecoin/turtlecoin/pull/987): Updated inbuilt checkpoints
* Implemented [#990](https://github.com/turtlecoin/turtlecoin/pull/990): HTTP Client Retry on Socket Failure
* Accepted [#995](https://github.com/turtlecoin/turtlecoin/pull/995): Updated README.md with directions for compiling on RHEL-based systems. Thanks **@sohamb03**
* Accepted [#999](https://github.com/turtlecoin/turtlecoin/pull/995): Pass thru cmake used binary to rocksdb cmake build
### TurtleCoind Updates
* Resolved [#603](https://github.com/turtlecoin/turtlecoin/issues/603): Error in JSON serialization in multiple RPC methods regarding large uint64_t values
* Implemented [#903](https://github.com/turtlecoin/turtlecoin/pull/903): Full RPC rewrite with threading
* Resolved [#942](https://github.com/turtlecoin/turtlecoin/pull/942): Fix a bug that prevents blockchain to be loaded if the blockindexes.bin corrupts. Thanks **@ngeojiajun**
* Implemented [#946](https://github.com/turtlecoin/turtlecoin/pull/946): Update Transaction Pool To Account For Additional Metrics in Transaction Ordering
* Resolved [#952](https://github.com/turtlecoin/turtlecoin/issues/952): wallet-api creates hundreds of connection to node daemon
* Implemented [#954](https://github.com/turtlecoin/turtlecoin/pull/954): Limit the number of Fusion Transactions In The Transaction Pool
* Implemented [#965](https://github.com/turtlecoin/turtlecoin/pull/965): Threaded Input Validation
* Implemented [#970](https://github.com/turtlecoin/turtlecoin/pull/970): Cancel the validation if one of the inputs instead wait for all inputs to be fully validated. Thanks **@ngeojiajun**
* Implemented [#975](https://github.com/turtlecoin/turtlecoin/pull/975): Add size, fee to Daemon 's command `print_pool_sh`. Thanks **@wrkzdev**
* Implemented [#980](https://github.com/turtlecoin/turtlecoin/pull/980): Fix Daemon `status` command when using threaded RPC
* Implemented [#982](https://github.com/turtlecoin/turtlecoin/pull/982): Fix off by one error in transaction extra parsing
* Implemented [#986](https://github.com/turtlecoin/turtlecoin/pull/986): Fix Legacy RPC Responses Containing Raw TX_EXTRA
* Resolved [#988](https://github.com/turtlecoin/turtlecoin/issues/988): Error in Transaction Input Serialization
* Implemented [#993](https://github.com/turtlecoin/turtlecoin/pull/993): Log the IP address of the requestor when they use the daemon RPC
* Implemented [#996](https://github.com/turtlecoin/turtlecoin/pull/996): TransactionValidationResult Cross Thread Safety
* Implemented [#998](https://github.com/turtlecoin/turtlecoin/pull/998): /getblocktemplate invalid returned offset
* Updated P2P Version from `7` to `8` and set the minimum required to `7` to help with the network upgrade at block 2,200,000
### zedwallet++ Updates
* Implemented [#831](https://github.com/turtlecoin/turtlecoin/issues/831): Generating deterministic private spend keys for subwallets
* Resolved [#842](https://github.com/turtlecoin/turtlecoin/issues/842): Key images are regenerated on transaction creation [WB]
* Resolved [#892](https://github.com/turtlecoin/turtlecoin/issues/892): Updated WalletBackend and friends to return daemon rejection message
* Resolved [#922](https://github.com/turtlecoin/turtlecoin/issues/922): Log data fetch failures and JSON deserialization failures in Nigel
* Implemented [#930](https://github.com/turtlecoin/turtlecoin/pull/930): Improved nigel logging
* Implemeneted [#936](https://github.com/turtlecoin/turtlecoin/pull/936): Update zedwallet++ to allow setting trace log level via command
* Resolved [#940](https://github.com/turtlecoin/turtlecoin/issues/940): Need to deduct node fee + network fee before checking send_all validity
* Implemented [#948](https://github.com/turtlecoin/turtlecoin/pull/948): Allow syncing with /getrawblocks instead of /getwalletsyncdata
### turtle-service Updates
* Implemented [#981](https://github.com/turtlecoin/turtlecoin/pull/981): Add User-Agent Header to HTTP requests made by NodeRpcProxy
* Implemented [#983](https://github.com/turtlecoin/turtlecoin/pull/983): Fix turtle-service log levels not working as expected
* Implemented [#985](https://github.com/turtlecoin/turtlecoin/pull/985): NodeRpcProxy HTTP Method fixes for Threaded RPC
### wallet-api Updates
* Implemented [#831](https://github.com/turtlecoin/turtlecoin/issues/831): Generating deterministic private spend keys for subwallets
* Resolved [#842](https://github.com/turtlecoin/turtlecoin/issues/842): Key images are regenerated on transaction creation [WB]
* Resolved [#892](https://github.com/turtlecoin/turtlecoin/issues/892): Updated WalletBackend and friends to return daemon rejection message
* Resolved [#922](https://github.com/turtlecoin/turtlecoin/issues/922): Log data fetch failures and JSON deserialization failures in Nigel
* Implemented [#930](https://github.com/turtlecoin/turtlecoin/pull/930): Improved nigel logging
* Implemented [#931](https://github.com/turtlecoin/turtlecoin/pull/931): Allow Arbitrary Data in Transaction Extra Nonce via Wallet-API
* Resolved [#932](https://github.com/turtlecoin/turtlecoin/issues/932): GET /transactions/hash does not convert public keys to addresses
* Implemented [#948](https://github.com/turtlecoin/turtlecoin/pull/948): Allow syncing with /getrawblocks instead of /getwalletsyncdata
### miner Updates
* N/A
### cryptotest Updates
* N/A
### wallet-upgrader
* N/A
## Known Issues
* [#893](https://github.com/turtlecoin/turtlecoin/issues/893): Incorrectly resetting instead of rewinding on subwallet import
* [#943](https://github.com/turtlecoin/turtlecoin/issues/943): wallet-upgrader needs further scrutiny
## How To Sync Quickly
Visit the [checkpoints how to use site](https://checkpoints.turtlecoin.lol/use.html) for simple to follow directions on using checkpoints.
## How To Compile
Please see the [How To Compile](https://github.com/turtlecoin/turtlecoin#how-to-compile) section of the project [README](https://github.com/turtlecoin/turtlecoin/blob/master/README.md) for instructions on how to compile this release on your system.
## Changelog
See the [TurtleCoin Release](https://github.com/turtlecoin/turtlecoin/releases) page for the full change history.
## Thanks
Cryptonote Developers, Bytecoin Developers, Forknote Project, TurtleCoin Community