Jump to content

Mark Friedenbach

Freicoin Developer
  • Content Count

    71
  • Joined

  • Last visited

  • Days Won

    33

Posts posted by Mark Friedenbach

  1. Freicoin version 12.1.3-10161 is now available from:

    This is a new point release, enabling soft-fork deployment of the block-final transaction protocol rule update, a prerequisite for segregated witness and forward blocks.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Downgrade warning

    Because release v12 and later will obfuscate the chainstate on every fresh sync or reindex, the chainstate is not backwards-compatible with pre-v12 versions of Freicoin or other software.

    If you want to downgrade after you have done a reindex with v12 or later, you will need to reindex when you first start Freicoin version v11 or earlier.

    This does not affect wallet forward or backward compatibility.

    Notable changes

    Soft-fork deployment code for block-final transactions

    This release includes a soft fork deployment, using the BIP9 deployment mechanism, to enforce a scheme for making the final transaction of a block accessible to miners, for use by future soft-forks.

    The deployment sets the 2nd bit (1 << 1) of the block version number between midnight 2 July 2019 and midnight 16 April 2020 to signal readiness for deployment.  Note that as a residual effect of the coinbase-MTP soft-fork, the high-order nyble of a block's version field must 0b0011 until 2 October 2019 (0b001 to indicate version bits, and the highest version bit set).  The "locktime" soft-fork is also being signaled for during this time, using the first (1 << 0) version bit.  Please see the v12.1.2-10135 release notes for more information regarding that soft-fork deployment.

    The status of the block-final soft-fork deployment can be queried as the "blockfinal" soft-fork reported by the `getblockchaininfo` RPC call.

    Should this soft-fork activate, there are additional steps that miners will be required to undertake in order for their blocks to validate.  If you maintain mining or pool software, please see the next section for instructions.

    For more information about the soft-fork change, please see <https://github.com/tradecraftio/tradecraft/pull/46>

    BIP9: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki

    Block-final transactions for miner commitments

    Commitments made by miners in bitcoin, such as to the segregated witness data structure, are placed in the coinbase transaction.  This is the easiest choice, as it is the one place in the block which miners have free control over the contents, and which supports non-trivial amounts of arbitrary data.  However it is not an optimal location: proofs of miner commitments require a Merkle tree proof of the coinbase transaction, which is log(N) sized (where N is the number of transactions in the block).

    It has been known for some time that should the commitment be placed in the LAST transaction of a block, the size of the Merkle proof can be considerably reduced, even to the point of being a constant 32B if the number of transactions in a block is of the form (2^Z) + 1 for some integer Z.  Furthermore if the commitment is placed at the end of this block-final transaction then midstate compression can be used to reduce the amount of additional information required by a proof to around 100B total.  This minimized proof size is of considerable importance when we consider SPV proofs of witness data to mobile clients, or or block header commitments providing log-sized "proofs of proof of work" for sidechain pegs and other protocols.

    Having the last transaction of a block available for miners to use is also vitally important, it turns out, for various schemes that involve protocol-managed pots of funds, such as rebateable fees or the cross-shard transfers that are a part of forward blocks.  In these proposals "anyone-can-spend" user outputs of a certain form are collected (spent) by the final transaction of the block in which they appear, where they are then carried forward from block-to-block in an unending chain until they are redeemed at which point they pass to the coinbase transaction as "fee" and are paid out in an output subject to coinbase maturity rules.

    Although elegant, the trouble with using the final transaction of a block for these purposes is that every transaction in a block after the coinbase is required to have inputs, and therefore in order to create such block-final transactions the miner must have access to at least one mature output it controls in the UTXO set.  The solution is to chain the transactions together so that the outputs of the final transaction of one block are used as the inputs to the next block's final transaction. To get the process started, the coinbase of the block where activation occurs contains at least one anyone-can-spend output of this special form, and the new rules activate when that coinbase's outputs mature 100 blocks later.

    A block-final transaction is required to spend ALL the outputs of the prior block's final transaction, and the outputs it creates must be spendable with an empty scriptSig.  Because transactions are required to have at least one output, this ensures that there is always an input available for the next block's final transaction.  Additionally a block-final transaction is also allowed to gather inputs from the current block, or the just-matured coinbase from 100 blocks back, but no other input sources are allowed.

    Instructions for miners to create block-final transactions

    Upon activation, blocks are REQUIRED to have block-final transactions as described above, and miners MUST update their software or else they will find their blocks orphaned by the network.

    On the block which the [BIP9]() status of the "blockfinal" soft-fork switches from "locked_in" to "active", the coinbase MUST contain an output that can be successfully spent with an empty scriptSig, for which `scriptPubKey = CScript([OP_TRUE])` suffices.

    It is not recommended that mining software re-implement the BIP9 version bits soft-fork activation logic, due to the inherent risk of reimplementing consensus code.  Instead it is recommended that mining software include a zero-valued OP_TRUE output in their coinbase if all three of the following conditions are met:
     

    1. The block height is a multiple of 2016 (`nHeight % 2016 == 0`);
    2. The [BIP9]() status of the "blockfinal" soft-fork is reported as "active" in the output of the `getblockchaininfo` RPC; and
    3. There is no "blockfinal" section in the output of the `getblocktemplate` RPC.

    This will produce the initial output that is required to get the block-final transaction chain going.

    Once the initial output matures, mining software must also produce block-final transactions correctly, and the necessary information for doing so is provided in the output of the `getblocktemplate` RPC:

      { ...
        "blockfinal": {
          "prevout": [
            {
              "txid":   ...(string)
              "vout":   ...(numeric)
              "amount": ...(numeric)
            },
            ...
          ],
        },
        "locktime": ...(numeric)
        "height":   ...(numeric)
      }

    The block-final transaction needs to include as inputs ALL of the UTXOs specified in the "prevout" array.  It also needs to include at least one trivially spendable output (e.g. OP_TRUE).  Finally, the block-final `nLockTime` and `lock_height` fields should be set to the same values specified in the "locktime" and "height" fields from the output of `getblocktemplate`.

    Note that construction of the block-final transaction WILL require additional steps in future soft-forks, which is why it must be constructed by the miner. Pay close attention to release notes for future releases.

    12.1.3-10161 Change log
     

    • `12cf4e24` [Checkpoint] Add recent checkpoint, block #256000.
       
    • `25c92385` [DNSseed] Add new DNS seeds run by Tradecraft developers.
       
    • PR #46 [FinalTx] Add block-final transactions, which are a sort of "2nd coinbase" generated by the miner _after_ all other transactions in a block, and a BIP9 soft-fork deployment mechanism to coodinate activation of this feature.

    Credits

    Thanks to who contributed to this release, including:
     

    • Kalle Alm
    • Mark Friedenbach

    As well as everyone that helped translating on Transifex: https://www.transifex.com/tradecraft/freicoin-1/.

  2. A few months ago I was working on the donation matching code in order to perform an audited final payment. In the process I was consolidating funds from the 320 cold-storage foundation addresses into a single master key that has never been on a computer connected to the internet. No funds have been destroyed, except those lost to demurrage as part of the consolidation. I don't have the address for this key on hand wihle typing this, but it shouldn't be hard to work out -- I believe it's currently the highest value address on the chain, and you can find it simply enough by following the foundation funds.

    Additionally the current plan is that no funds will be destroyed. I believe this is explained elsewhere in another thread, but the idea is to use the remaining funds after the final donation match as a sort of protocol-controlled slush-fund buffer used to pay out cross-shard transfers, movements in and out of confidential transactions, and other forms of "coinbase payouts" defined by the forward blocks protocol. This will allow freicoin to continue operating and be responsive even if growth in the forward blocks outpace the 1MB main chain and a confirmation backlog develops. Once added to this fund the coins can never be removed from it, so it is effectively the same as destruction but in a way that benefits the protocol.

    However since this involves soft-fork "anyone-can-spend" outputs, the funds obviously can't be moved there until the forward block rule set has been written and activated. Until then, I regretfully remain keeper of the keys.

  3. Freicoin version 12.1.2-10135 is now available from:

    This is a new point release, enabling soft-fork deployment of a collection of time-lock related protocol features.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Downgrade to a version < v12

    Because release v12 and later will obfuscate the chainstate on every fresh sync or reindex, the chainstate is not backwards-compatible with pre-v12 versions of Freicoin or other software.

    If you want to downgrade after you have done a reindex with v12 or later, you will need to reindex when you first start Freicoin version v11 or earlier.

    This does not affect wallet forward or backward compatibility.

    Notable changes

    First version bits BIP9 softfork deployment

    This release includes a soft fork deployment to enforce BIP68 and BIP113 using the BIP9 deployment mechanism.

    The deployment sets the block version number to 0x30000001 between midnight 16 April 2019 and midnight 2 October 2019 to signal readiness for deployment. The version number consists of 0x30000000 to indicate version bits together with setting bit 0 to indicate support for this combined deployment, shown as "locktime" in the `getblockchaininfo` RPC call.

    (The leading bits to indicate version bits is actually 0x20000000, but version bits MUST be indicated and bit 28 set during this time period due to the earlier deployment of the coinbase-MTP soft-fork.)

    For more information about the soft forking change, please see:

        https://github.com/bitcoin/bitcoin/pull/7648

    This specific backport pull-request to v0.12.1 of bitcoin, which this release is based off of, can be viewed at:

        https://github.com/bitcoin/bitcoin/pull/7543

    Unlike bitcoin, this soft-fork deployment does NOT include support for BIP112, which provides the CHECKSEQUENCEVERIFY opcode. Support for checking sequence locks in script will be added as part of the script overhaul in segwit, scheduled for deployment with Freicoin v13.

    For more information regarding these soft-forks, and the implications for miners and users, please see the release notes accompanying v12.1-10123.

    [BIP9]: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki
    [BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
    [BIP68]: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
    [BIP112]: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki
    [BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki

    12.1.2-10135 Change log

    • `26c3508b` [Chainparams]
      Add recent checkpoint, block #250992.
       
    • `989cc70c` [Consensus]
      Add activation logic for BIP68 and BIP113.

    Credits

    Thanks to who contributed to this release, including:

    • Mark Friedenbach

    As well as everyone that helped translating on Transifex.
     

  4. For transparency's sake, here is the current listing of charitable organizations and the donations + matched funds that are owed to them:

    'Abundant Currency Project', 29 (rejected)
      Donation:	0.00000000
      Matched: 	0.00000000
      Payout:  	0.00000000
      Todo:    	0.00000000
    'Community Forge', 17 (validated)
      Donation:	1,996.60765506
      Matched: 	1,996.60765506
      Payout:  	1,096.20734614
      Todo:    	2,897.00796398
    'Complementary Currency Resource Center', 28 (validated)
      Donation:	1,000.00000000
      Matched: 	1,000.00000000
      Payout:  	1,099.54585847
      Todo:    	900.45414153
    'Cooperativa Integral Catalana', 14 (validated)
      Donation:	15,477.73483244
      Matched: 	15,477.73483244
      Payout:  	9,094.37501836
      Todo:    	21,861.09464652
    'Drupal Commerce Marketplace', 16 (validated)
      Donation:	798.57617174
      Matched: 	798.57617174
      Payout:  	438.40659107
      Todo:    	1,158.74575241
    'F-LAT', 27 (validated)
      Donation:	100.00420000
      Matched: 	100.00420000
      Payout:  	109.69829446
      Todo:    	90.31010554
    'Free Knowledge Institute', 15 (validated)
      Donation:	3,695.07701553
      Matched: 	3,695.07701553
      Payout:  	2,623.76520409
      Todo:    	4,766.38882697
    'Freicoin Alliance', 32 (validated)
      Donation:	1,286,335.57425855
      Matched: 	1,286,335.57425855
      Payout:  	1,105,617.40589899
      Todo:    	1,467,053.74261811
    'Freicoin Foundation', 13 (validated)
      Donation:	79,751.56464159
      Matched: 	79,751.56464159
      Payout:  	16,930.21046862
      Todo:    	142,572.91881456
    'FreiHemp Project', 33 (rejected)
      Donation:	0.00000000
      Matched: 	0.00000000
      Payout:  	0.00000000
      Todo:    	0.00000000
    'Freimarkets protocol extension', 20 (validated)
      Donation:	17,595.86014102
      Matched: 	17,595.86014102
      Payout:  	13,304.66222175
      Todo:    	21,887.05806029
    'IFLAS', 22 (validated)
      Donation:	1,997.61752895
      Matched: 	1,997.61752895
      Payout:  	1,097.31815021
      Todo:    	2,897.91690769
    'INEVAL', 30 (validated)
      Donation:	500.00420000
      Matched: 	500.00420000
      Payout:  	524.24229693
      Todo:    	475.76610307
    'Lifeboat Foundation', 19 (validated)
      Donation:	998.31990102
      Matched: 	998.31990102
      Payout:  	548.11904312
      Todo:    	1,448.52075892
    'Munitario', 26 (validated)
      Donation:	1,000.00000000
      Matched: 	1,000.00000000
      Payout:  	1,096.49968184
      Todo:    	903.50031816
    'New Economics Foundation', 21 (validated)
      Donation:	2,007.61912687
      Matched: 	2,007.61912687
      Payout:  	1,108.31726563
      Todo:    	2,906.92098811
    'NWACPE Institute', 31 (validated)
      Donation:	88.91380667
      Matched: 	88.91380667
      Payout:  	93.40596225
      Todo:    	84.42165109
    'Post Growth Institute', 24 (validated)
      Donation:	1,010.00420000
      Matched: 	1,010.00420000
      Payout:  	1,107.94076708
      Todo:    	912.06763292
    'The Zaryvakhin Foundation', 23 (validated)
      Donation:	2,008.45545557
      Matched: 	2,008.45545557
      Payout:  	1,109.23580475
      Todo:    	2,907.67510639
    'Umeed Foundation', 25 (validated)
      Donation:	0.00000000
      Matched: 	0.00000000
      Payout:  	0.00000000
      Todo:    	0.00000000
    Totals:
      Donation:	1,416,361.93313501
      Matched: 	1,416,361.93313501
      Payout:  	1,156,999.35587376
      Todo:    	1,675,724.51039626

    The first number "Donation" is how much freicoin in aggregate has been received at the donation addresses. "Matched" is the (tentative) amount the Freicoin Foundation would be contributing in up to 100% matches from initial-distribution funds. This number might change when the cycle-detection code is turned back on. "Payout" is the amount that has been paid out to the organization already, and "Todo" is what still needs to be paid.

  5. Freicoin version 12.1.1-10130 is now available from:

    This is a new bug fix release, fixing an erroneous report of unexpected version / possible versionbits upgrade on all platforms. Upgrading to this release is recommended but not required. Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Notable changes

    Erroneous versionbits upgrade notice

    The recent soft-fork to force vtx[0].nLockTime to be the current median-time-past requires that blocks signal for version bits and set bit #28, and to keep setting this bit once activated until 2 Oct 2019. On BIP9 versionbits-aware clients such as v12.1, this set bit is erroneously interpreted as activation of an unknown consensus rule, and the user is alerted to upgrade.

    This alert is generated in error and can be safely ignored in this case.  However this category of alert is serious and so as to prevent user complacency in the future we are issuing a new point release to eliminate this warning.

    Beginning with v12.1.1, setting versionbit #28 will not trigger warnings about the activation of new consensus rules until 2 Oct 2019 (2 Apr 2019 on testnet).

    [BIP9]: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki

    12.1.1-10130 Change log

    • `658b0cde1` [Alert]
      Do not warn about unexpected versionbits upgrade for the forced setting of bit 28 before Oct 2, 2019.
       
    • `f338bd9d4` [BIP9]
      The last deployed pre-versionbits block version on Freicoin was 3, not 4.

    Credits

    Thanks to who contributed to this release, including:

    • Fredrik Bodin
    • Mark Friedenbach

    As well as everyone that helped translating on Transifex.
     

  6. Freicoin version 12.1-10123 is now available from:

    This is a new major version release, bringing sequence locks and lock-time soft-fork, new features, and other improvements.

    Please report bugs using the issue tracker at github.

    Upgrading and downgrading

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Downgrade to a version < v12

    Because release v12 and later will obfuscate the chainstate on every fresh sync or reindex, the chainstate is not backwards-compatible with pre-v12 versions of Freicoin or other software.

    If you want to downgrade after you have done a reindex with v12 or later, you will need to reindex when you first start Freicoin version v11 or earlier.

    Downgrade to a version < v10

    Because release v10 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not backwards-compatible with pre-v10 versions of Freicoin or other software:

    • Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or other programs. Reindexing using earlier versions will also not work anymore as a result of this.
       
    • The block index database will now hold headers for which no block is stored on disk, which earlier versions won't support.

    If you want to be able to downgrade smoothly, make a backup of your entire data directory. Without this your node will need start syncing (or importing from bootstrap.dat) anew afterwards. It is possible that the data from a completely synchronised 0.10 node may be usable in older versions as-is, but this is not supported and may break as soon as the older version attempts to reindex.

    This does not affect wallet forward or backward compatibility.

    Notable changes

    Preparation for first version bits BIP9 softfork deployment

    This release includes all except for the activation logic for a soft fork deployment to enforce BIP68 and BIP113 using the BIP9 deployment mechanism.  A future release of the v12 series will include the BIP9 activation parameters.

    For more information about the soft forking change, please see <https://github.com/bitcoin/bitcoin/pull/7648>

    This specific backport pull-request to v0.12.1 of bitcoin, which this release is based off of, can be viewed at <https://github.com/bitcoin/bitcoin/pull/7543>

    Unlike bitcoin, this soft-fork deployment does NOT include support for BIP112, which provides the CHECKSEQUENCEVERIFY opcode. Support for checking sequence locks in script will be added as part of the script overhaul in segwit, scheduled for deployment with Freicoin v13.

    [BIP9]: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki
    [BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
    [BIP68]: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
    [BIP112]: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki
    [BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki

    BIP68 soft fork to enforce sequence locks for relative locktime

    BIP68 introduces relative lock-time consensus-enforced semantics of the sequence number field to enable a signed transaction input to remain invalid for a defined period of time after confirmation of its corresponding outpoint.

    For more information about the implementation, see <https://github.com/bitcoin/bitcoin/pull/7184>

    BIP113 locktime enforcement soft fork

    Freicoin v11 previously introduced mempool-only locktime enforcement using GetMedianTimePast(). This release seeks to consensus enforce the rule.

    Freicoin transactions currently may specify a locktime indicating when they may be added to a valid block.  Current consensus rules require that blocks have a block header time greater than the locktime specified in any transaction in that block.

    Miners get to choose what time they use for their header time, with the consensus rule being that no node will accept a block whose time is more than two hours in the future.  This creates a incentive for miners to set their header times to future values in order to include locktimed transactions which weren't supposed to be included for up to two more hours.

    The consensus rules also specify that valid blocks may have a header time greater than that of the median of the 11 previous blocks.  This GetMedianTimePast() time has a key feature we generally associate with time: it can't go backwards.

    BIP113 specifies a soft fork enforced in this release that weakens this perverse incentive for individual miners to use a future time by requiring that valid blocks have a computed GetMedianTimePast() greater than the locktime specified in any transaction in that block.

    Mempool inclusion rules currently require transactions to be valid for immediate inclusion in a block in order to be accepted into the mempool. This release begins applying the BIP113 rule to received transactions, so transaction whose time is greater than the GetMedianTimePast() will no longer be accepted into the mempool.

    Implication for miners: you will begin rejecting transactions that would not be valid under BIP113, which will prevent you from producing invalid blocks when BIP113 is enforced on the network. Any transactions which are valid under the current rules but not yet valid under the BIP113 rules will either be mined by other miners or delayed until they are valid under BIP113. Note, however, that time-based locktime transactions are more or less unseen on the network currently.

    Implication for users: GetMedianTimePast() always trails behind the current time, so a transaction locktime set to the present time will be rejected by nodes running this release until the median time moves forward. To compensate, subtract one hour (3,600 seconds) from your locktimes to allow those transactions to be included in mempools at approximately the expected time.

    For more information about the implementation, see <https://github.com/bitcoin/bitcoin/pull/6566>

    BIP65 new opcode CHECKLOCKTIMEVERIFY

    This release includes several changes related to the BIP65 soft fork which redefines the existing NOP2 opcode as CHECKLOCKTIMEVERIFY (CLTV) so that a transaction output can be made unspendable until a specified point in the future.

    Freicoin v12 contains an implementation of CLTV which is not included in the locklock soft-fork deployment. It is currently anticipated that it will NOT be deployed to pre-segwit scripts, in order to preserve space for Forward Blocks scriptPubKey prefixes.

    For more information about the implementation, see <https://github.com/bitcoin/bitcoin/pull/6124>

    BIP112 new opcode CHECKSEQUENCEVERIFY

    BIP112 redefines the existing NOP3 as CHECKSEQUENCEVERIFY (CSV) for a new opcode in the Freicoin scripting system that in combination with BIP68 allows execution pathways of a script to be restricted based on the age of the output being spent.

    Freicoin v12 contains an implementation of CSV which is *not* included in the locklock soft-fork deployment. It is currently anticipated that it will NOT be deployed to pre-segwit scripts, in order to preserve space for Forward Blocks scriptPubKey prefixes.

    For more information about the implementation, see <https://github.com/bitcoin/bitcoin/pull/7524>

    SCRIPT_VERIFY_REQUIRE_VALID_SIGS

    A new rule is introduced which considers a transaction as non-standard if verification of that transaction requires a failed signature check, even if the script is written in such a way as to allow that failure. Evaluating such a script is still possible, but the CHECKSIG opcode must be provided with an empty / zero-length signature value, or k such empty values for a k-of-n CHECKMULTISIG.

    Since the mapping of signatures to keys was not previouly specified in the inputs of a CHECKMULTISIG, the additional extra/unused dummy argument to CHECKMULTISIG is required to be a bitfield specifying which public keys do NOT have corresponding signatures. Wallets which sign for multisig outputs MUST be updated to produce this bitfield in order for the generated transaction to be considered standard and relayed by upgraded nodes.

    This change is currently not scheduled for consensus enforcement, but eventually it will be as it is necessary in order to allow for batch validation of ECDSA signatures. For now it elimiates a source of witness malleability that presented a nuisance and possible DoS vector. Eventually soft-fork logic will be added to a future release once it is observed that most if not all wallets are producing conformant transactions.

    Implications for miners: No special action is required. Transactions which violate this rule will be rejected and not enter into your mempool, if you run with the default policy settings.

    Implications for users: In order to have your transactions relayed and reliably included in a block, your wallet must create the skipped key bitfield parameter for multisig scripts. The reference Freicoin wallet has been updated to generate these values. If your third party wallet software does not create conformant transactions, you may have Freicoin generate this value for you by passing the already-signed transaction through the `signrawtransaction` RPC, which will inject the proper skipped key bitfield when it re-serializes the scriptSig in its internal "combine signatures" step. Note that this necessarily malleates the transaction, changing its txid and invalidating any pre-signed dependent transactions.

    Finally, it is possible, though very unlikely, that someone out there has outputs controlled by a P2SH redeem script written in such a way as to require passing an invalid signature to a non-verify CHECKSIG (e.g. because the output of the CHECKSIG is then used as a branching condition), or by a multisig script where the dummy value is injected by the scriptPubKey or redeem script. If you know this applies to you, then you are encouraged in the strongest possible terms to move your funds to new scripts as quickly as possible. Once it is observed that people making regular transactions have upgraded, a soft fork to add SCRIPT_VERIFY_REQUIRE_VALID_SIGS to the consensus rules will be scheduled, which will make your funds permanently inaccessible. (If you are not sure if this applies to you, then it almost certainly does not. The development team's prior expectation is that nobody is using scripts in such a way as to have their funds permanently inaccessible as a result of this change, and they would only be doing so as a result of a conscious choice.)

    If you believe you are affected by these changes and are not able to move your funds, please contact the development team, e.g. by filing an issue on our issue tracker, or by email if your situation requires discretion.

    Signature validation using libsecp256k1

    ECDSA signatures inside Freicoin transactions are now validated with libsecp256k1 instead of OpenSSL.

    Depending on the platform, this means a significant speedup for raw signature validation speed. The advantage is largest on x86_64, where validation is over five times faster. In practice, this translates to a raw reindexing and new block validation times that are less than half of what it was before.

    Libsecp256k1 has undergone very extensive testing and validation.

    A side effect of this change is that libconsensus no longer depends on OpenSSL.

    Block file and undo file size

    v10 introduced the time-delayed protocol-cleanup rule change, which required increasing the maximum block file size from 128 MB to nearly 2GB. This setting controls the size of the blk*.dat and rev*.dat files in the `blocks` subdirectory of the Freicoin data directory. Starting in v12, the original 128 MB limit is restored until the protocol cleanup rule change activates.

    Existing files will not be rewritten, however, so if you were at any point running a v10 or v11 client prior to 2 April 2021 you may have some historical block chain data files that are larger than 128 MB. This will not interfere with normal operation of your client. Should you wish to split these files up you will need to shutdown your node, delete the `blocks` subdirectory, and restart your node to re-download and re-index the block chain.

    Reduce upload traffic

    A major part of the outbound traffic is caused by serving historic blocks to other nodes in initial block download state.

    It is now possible to reduce the total upload traffic via the `-maxuploadtarget` parameter. This is *not* a hard limit but a threshold to minimize the outbound traffic. When the limit is about to be reached, the uploaded data is cut by not serving historic blocks (blocks older than one week). Moreover, any SPV peer is disconnected when they request a filtered block.

    This option can be specified in MiB per day and is turned off by default (`-maxuploadtarget=0`). The recommended minimum is 144 * MAX_BLOCK_SIZE (currently 144MB) per day.

    Whitelisted peers will never be disconnected, although their traffic counts for calculating the target.

    A more detailed documentation about keeping traffic low can be found in https://github.com/tradecraftio/tradecraft/blob/devel/doc/reduce-traffic.md.

    Direct headers announcement (BIP130)

    Between compatible peers, BIP130 direct headers announcement is used. This means that blocks are advertised by announcing their headers directly, instead of just announcing the hash. In a reorganization, all new headers are sent, instead of just the new tip. This can often prevent an extra roundtrip before the actual block is downloaded.

    With this change, pruning nodes are now able to relay new blocks to compatible peers.

    Memory pool limiting

    Previous versions of Freicoin had their mempool limited by checking a transaction's fees against the node's minimum relay fee. There was no upper bound on the size of the mempool and attackers could send a large number of transactions paying just slightly more than the default minimum relay fee to crash nodes with relatively low RAM. A temporary workaround for previous versions of Freicoin was to raise the default minimum relay fee.

    Freicoin v12 has a strict maximum size on the mempool. The default value is 300 MB and can be configured with the `-maxmempool` parameter. Whenever a transaction would cause the mempool to exceed its maximum size, the transaction that (along with in-mempool descendants) has the lowest total feerate (as a package) will be evicted and the node's effective minimum relay feerate will be increased to match this feerate plus the initial minimum relay feerate. The initial minimum relay feerate is set to 1000 kria per kB.

    Freicoin v12 also introduces new default policy limits on the length and size of unconfirmed transaction chains that are allowed in the mempool (generally limiting the length of unconfirmed chains to 25 transactions, with a total size of 101 KB).  These limits can be overriden using command line arguments; see the extended help (`--help -help-debug`) for more information.

    Replace-by-fee transaction semantics

    Freicoin v12 introduces replace-by-fee transaction semantics, where one or more transactions in the mempool can be replaced by a conflicting transaction that pays a greater amount of fee.  The criteria for replacing transactions is at this time unchanged from bitcoin's BIP125, except that ALL transactions are treated as having explicit replace-by-fee semantics regardless of whether it has any non-final inputs.  Namely,

    One or more transactions currently in the mempool (original transactions) will be replaced by a new transaction (replacement transaction) that spends one or more of the same inputs if,

    1. (Rule #1 of BIP125 having to do with opt-in replace-by-signaling has been removed.  All transactions are treated as replaceable.)
       
    2. The replacement transaction may only include an unconfirmed input if that input was included in one of the original transactions. (An unconfirmed input spends an output from a currently-unconfirmed transaction.)
       
    3. The replacement transaction pays an absolute fee of at least the sum paid by the original transactions.
       
    4. The replacement transaction must also pay for its own bandwidth at or above the rate set by the node's minimum relay fee setting.  For example, if the minimum relay fee is 1 kria/byte and the replacement transaction is 500 bytes total, then the replacement must pay a fee at least 500 kria higher than the sum of the originals.
       
    5. The number of original transactions to be replaced and their descendant transactions which will be evicted from the mempool must not exceed a total of 100 transactions.

    Be advised that the Freicoin development team is looking into altering these rules further in future releases.  Specifically, changes currently under consideration for future releases include:

    1. Batch replace-by-fee semantics in which potentially many replacement transactions are considered for simultaneous RBF replacement.  This would allow a child transaction to provide the necessary fee to cover replacement of its unconfirmed and conflicting parent.

      This would necessarily have to be accompanied by batch transaction relay, where more than one transaction are relayed together at the network layer and processed as a group, in instances where the dependent transaction(s) pay higher fee rate than the parent.
       
    2. Strict fee-rate instead of absolute-fee consideration.  The BIP125 rules for transaction replacement are not incentive aligned with miners in a blocks-always-full regime, who have incentives structured to make them care more about fee rate than absolute fee.

    No mechanims is provided for disabling transaction replacement.  Should you wish to keep a transaction from being replaced in your own mempool, the `prioritisetransaction` RPC allows assigning a transaction an additional, fake fee with which to bias the replace-by-fee calculation.

    Implication for miners: you don't need to do anything.  Your Freicoin node will automatically eject lower-fee transactions from its mempool in favor of transactions paying sufficiently higher fee, and the blocks you mine using block templates generated by your node will automatically include the transactions from your mempool paying the highest fees. Should you wish to keep a transaction from being replaced in your own mempool, and therefore chosen over conflicting transactions in blocks that you mine, you should make use of the `prioritisetransaction` RPC.

    Implication for users: transactions involving any outputs you do not have sole spending authority over should not be considered trusted until they have received a sufficient number of block confirmations.  This was true before, but is even more relevant now.  All transactions are considered replaceable, so there is nothing you or your wallet needs to do to signal this capability.

    Note that the graphical wallet in Freicoin v12 does not yet have support for creating transactions which conflict with known wallet transactions for the purpose of triggering mempool replacement.  Such transactions can be generated with the JSON-RPC interface however, and the wallet will display details of conflicting transactions it does know about.

    [BIP125]: https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki

    RPC: Random-cookie RPC authentication

    When no `-rpcpassword` is specified, the daemon now uses a special 'cookie' file for authentication. This file is generated with random content when the daemon starts, and deleted when it exits. Its contents are used as authentication token. Read access to this file controls who can access through RPC. By default it is stored in the data directory but its location can be overridden with the option `-rpccookiefile`.

    This is similar to Tor's CookieAuthentication: see https://www.torproject.org/docs/tor-manual.html.en

    This allows running freicoind without having to do any manual configuration.

    Relay and Mining: Priority transactions

    Freicoin has a heuristic 'priority' based on coin value and age. This calculation is used for relaying of transactions which do not pay the minimum relay fee, and can be used as an alternative way of sorting transactions for mined blocks. Freicoin will relay transactions with insufficient fees depending on the setting of `-limitfreerelay=<r>` (default: `r=15` kB per minute) and `-blockprioritysize=<s>` (default `s=25000` or 25kB).

    In Freicoin v12, when mempool limit has been reached a higher minimum relay fee takes effect to limit memory usage. Transactions which do not meet this higher effective minimum relay fee will not be relayed or mined even if they rank highly according to the priority heuristic.

    Additionally, as a result of computational simplifications, the priority value used for transactions received with unconfirmed inputs is lower than in prior versions due to avoiding recomputing the amounts as input transactions confirm.

    External miner policy set via the `prioritisetransaction` RPC to rank transactions already in the mempool continues to work as it has previously.  Note, however, that if mining priority transactions is left disabled, the priority delta will be ignored and only the fee metric will be effective.

    This internal automatic prioritization handling is being considered for removal entirely in future Freicoin releases, and the more accurate priority calculation for chained unconfirmed transactions will be restored in Freicoin v13.

    Automatically use Tor hidden services

    Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket API, to create and destroy 'ephemeral' hidden services programmatically. Freicoin has been updated to make use of this.

    This means that if Tor is running (and proper authorization is available), Freicoin automatically creates a hidden service to listen on, without manual configuration. Freicoin will also use Tor automatically to connect to other .onion nodes if the control socket can be successfully opened. This will positively affect the number of available .onion nodes and their usage.

    This new feature is enabled by default if Freicoin is listening, and a connection to Tor can be made. It can be configured with the `-listenonion`, `-torcontrol` and `-torpassword` settings. To show verbose debugging information, pass `-debug=tor`.

    Notifications through ZMQ

    freicoind can now (optionally) asynchronously notify clients through a ZMQ-based PUB socket of the arrival of new transactions and blocks. This feature requires installation of the ZMQ C API library 4.x and configuring its use through the command line or configuration file. Please see [docs/zmq.md](/doc/zmq.md) for details of operation.

    Wallet: Transaction fees

    Various improvements have been made to how the wallet calculates transaction fees.

    Users can decide to pay a predefined fee rate by setting `-paytxfee=<n>` (or `settxfee <n>` rpc during runtime). A value of `n=0` signals Freicoin to use floating fees. By default, Freicoin will use floating fees.

    Based on past transaction data, floating fees approximate the fees required to get into the `m`th block from now. This is configurable with `-txconfirmtarget=<m>` (default: `2`).

    Sometimes, it is not possible to give good estimates, or an estimate at all. Therefore, a fallback value can be set with `-fallbackfee=<f>` (default: `0.0002` FRC/kB).

    At all times, Freicoin will cap fees at `-maxtxfee=<x>` (default: 0.10) FRC.  Furthermore, Freicoin will never create transactions paying less than the current minimum relay fee.  Finally, a user can set the minimum fee rate for all transactions with `-mintxfee=<i>`, which defaults to 1000 kria per kB.

    Wallet: Negative confirmations and conflict detection

    The wallet will now report a negative number for confirmations that indicates how deep in the block chain the conflict is found. For example, if a transaction A has 5 confirmations and spends the same input as a wallet transaction B, B will be reported as having -5 confirmations. If another wallet transaction C spends an output from B, it will also be reported as having -5 confirmations.  To detect conflicts with historical transactions in the chain a one-time `-rescan` may be needed.

    Unlike earlier versions, unconfirmed but non-conflicting transactions will never get a negative confirmation count. They are not treated as spendable unless they're coming from ourself (change) and accepted into our local mempool, however. The new "trusted" field in the `listtransactions` RPC output indicates whether outputs of an unconfirmed transaction are considered spendable.

    Wallet: Merkle branches removed

    Previously, every wallet transaction stored a Merkle branch to prove its presence in blocks. This wasn't being used for more than an expensive sanity check. Since v12, these are no longer stored. When loading a v12 wallet into an older version, it will automatically rescan to avoid failed checks.

    Wallet: Pruning

    With v12 it is possible to use wallet functionality in pruned mode.  This currently does not affect disk usage, but does limit future disk usage to around 1 GB as extrapolated from current numbers.  However, rescans as well as the RPCs `importwallet`, `importaddress`, `importprivkey` are disabled.

    To enable block pruning set `prune=<N>` on the command line or in `freicoin.conf`, where `N` is the number of MiB to allot for raw block & undo data.

    A value of 0 disables pruning. The minimal value above 0 is 550. Your wallet is as secure with high values as it is with low ones. Higher values merely ensure that your node will not shut down upon blockchain reorganizations of more than 2 days - which are unlikely to happen in practice. In future releases, a higher value may also help the network as a whole: stored blocks could be served to other nodes.

    For further information about pruning, you may also consult the release notes of v11.3.

    `NODE_BLOOM` service bit

    Support for the `NODE_BLOOM` service bit, as described in BIP111, has been added to the P2P protocol code.

    BIP 111 defines a service bit to allow peers to advertise that they support bloom filters (such as used by SPV clients) explicitly. It also bumps the protocol version to allow peers to identify old nodes which allow bloom filtering of the connection despite lacking the new service bit.

    In this version, it is only enforced for peers that send protocol versions `>=70011`. For the next major version it is planned that this restriction will be removed. It is recommended to update SPV clients to check for the `NODE_BLOOM` service bit for nodes that report versions newer than 70011.

    Option parsing behavior

    Command line options are now parsed strictly in the order in which they are specified. It used to be the case that `-X -noX` ends up, unintuitively, with X set, as `-X` had precedence over `-noX`. This is no longer the case. Like for other software, the last specified value for an option will hold.

    RPC: Low-level API changes

    • Monetary amounts can be provided as strings. This means that for example the argument to sendtoaddress can be "0.0001" instead of 0.0001. This can be an advantage if a JSON library insists on using a lossy floating point type for numbers, which would be dangerous for monetary amounts.
       
    • The `asm` property of each scriptSig now contains the decoded signature hash type for each signature that provides a valid defined hash type.
       
    • NOP2 has been renamed to CHECKLOCKTIMEVERIFY by BIP65
       
    • NOP3 has been renamed to CHECKSEQUENCEVERIFY by BIP112

    The following items contain assembly representations of scriptSig signatures and are affected by this change:

    • RPC `getrawtransaction`
    • RPC `decoderawtransaction`
    • RPC `decodescript`
    • REST `/rest/tx/` (JSON format)
    • REST `/rest/block/` (JSON format when including extended tx details)
    • `freicoin-tx -json`

    For example, the `scriptSig.asm` property of a transaction input that previously showed an assembly representation of:

    304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001 400000 NOP2
    

    now shows as:

    304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL] 400000 CHECKLOCKTIMEVERIFY
    

    Note that the output of the RPC `decodescript` did not change because it is configured specifically to process scriptPubKey and not scriptSig scripts.

    RPC: SSL support dropped

    SSL support for RPC, previously enabled by the option `rpcssl` has been dropped from both the client and the server. This was done in preparation for removing the dependency on OpenSSL for the daemon completely.

    Trying to use `rpcssl` will result in an error:

        Error: SSL mode for RPC (-rpcssl) is no longer supported.

    If you are one of the few people that relies on this feature, a flexible migration path is to use `stunnel`. This is an utility that can tunnel arbitrary TCP connections inside SSL. On e.g. Ubuntu it can be installed with:

        sudo apt-get install stunnel4

    Then, to tunnel a SSL connection on 28638 to a RPC server bound on localhost on port 18638 do:

        stunnel -d 28638 -r 127.0.0.1:18638 -p stunnel.pem -P ''

    It can also be set up system-wide in inetd style.

    Another way to re-attain SSL would be to setup a httpd reverse proxy. This solution would allow the use of different authentication, load-balancing, on-the-fly compression and caching. A sample config for apache2 could look like:

        Listen 443
    
        NameVirtualHost *:443
        <VirtualHost *:443>
    
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/server.crt
        SSLCertificateKeyFile /etc/apache2/ssl/server.key
    
        <Location /freicoinrpc>
            ProxyPass http://127.0.0.1:8638/
            ProxyPassReverse http://127.0.0.1:8638/
            # optional enable digest auth
            # AuthType Digest
            # ...
    
            # optional bypass freicoind rpc basic auth
            # RequestHeader set Authorization "Basic <hash>"
            # get the <hash> from the shell with: base64 <<< freicoinrpc:<password>
        </Location>
    
        # Or, balance the load:
        # ProxyPass / balancer://balancer_cluster_name
    
        </VirtualHost>
    

    Mining Code Changes

    The mining code in v12 has been optimized to be significantly faster and use less memory. As part of these changes, consensus critical calculations are cached on a transaction's acceptance into the mempool and the mining code now relies on the consistency of the mempool to assemble blocks. However all blocks are still tested for validity after assembly.

    Other P2P Changes

    The list of banned peers is now stored on disk rather than in memory. Restarting freicoind will no longer clear out the list of banned peers; instead a new RPC call (`clearbanned`) can be used to manually clear the list.  The new `setban` RPC call can also be used to manually ban or unban a peer.

    12.1-10123 Change Log

    Detailed release notes follow. This overview includes changes that affect behavior, not code moves, refactors and string updates. For convenience in locating the code changes and accompanying discussion, both the pull request and git merge commit are mentioned.

    RPC and REST

    • #6121 `466f0ea` Convert entire source tree from json_spirit to UniValue (Jonas Schnelli)
    • #6234 `d38cd47` fix rpcmining/getblocktemplate univalue transition logic error (Jonas Schnelli)
    • #6239 `643114f` Don't go through double in AmountFromValue and ValueFromAmount (Wladimir J. van der Laan)
    • #6266 `ebab5d3` Fix univalue handling of \u0000 characters. (Daniel Kraft)
    • #6276 `f3d4dbb` Fix getbalance * 0 (Tom Harding)
    • #6257 `5ebe7db` Add `paytxfee` and `errors` JSON fields where appropriate (Stephen)
    • #6271 `754aae5` New RPC command disconnectnode (Alex van der Peet)
    • #6158 `0abfa8a` Add setban/listbanned RPC commands (Jonas Schnelli)
    • #6307 `7ecdcd9` rpcban fixes (Jonas Schnelli)
    • #6290 `5753988` rpc: make `gettxoutsettinfo` run lock-free (Wladimir J. van der Laan)
    • #6262 `247b914` Return all available information via RPC call "validateaddress" (dexX7)
    • #6339 `c3f0490` UniValue: don't escape solidus, keep espacing of reverse solidus (Jonas Schnelli)
    • #6353 `6bcb0a2` Show softfork status in getblockchaininfo (Wladimir J. van der Laan)
    • #6247 `726e286` Add getblockheader RPC call (Peter Todd)
    • #6362 `d6db115` Fix null id in RPC response during startup (Forrest Voight)
    • #5486 `943b322` [REST] JSON support for /rest/headers (Jonas Schnelli)
    • #6379 `c52e8b3` rpc: Accept scientific notation for monetary amounts in JSON (Wladimir J. van der Laan)
    • #6388 `fd5dfda` rpc: Implement random-cookie based authentication (Wladimir J. van der Laan)
    • #6457 `3c923e8` Include pruned state in chaininfo.json (Simon Males)
    • #6456 `bfd807f` rpc: Avoid unnecessary parsing roundtrip in number formatting, fix locale issue (Wladimir J. van der Laan)
    • #6380 `240b30e` rpc: Accept strings in AmountFromValue (Wladimir J. van der Laan)
    • #6346 `6bb2805` Add OP_RETURN support in createrawtransaction RPC call, add tests. (paveljanik)
    • #6013 `6feeec1` [REST] Add memory pool API (paveljanik)
    • #6576 `da9beb2` Stop parsing JSON after first finished construct. (Daniel Kraft)
    • #5677 `9aa9099` libevent-based http server (Wladimir J. van der Laan)
    • #6633 `bbc2b39` Report minimum ping time in getpeerinfo (Matt Corallo)
    • #6648 `cd381d7` Simplify logic of REST request suffix parsing. (Daniel Kraft)
    • #6695 `5e21388` libevent http fixes (Wladimir J. van der Laan)
    • #5264 `48efbdb` show scriptSig signature hash types in transaction decodes. fixes #3166 (mruddy)
    • #6719 `1a9f19a` Make HTTP server shutdown more graceful (Wladimir J. van der Laan)
    • #6859 `0fbfc51` http: Restrict maximum size of http + headers (Wladimir J. van der Laan)
    • #5936 `bf7c195` [RPC] Add optional locktime to createrawtransaction (Tom Harding)
    • #6877 `26f5b34` rpc: Add maxmempool and effective min fee to getmempoolinfo (Wladimir J. van der Laan)
    • #6970 `92701b3` Fix crash in validateaddress with -disablewallet (Wladimir J. van der Laan)
    • #5574 `755b4ba` Expose GUI labels in RPC as comments (Luke-Jr)
    • #6990 `dbd2c13` http: speed up shutdown (Wladimir J. van der Laan)
    • #7013 `36baa9f` Remove LOCK(cs_main) from decodescript (Peter Todd)
    • #6999 `972bf9c` add (max)uploadtarget infos to getnettotals RPC help (Jonas Schnelli)
    • #7011 `31de241` Add mediantime to getblockchaininfo (Peter Todd)
    • #7065 `f91e29f` http: add Boost 1.49 compatibility (Wladimir J. van der Laan)
    • #7087 `be281d8` [Net]Add -enforcenodebloom option (Patrick Strateman)
    • #7044 `438ee59` RPC: Added additional config option for multiple RPC users. (Gregory Sanders)
    • #7072 `c143c49` [RPC] Add transaction size to JSON output (Nikita Zhavoronkov)
    • #7022 `9afbd96` Change default block priority size to 0 (Alex Morcos)
    • #7141 `c0c08c7` rpc: Don't translate warning messages (Wladimir J. van der Laan)
    • #7312 `fd4bd50` Add RPC call abandontransaction (Alex Morcos)
    • #7222 `e25b158` RPC: indicate which transactions are replaceable (Suhas Daftuar)
    • #7472 `b2f2b85` rpc: Add WWW-Authenticate header to 401 response (Wladimir J. van der Laan)
    • #7469 `9cb31e6` net.h fix spelling: misbeha{b,v}ing (Matt)
    • #7739 `7ffc2bd` Add abandoned status to listtransactions (jonasschnelli)

    Configuration and command-line options

    • #6164 `8d05ec7` Allow user to use -debug=1 to enable all debugging (lpescher)
    • #5288 `4452205` Added `-whiteconnections=<n>` option (Josh Lehan)
    • #6284 `10ac38e` Fix argument parsing oddity with -noX (Wladimir J. van der Laan)
    • #6489 `c9c017a` Give a better error message if system clock is bad (Casey Rodarmor)
    • #6462 `c384800` implement uacomment config parameter which can add comments to user agent as per BIP-0014 (Pavol Rusnak)
    • #6647 `a3babc8` Sanitize uacomment (MarcoFalke)
    • #6742 `3b2d37c` Changed logging to make -logtimestamps to work also for -printtoconsole (arnuschky)
    • #6846 `2cd020d` alias -h for -help (Daniel Cousens)
    • #6622 `7939164` Introduce -maxuploadtarget (Jonas Schnelli)
    • #6881 `2b62551` Debug: Add option for microsecond precision in debug.log (Suhas Daftuar)
    • #6776 `e06c14f` Support -checkmempool=N, which runs checks once every N transactions (Pieter Wuille)
    • #6896 `d482c0a` Make -checkmempool=1 not fail through int32 overflow (Pieter Wuille)
    • #6993 `b632145` Add -blocksonly option (Patrick Strateman)
    • #7323 `a344880` 0.12: Backport -bytespersigop option (Luke-Jr)
    • #7386 `da83ecd` Add option `-permitrbf` to set transaction replacement policy (Wladimir J. van der Laan)
    • #7290 `b16b5bc` Add missing options help (MarcoFalke)
    • #7440 `c76bfff` Rename permitrbf to mempoolreplacement and provide minimal string-list forward compatibility (Luke-Jr)

    Block and transaction handling

    • #6203 `f00b623` Remove P2SH coinbase flag, no longer interesting (Luke-Jr)
    • #6222 `9c93ee5` Explicitly set tx.nVersion for the genesis block and mining tests (Mark Friedenbach)
    • #5985 `3a1d3e8` Fix removing of orphan transactions (Alex Morcos)
    • #6221 `dd8fe82` Prune: Support noncontiguous block files (Adam Weiss)
    • #6124 `41076aa` Mempool only CHECKLOCKTIMEVERIFY (BIP65) verification, unparameterized version (Peter Todd)
    • #6329 `d0a10c1` acceptnonstdtxn option to skip (most) "non-standard transaction" checks, for testnet/regtest only (Luke-Jr)
    • #6410 `7cdefb9` Implement accurate memory accounting for mempool (Pieter Wuille)
    • #6444 `24ce77d` Exempt unspendable transaction outputs from dust checks (dexX7)
    • #5913 `a0625b8` Add absurdly high fee message to validation state (Shaul Kfir)
    • #6177 `2f746c6` Prevent block.nTime from decreasing (Mark Friedenbach)
    • #6377 `e545371` Handle no chain tip available in InvalidChainFound() (Ross Nicoll)
    • #6551 `39ddaeb` Handle leveldb::DestroyDB() errors on wipe failure (Adam Weiss)
    • #6654 `b0ce450` Mempool package tracking (Suhas Daftuar)
    • #6715 `82d2aef` Fix mempool packages (Suhas Daftuar)
    • #6680 `4f44530` use CBlockIndex instead of uint256 for UpdatedBlockTip signal (Jonas Schnelli)
    • #6650 `4fac576` Obfuscate chainstate (James O'Beirne)
    • #6777 `9caaf6e` Unobfuscate chainstate data in CCoinsViewDB::GetStats (James O'Beirne)
    • #6722 `3b20e23` Limit mempool by throwing away the cheapest txn and setting min relay fee to it (Matt Corallo)
    • #6889 `38369dd` fix locking issue with new mempool limiting (Jonas Schnelli)
    • #6464 `8f3b3cd` Always clean up manual transaction prioritization (Casey Rodarmor)
    • #6865 `d0badb9` Fix chainstate serialized_size computation (Pieter Wuille)
    • #6566 `ff057f4` BIP-113: Mempool-only median time-past as endpoint for lock-time calculations (Mark Friedenbach)
    • #6934 `3038eb6` Restores mempool only BIP113 enforcement (Gregory Maxwell)
    • #6965 `de7d459` Benchmark sanity checks and fork checks in ConnectBlock (Matt Corallo)
    • #6918 `eb6172a` Make sigcache faster, more efficient, larger (Pieter Wuille)
    • #6771 `38ed190` Policy: Lower default limits for tx chains (Alex Morcos)
    • #6932 `73fa5e6` ModifyNewCoins saves database lookups (Alex Morcos)
    • #5967 `05d5918` Alter assumptions in CCoinsViewCache::BatchWrite (Alex Morcos)
    • #6871 `0e93586` nSequence-based Full-RBF opt-in (Peter Todd)
    • #7008 `eb77416` Lower bound priority (Alex Morcos)
    • #6915 `2ef5ffa` [Mempool] Improve removal of invalid transactions after reorgs (Suhas Daftuar)
    • #6898 `4077ad2` Rewrite CreateNewBlock (Alex Morcos)
    • #6872 `bdda4d5` Remove UTXO cache entries when the tx they were added for is removed/does not enter mempool (Matt Corallo)
    • #7062 `12c469b` [Mempool] Fix mempool limiting and replace-by-fee for PrioritiseTransaction (Suhas Daftuar)
    • #7276 `76de36f` Report non-mandatory script failures correctly (Pieter Wuille)
    • #7217 `e08b7cb` Mark blocks with too many sigops as failed (Suhas Daftuar)
    • #7387 `f4b2ce8` Get rid of inaccurate ScriptSigArgsExpected (Pieter Wuille)
    • #7543 `834aaef` Backport BIP9, BIP68 and BIP112 with softfork (btcdrak)

    P2P protocol and network code

    • #6172 `88a7ead` Ignore getheaders requests when not synced (Suhas Daftuar)
    • #5875 `9d60602` Be stricter in processing unrequested blocks (Suhas Daftuar)
    • #6256 `8ccc07c` Use best header chain timestamps to detect partitioning (Gavin Andresen)
    • #6283 `a903ad7` make CAddrMan::size() return the correct type of size_t (Diapolo)
    • #6272 `40400d5` Improve proxy initialization (continues #4871) (Wladimir J. van der Laan, Diapolo)
    • #6310 `66e5465` banlist.dat: store banlist on disk (Jonas Schnelli)
    • #6412 `1a2de32` Test whether created sockets are select()able (Pieter Wuille)
    • #6498 `219b916` Keep track of recently rejected transactions with a rolling bloom filter (cont'd) (Peter Todd)
    • #6556 `70ec975` Fix masking of irrelevant bits in address groups. (Alex Morcos)
    • #6530 `ea19c2b` Improve addrman Select() performance when buckets are nearly empty (Pieter Wuille)
    • #6583 `af9305a` add support for miniupnpc api version 14 (Pavel Vasin)
    • #6374 `69dc5b5` Connection slot exhaustion DoS mitigation (Patrick Strateman)
    • #6636 `536207f` net: correctly initialize nMinPingUsecTime (Wladimir J. van der Laan)
    • #6579 `0c27795` Add NODE_BLOOM service bit and bump protocol version (Matt Corallo)
    • #6148 `999c8be` Relay blocks when pruning (Suhas Daftuar)
    • #6588 `cf9bb11` In (strCommand == "tx"), return if AlreadyHave() (Tom Harding)
    • #6974 `2f71b07` Always allow getheaders from whitelisted peers (Wladimir J. van der Laan)
    • #6639 `bd629d7` net: Automatically create hidden service, listen on Tor (Wladimir J. van der Laan)
    • #6984 `9ffc687` don't enforce maxuploadtarget's disconnect for whitelisted peers (Jonas Schnelli)
    • #7046 `c322652` Net: Improve blocks only mode. (Patrick Strateman)
    • #7090 `d6454f6` Connect to Tor hidden services by default (when listening on Tor) (Peter Todd)
    • #7106 `c894fbb` Fix and improve relay from whitelisted peers (Pieter Wuille)
    • #7129 `5d5ef3a` Direct headers announcement (rebase of #6494) (Pieter Wuille)
    • #7079 `1b5118b` Prevent peer flooding inv request queue (redux) (redux) (Gregory Maxwell)
    • #7166 `6ba25d2` Disconnect on mempool requests from peers when over the upload limit. (Gregory Maxwell)
    • #7133 `f31955d` Replace setInventoryKnown with a rolling bloom filter (rebase of #7100) (Pieter Wuille)
    • #7174 `82aff88` Don't do mempool lookups for "mempool" command without a filter (Matt Corallo)
    • #7179 `44fef99` net: Fix sent reject messages for blocks and transactions (Wladimir J. van der Laan)
    • #7181 `8fc174a` net: Add and document network messages in protocol.h (Wladimir J. van der Laan)
    • #7125 `10b88be` Replace global trickle node with random delays (Pieter Wuille)
    • #7415 `cb83beb` net: Hardcoded seeds update January 2016 (Wladimir J. van der Laan)
    • #7438 `e2d9a58` Do not absolutely protect local peers; decide group ties based on time (Gregory Maxwell)
    • #7439 `86755bc` Add whitelistforcerelay to control forced relaying. [#7099 redux] (Gregory Maxwell)
    • #7482 `e16f5b4` Ensure headers count is correct (Suhas Daftuar)
    • #7804 `90f1d24` Track block download times per individual block (sipa)
    • #7832 `4c3a00d` Reduce block timeout to 10 minutes (laanwj)

    Validation

    • #5927 `8d9f0a6` Reduce checkpoints' effect on consensus. (Pieter Wuille)
    • #6299 `24f2489` Bugfix: Don't check the genesis block header before accepting it (Jorge Timón)
    • #6361 `d7ada03` Use real number of cores for default -par, ignore virtual cores (Wladimir J. van der Laan)
    • #6519 `87f37e2` Make logging for validation optional (Wladimir J. van der Laan)
    • #6351 `2a1090d` CHECKLOCKTIMEVERIFY (BIP65) IsSuperMajority() soft-fork (Peter Todd)
    • #6931 `54e8bfe` Skip BIP 30 verification where not necessary (Alex Morcos)
    • #6954 `e54ebbf` Switch to libsecp256k1-based ECDSA validation (Pieter Wuille)
    • #6508 `61457c2` Switch to a constant-space Merkle root/branch algorithm. (Pieter Wuille)
    • #6914 `327291a` Add pre-allocated vector type and use it for CScript (Pieter Wuille)
    • #7500 `889e5b3` Correctly report high-S violations (Pieter Wuille)
    • #7821 `4226aac` init: allow shutdown during 'Activating best chain...' (laanwj)
    • #7835 `46898e7` Version 2 transactions remain non-standard until CSV activates (sdaftuar)

    Build system

    • #6210 `0e4f2a0` build: disable optional use of gmp in internal secp256k1 build (Wladimir J. van der Laan)
    • #6214 `87406aa` [OSX] revert renaming of Bitcoin-Qt.app and use CFBundleDisplayName (partial revert of #6116) (Jonas Schnelli)
    • #6218 `9d67b10` build/gitian misc updates (Cory Fields)
    • #6269 `d4565b6` gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures (Cory Fields)
    • #6418 `d4a910c` Add autogen.sh to source tarball. (randy-waterhouse)
    • #6373 `1ae3196` depends: non-qt bumps for 0.12 (Cory Fields)
    • #6434 `059b352` Preserve user-passed CXXFLAGS with --enable-debug (Gavin Andresen)
    • #6501 `fee6554` Misc build fixes (Cory Fields)
    • #6600 `ef4945f` Include bitcoin-tx binary on Debian/Ubuntu (Zak Wilcox)
    • #6619 `4862708` depends: bump miniupnpc and ccache (Michael Ford)
    • #6801 `ae69a75` [depends] Latest config.guess and config.sub (Michael Ford)
    • #6938 `193f7b5` build: If both Qt4 and Qt5 are installed, use Qt5 (Wladimir J. van der Laan)
    • #7092 `348b281` build: Set osx permissions in the dmg to make Gatekeeper happy (Cory Fields)
    • #6980 `eccd671` [Depends] Bump Boost, miniupnpc, ccache & zeromq (Michael Ford)
    • #7424 `aa26ee0` Add security/export checks to gitian and fix current failures (Cory Fields)
    • #7487 `00d57b4` Workaround Travis-side CI issues (luke-jr)
    • #7606 `a10da9a` No need to set -L and --location for curl (MarcoFalke)
    • #7614 `ca8f160` Add curl to packages (now needed for depends) (luke-jr)
    • #7776 `a784675` Remove unnecessary executables from gitian release (laanwj)

    Wallet

    • #6183 `87550ee` Fix off-by-one error w/ nLockTime in the wallet (Peter Todd)
    • #6057 `ac5476e` re-enable wallet in autoprune (Jonas Schnelli)
    • #6356 `9e6c33b` Delay initial pruning until after wallet init (Adam Weiss)
    • #6088 `91389e5` fundrawtransaction (Matt Corallo)
    • #6415 `ddd8d80` Implement watchonly support in fundrawtransaction (Matt Corallo)
    • #6567 `0f0f323` Fix crash when mining with empty keypool. (Daniel Kraft)
    • #6688 `4939eab` Fix locking in GetTransaction. (Alex Morcos)
    • #6645 `4dbd43e` Enable wallet key imports without rescan in pruned mode. (Gregory Maxwell)
    • #6550 `5b77244` Do not store Merkle branches in the wallet. (Pieter Wuille)
    • #5924 `12a7712` Clean up change computation in CreateTransaction. (Daniel Kraft)
    • #6906 `48b5b84` Reject invalid pubkeys when reading ckey items from the wallet. (Gregory Maxwell)
    • #7010 `e0a5ef8` Fix fundrawtransaction handling of includeWatching (Peter Todd)
    • #6851 `616d61b` Optimisation: Store transaction list order in memory rather than compute it every need (Luke-Jr)
    • #6134 `e92377f` Improve usage of fee estimation code (Alex Morcos)
    • #7103 `a775182` [wallet, rpc tests] Fix settxfee, paytxfee (MarcoFalke)
    • #7105 `30c2d8c` Keep track of explicit wallet conflicts instead of using mempool (Pieter Wuille)
    • #7096 `9490bd7` [Wallet] Improve minimum absolute fee GUI options (Jonas Schnelli)
    • #6216 `83f06ca` Take the training wheels off anti-fee-sniping (Peter Todd)
    • #4906 `96e8d12` Issue#1643: Coinselection prunes extraneous inputs from ApproximateBestSubset (Murch)
    • #7200 `06c6a58` Checks for null data transaction before issuing error to debug.log (Andy Craze)
    • #7296 `a36d79b` Add sane fallback for fee estimation (Alex Morcos)
    • #7293 `ff9b610` Add regression test for vValue sort order (MarcoFalke)
    • #7306 `4707797` Make sure conflicted wallet tx's update balances (Alex Morcos)
    • #7381 `621bbd8` [walletdb] Fix syntax error in key parser (MarcoFalke)
    • #7491 `00ec73e` wallet: Ignore MarkConflict if block hash is not known (Wladimir J. van der Laan)
    • #7502 `1329963` Update the wallet best block marker before pruning (Pieter Wuille)
    • #7715 `19866c1` Fix calculation of balances and available coins. (morcos)

    GUI

    • #6217 `c57e12a` disconnect peers from peers tab via context menu (Diapolo)
    • #6209 `ab0ec67` extend rpc console peers tab (Diapolo)
    • #6484 `1369d69` use CHashWriter also in SignVerifyMessageDialog (Pavel Vasin)
    • #6487 `9848d42` Introduce PlatformStyle (Wladimir J. van der Laan)
    • #6505 `100c9d3` cleanup icons (MarcoFalke)
    • #4587 `0c465f5` allow users to set -onion via GUI (Diapolo)
    • #6529 `c0f66ce` show client user agent in debug window (Diapolo)
    • #6594 `878ea69` Disallow duplicate windows. (Casey Rodarmor)
    • #5665 `6f55cdd` add verifySize() function to PaymentServer (Diapolo)
    • #6317 `ca5e2a1` minor optimisations in peertablemodel (Diapolo)
    • #6315 `e59d2a8` allow banning and unbanning over UI->peers table (Jonas Schnelli)
    • #6653 `e04b2fa` Pop debug window in foreground when opened twice (MarcoFalke)
    • #6864 `c702521` Use monospace font (MarcoFalke)
    • #6887 `3694b74` Update coin control and smartfee labels (MarcoFalke)
    • #7000 `814697c` add shortcurts for debug-/console-window (Jonas Schnelli)
    • #6951 `03403d8` Use maxTxFee instead of 10000000 (MarcoFalke)
    • #7051 `a190777` ui: Add "Copy raw transaction data" to transaction list context menu (Wladimir J. van der Laan)
    • #6979 `776848a` simple mempool info in debug window (Jonas Schnelli)
    • #7006 `26af1ac` add startup option to reset Qt settings (Jonas Schnelli)
    • #6780 `2a94cd6` Call init's parameter interaction before we create the UI options model (Jonas Schnelli)
    • #7112 `96b8025` reduce cs_main locks during tip update, more fluently update UI (Jonas Schnelli)
    • #7206 `f43c2f9` Add "NODE_BLOOM" to guiutil so that peers don't get UNKNOWN[4] (Matt Corallo)
    • #7282 `5cadf3e` fix coincontrol update issue when deleting a send coins entry (Jonas Schnelli)
    • #7319 `1320300` Intro: Display required space (MarcoFalke)
    • #7318 `9265e89` quickfix for RPC timer interface problem (Jonas Schnelli)
    • #7327 `b16b5bc` [Wallet] Transaction View: LastMonth calculation fixed (crowning-)
    • #7364 `7726c48` [qt] Windows: Make rpcconsole monospace font larger (MarcoFalke)
    • #7384 `294f432` [qt] Peertable: Increase SUBVERSION_COLUMN_WIDTH (MarcoFalke)

    Tests and QA

    • #6305 `9005c91` build: comparison tool swap (Cory Fields)
    • #6318 `e307e13` build: comparison tool NPE fix (Cory Fields)
    • #6337 `0564c5b` Testing infrastructure: mocktime fixes (Gavin Andresen)
    • #6350 `60abba1` add unit tests for the decodescript rpc (mruddy)
    • #5881 `3203a08` Fix and improve txn_doublespend.py test (Tom Harding)
    • #6390 `6a73d66` tests: Fix bitcoin-tx signing test case (Wladimir J. van der Laan)
    • #6368 `7fc25c2` CLTV: Add more tests to improve coverage (Esteban Ordano)
    • #6414 `5121c68` Fix intermittent test failure, reduce test time (Tom Harding)
    • #6417 `44fa82d` [QA] fix possible reorg issue in (fund)rawtransaction(s).py RPC test (Jonas Schnelli)
    • #6398 `3d9362d` rpc: Remove chain-specific RequireRPCPassword (Wladimir J. van der Laan)
    • #6428 `bb59e78` tests: Remove old sh-based test framework (Wladimir J. van der Laan)
    • #5515 `d946e9a` RFC: Assert on probable deadlocks if the second lock isnt try_lock (Matt Corallo)
    • #6287 `d2464df` Clang lock debug (Cory Fields)
    • #6465 `410fd74` Don't share objects between TestInstances (Casey Rodarmor)
    • #6534 `6c1c7fd` Fix test locking issues and un-revert the probable-deadlines assertions commit (Cory Fields)
    • #6509 `bb4faee` Fix race condition on test node shutdown (Casey Rodarmor)
    • #6523 `561f8af` Add p2p-fullblocktest.py (Casey Rodarmor)
    • #6590 `981fd92` Fix stale socket rebinding and re-enable python tests for Windows (Cory Fields)
    • #6730 `cb4d6d0` build: Remove dependency of bitcoin-cli on secp256k1 (Wladimir J. van der Laan)
    • #6616 `5ab5dca` Regression Tests: Migrated rpc-tests.sh to all Python rpc-tests.py (Peter Tschipper)
    • #6720 `d479311` Creates unittests for addrman, makes addrman more testable. (Ethan Heilman)
    • #6853 `c834f56` Added fPowNoRetargeting field to Consensus::Params (Eric Lombrozo)
    • #6827 `87e5539` [rpc-tests] Check return code (MarcoFalke)
    • #6848 `f2c869a` Add DERSIG transaction test cases (Ross Nicoll)
    • #6813 `5242bb3` Support gathering code coverage data for RPC tests with lcov (dexX7)
    • #6888 `c8322ff` Clear strMiscWarning before running PartitionAlert (Eric Lombrozo)
    • #6894 `2675276` [Tests] Fix BIP65 p2p test (Suhas Daftuar)
    • #6863 `725539e` [Test Suite] Fix test for null tx input (Daniel Kraft)
    • #6926 `a6d0d62` tests: Initialize networking on windows (Wladimir J. van der Laan)
    • #6822 `9fa54a1` [tests] Be more strict checking dust (MarcoFalke)
    • #6804 `5fcc14e` [tests] Add basic coverage reporting for RPC tests (James O'Beirne)
    • #7045 `72dccfc` Bugfix: Use unique autostart filenames on Linux for testnet/regtest (Luke-Jr)
    • #7095 `d8368a0` Replace scriptnum_test's normative ScriptNum implementation (Wladimir J. van der Laan)
    • #7063 `6abf6eb` [Tests] Add prioritisetransaction RPC test (Suhas Daftuar)
    • #7137 `16f4a6e` Tests: Explicitly set chain limits in replace-by-fee test (Suhas Daftuar)
    • #7216 `9572e49` Removed offline testnet DNSSeed 'alexykot.me'. (tnull)
    • #7209 `f3ad812` test: don't override BITCOIND and BITCOINCLI if they're set (Wladimir J. van der Laan)
    • #7226 `301f16a` Tests: Add more tests to p2p-fullblocktest (Suhas Daftuar)
    • #7153 `9ef7c54` [Tests] Add mempool_limit.py test (Jonas Schnelli)
    • #7170 `453c567` tests: Disable Tor interaction (Wladimir J. van der Laan)
    • #7229 `1ed938b` [qa] wallet: Check if maintenance changes the balance (MarcoFalke)
    • #7308 `d513405` [Tests] Eliminate intermittent failures in sendheaders.py (Suhas Daftuar)
    • #7468 `947c4ff` [rpc-tests] Change solve() to use rehash (Brad Andrews)

    Miscellaneous

    • #6213 `e54ff2f` [init] add -blockversion help and extend -upnp help (Diapolo)
    • #5975 `1fea667` Consensus: Decouple ContextualCheckBlockHeader from checkpoints (Jorge Timón)
    • #6061 `eba2f06` Separate Consensus::CheckTxInputs and GetSpendHeight in CheckInputs (Jorge Timón)
    • #5994 `786ed11` detach wallet from miner (Jonas Schnelli)
    • #6387 `11576a5` [bitcoin-cli] improve error output (Jonas Schnelli)
    • #6401 `6db53b4` Add BITCOIND_SIGTERM_TIMEOUT to OpenRC init scripts (Florian Schmaus)
    • #6430 `b01981e` doc: add documentation for shared library libbitcoinconsensus (Braydon Fuller)
    • #6372 `dcc495e` Update Linearize tool to support Windows paths; fix variable scope; update README and example configuration (Paul Georgiou)
    • #6453 `8fe5cce` Separate core memory usage computation in core_memusage.h (Pieter Wuille)
    • #6149 `633fe10` Buffer log messages and explicitly open logs (Adam Weiss)
    • #6488 `7cbed7f` Avoid leaking file descriptors in RegisterLoad (Casey Rodarmor)
    • #6497 `a2bf40d` Make sure LogPrintf strings are line-terminated (Wladimir J. van der Laan)
    • #6504 `b6fee6b` Rationalize currency unit to "BTC" (Ross Nicoll)
    • #6507 `9bb4dd8` Removed contrib/bitrpc (Casey Rodarmor)
    • #6527 `41d650f` Use unique name for AlertNotify tempfile (Casey Rodarmor)
    • #6561 `e08a7d9` limitedmap fixes and tests (Casey Rodarmor)
    • #6565 `a6f2aff` Make sure we re-acquire lock if a task throws (Casey Rodarmor)
    • #6599 `f4d88c4` Make sure LogPrint strings are line-terminated (Ross Nicoll)
    • #6630 `195942d` Replace boost::reverse_lock with our own (Casey Rodarmor)
    • #6103 `13b8282` Add ZeroMQ notifications (João Barbosa)
    • #6692 `d5d1d2e` devtools: don't push if signing fails in github-merge (Wladimir J. van der Laan)
    • #6728 `2b0567b` timedata: Prevent warning overkill (Wladimir J. van der Laan)
    • #6713 `f6ce59c` SanitizeString: Allow hypen char (MarcoFalke)
    • #5987 `4899a04` Bugfix: Fix testnet-in-a-box use case (Luke-Jr)
    • #6733 `b7d78fd` Simple benchmarking framework (Gavin Andresen)
    • #6854 `a092970` devtools: Add security-check.py (Wladimir J. van der Laan)
    • #6790 `fa1d252` devtools: add clang-format.py (MarcoFalke)
    • #7114 `f3d0fdd` util: Don't set strMiscWarning on every exception (Wladimir J. van der Laan)
    • #7078 `93e0514` uint256::GetCheapHash bigendian compatibility (arowser)
    • #7094 `34e02e0` Assert now > 0 in GetTime GetTimeMillis GetTimeMicros (Patrick Strateman)
    • #7617 `f04f4fd` Fix markdown syntax and line terminate LogPrint (MarcoFalke)
    • #7747 `4d035bc` added depends cross compile info (accraze)
    • #7741 `a0cea89` Mark p2p alert system as deprecated (btcdrak)
    • #7780 `c5f94f6` Disable bad-chain alert (btcdrak)

    Tradecraft pull requests

    #25 Add SCRIPT_VERIFY_REQUIRE_VALID_SIGS flag and make standard

    The SCRIPT_VERIFY_REQUIRE_VALID_SIGS enforces that every signature check passes when the signature field is non-empty (softfork safe, replaces BIP62 rule 7).  It is still possible for the non-VERIFY forms of CHECKSIG or CHECKMULTISIG to be executed and return false, but you MUST do so by passing in an empty (OP_0) signature. The way this is implemented is different for the two opcodes:

    CHECKSIG and CHECKSIGVERIFY will abort script validation with error code SCRIPT_ERR_FAILED_SIGNATURE_CHECK if the signature validation code returns false for any reason other than the passed-in signature being the empty.

    CHECKMULTISIG and CHECKMULTISIGVERIFY present a significant challenge to enforcing this requirement in that the original data format did not indicate which public keys were matched with which signatures, other than the ordering. For a k-of-n multisig, there are n-choose-(n-k) possibilities. For example, a 2-of-3 multisig would have three public keys matched with two signatures, resulting in three possible assignments of pubkeys to signatures. In the original implementation this is done by attempting to validate a signature, starting with the first public key and the first signature, and then moving to the next pubkey if validation fails. It is not known in advance to the validator which attempts will fail.

    Thankfully, however, a bug in the original implementation causes an extra, unused item to be removed from stack after validation. Since this value is given no previous consensus meaning, we use it as a bitfield to indicate which pubkeys to skip.

    Enforcing this requirement is a necessary precursor step to performing batch validation, since in a batch validation regime individual pubkey-signature combinations would not be checked for validity.

    Like bitcoin's SCRIPT_VERIFY_NULLDUMMY, this also serves as a malleability fix since the bitmask value is provided by the witness.

    #36 Delay block file size increase until after the protocol cleanup rules activate

    This is a follow-up to #26 included in Freicoin v10.4. By comparing against `GetAdjustedTime` we can check if we are running in the protocol cleanup regime, and only then use the higher limits for block file size. In the mean time we'll still use smaller block files which is beneficial for pruning.

    It's slightly layer violating to access the chain consensus parameters in some cases, e.g. from the network and protocol message handling code. But it doesn't break the build and is better than the alternative.

    #37 Remove ability to "opt-out" from replace-by-fee semantics.

    Bitcoin v0.12 introduces "opt-in" replace-by-fee semantics. This was an unfortunate political compromise as a result of situational context we are fortunate not to have to deal with. There is no such thing as optionality to RBF because there is no way to prevent transaction replacement in miner mempools. It is trivial to execute a double-spend even when the transaction being replaces is not BIP125 compatible, and there are tools available to do this. Supporting this feature and advertising it is confusing and a potential source of security failures.

    #40 Re-enable RPC regression tests from bitcoin with "bitcoin mode" (no demurrage) regtest chain

    For the past couple of releases the majority of RPC regression tests have bee disabled due to their implementation making certain assumptions about the behavior of the chain, such as blocks having 50 BTC subsidy, and not taking into account value decay due to demurrage. For example:

    • A test that mines 25 blocks, then 100 blocks for maturity, and checks that the available balance is 1250 coins is intending to test the wallet coinbase maturity code, not the block reward schedule. (These tests needed updating because the freicoin subsidy schedule is different from bitcoin's.)
       
    • A test that records the wallets balance, sends all available coins to a external address, checks the new balance is zero, then reorgs to a longer chain containing a double-spends back to itself and checks the wallet balance has returned to its original value is not supposed to be testing for demurrage. (These tests needed updating because wallet balances decay with each mined block.)

    Previously we updated these tests individually, but this proved difficult to maintain. In recent rebasing efforts we delayed introduction of demurrage and changing subsidy until the end so the tests could at least be run against earlier patches. This PR introduces a more long-term solution.

    This PR changes the subsidy on regtest to resemble bitcoin's (50 coins per block), and introduces a new consensus-impacting option `-notimeadjust` (only available with `-regtest`) which disables demurrage / time-value adjustment. Running the JSON-RPC python test framework with the `--bitcoin-mode` command line option turns on this no-demurrage mode.

    #41 Fix final jsonrpc tests

    Re-enables the final set of tests disabled by the demurrage patch set. The problem here was not just demurrage but also the fact that the input truncation and ALU demurrage soft-forks hadn't activated on the regtest chain.

    Credits

    Thanks to everyone who directly contributed to this release:

    • accraze
    • Adam Weiss
    • Alex Morcos
    • Alex van der Peet
    • AlSzacrel
    • Altoidnerd
    • Andriy Voskoboinyk
    • antonio-fr
    • Arne Brutschy
    • Ashley Holman
    • Bob McElrath
    • Braydon Fuller
    • BtcDrak
    • Casey Rodarmor
    • centaur1
    • Chris Kleeschulte
    • Christian Decker
    • Cory Fields
    • crowning-
    • daniel
    • Daniel Cousens
    • Daniel Kraft
    • David Hill
    • dexX7
    • Diego Viola
    • Elias Rohrer
    • Eric Lombrozo
    • Erik Mossberg
    • Esteban Ordano
    • EthanHeilman
    • Florian Schmaus
    • Forrest Voight
    • Gavin Andresen
    • Gregory Maxwell
    • Gregory Sanders / instagibbs
    • Ian T
    • Irving Ruan
    • Jacob Welsh
    • James O'Beirne
    • Jeff Garzik
    • Johnathan Corgan
    • Jonas Schnelli
    • Jonathan Cross
    • João Barbosa
    • Jorge Timón
    • Josh Lehan
    • J Ross Nicoll
    • Karl-Johan Alm
    • kazcw
    • Kevin Cooper
    • lpescher
    • Luke Dashjr
    • MarcoFalke
    • Mark Friedenbach
    • Matt
    • Matt Bogosian
    • Matt Corallo
    • Matt Quinn
    • Micha
    • Michael
    • Michael Ford / fanquake
    • Midnight Magic
    • Mitchell Cash
    • mrbandrews
    • mruddy
    • Nick
    • NicolasDorier
    • Patrick Strateman
    • Paul Georgiou
    • Paul Rabahy
    • Pavel Janík / paveljanik
    • Pavel Vasin
    • Pavol Rusnak
    • Peter Josling
    • Peter Todd
    • Philip Kaufmann
    • Pieter Wuille
    • ptschip
    • randy-waterhouse
    • rion
    • Ross Nicoll
    • Ryan Havar
    • Shaul Kfir
    • Simon Males
    • Stephen
    • Suhas Daftuar
    • tailsjoin
    • Thomas Kerin
    • Tom Harding
    • tulip
    • unsystemizer
    • Veres Lajos
    • Wladimir J. van der Laan
    • xor-freenet
    • Zak Wilcox
    • zathras-crypto

    As well as everyone that helped translating on Transifex.

  7. Freicoin version 11.3-8698 is now available from:

      * Linux 32-bit
      * Linux 64-bit
      * macOS (app)
      * macOS (server)
      * Windows 32-bit (installer)
      * Windows 32-bit (zip)
      * Windows 64-bit (installer)
      * Windows 64-bit (zip)
      * Source

    This is a new major version release, bringing both new features and bug fixes.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    Upgrading and downgrading

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux).

    Downgrade warning

    Because release 10.4 and later makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not backwards-compatible with pre-10 versions of Freicoin or other software:

    • Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or other programs. Reindexing using earlier versions will also not work anymore as a result of this.
       
    • The block index database will now hold headers for which no block is stored on disk, which earlier versions won't support.

    If you want to be able to downgrade smoothly, make a backup of your entire data directory. Without this your node will need start syncing (or importing from bootstrap.dat) anew afterwards. It is possible that the data from a completely synchronised 10.4 node may be usable in older versions as-is, but this is not supported and may break as soon as the older version attempts to reindex.

    This does not affect wallet forward or backward compatibility. There are no known problems when downgrading from 11.x to 10.x.

    Important information

    Transaction flooding

    At the time of this release, it is possible for the P2P network to be flooded with low-fee transactions. This would cause a ballooning of the mempool size.

    If this happens and growth of the mempool causes problematic memory use on your node, it is possible to change a few configuration options to work around this. The growth of the mempool can be monitored with the RPC command `getmempoolinfo`.

    One is to increase the minimum transaction relay fee `minrelaytxfee`, which defaults to 0.00005. This will cause transactions with fewer BTC/kB fee to be rejected, and thus fewer transactions entering the mempool.

    The other is to restrict the relaying of free transactions with `limitfreerelay`. This option sets the number of kB/minute at which free transactions (with enough priority) will be accepted. It defaults to 15. Reducing this number reduces the speed at which the mempool can grow due to free transactions.

    For example, add the following to `freicoin.conf`:

    minrelaytxfee=0.00025
    limitfreerelay=5

    More robust solutions will arrive in a future release.

    BIP113 mempool-only locktime enforcement using GetMedianTimePast()

    Freicoin transactions currently may specify a locktime indicating when they may be added to a valid block.  Current consensus rules require that blocks have a block header time greater than the locktime specified in any transaction in that block.

    Miners get to choose what time they use for their header time, with the consensus rule being that no node will accept a block whose time is more than two hours in the future.  This creates a incentive for miners to set their header times to future values in order to include locktimed transactions which weren't supposed to be included for up to two more
    hours.

    The consensus rules also specify that valid blocks may have a header time greater than that of the median of the 11 previous blocks.  This GetMedianTimePast() time has a key feature we generally associate with time: it can't go backwards.

    BIP113 specifies a soft fork (not enforced in this release) that weakens this perverse incentive for individual miners to use a future time by requiring that valid blocks have a computed GetMedianTimePast() greater than the locktime specified in any transaction in that block.

    Mempool inclusion rules currently require transactions to be valid for immediate inclusion in a block in order to be accepted into the mempool. This release begins applying the BIP113 rule to received transactions, so transaction whose time is greater than the GetMedianTimePast() will no longer be accepted into the mempool.

    Implication for miners: you will begin rejecting transactions that would not be valid under BIP113, which will prevent you from producing invalid blocks if/when BIP113 is enforced on the network. Any transactions which are valid under the current rules but not yet valid under the BIP113 rules will either be mined by other miners or delayed until they are valid under BIP113. Note, however, that time-based locktime transactions are more or less unseen on the network currently.

    Implication for users: GetMedianTimePast() always trails behind the current time, so a transaction locktime set to the present time will be rejected by nodes running this release until the median time moves forward. To compensate, subtract one hour (3,600 seconds) from your locktimes to allow those transactions to be included in mempools at approximately the expected time.

    BIP113: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki

    Notable changes

    Block file pruning

    This release supports running a fully validating node without maintaining a copy of the raw block and undo data on disk. To recap, there are four types of data related to the blockchain in the freicoin system: the raw blocks as received over the network (blk???.dat), the undo data (rev???.dat), the block index and the UTXO set (both LevelDB databases). The databases are built from the raw data.

    Block pruning allows Freicoin to delete the raw block and undo data once it's been validated and used to build the databases. At that point, the raw data is used only to relay blocks to other nodes, to handle reorganizations, to look up old transactions (if -txindex is enabled or via the RPC/REST interfaces), or for rescanning the wallet. The block index continues to hold the metadata about all blocks in the blockchain.

    The user specifies how much space to allot for block & undo files. The minimum allowed is 550MB. Note that this is in addition to whatever is required for the block index and UTXO databases. The minimum was chosen so that Freicoin will be able to maintain at least 288 blocks on disk (two days worth of blocks at 10 minutes per block). In rare instances it is possible that the amount of space used will exceed the pruning target in order to keep the required last 288 blocks on disk.

    Note that because the block file size is 2,032 MiB, and pruning occurs on full blocks only, the disk usage for this data must exceed 2,032 MiB for the block file plus the size of the corresponding undo file, plus the size of the last 288 blocks before any pruning is to occur.

    Block pruning works during initial sync in the same way as during steady state, by deleting block files "as you go" whenever disk space is allocated. Thus, if the user specifies 550MB, once that level is reached the program will begin deleting the oldest block and undo files, while continuing to download the blockchain.

    For now, block pruning disables block relay.  In the future, nodes with block pruning will at a minimum relay "new" blocks, meaning blocks that extend their active chain. 

    Block pruning is currently incompatible with running a wallet due to the fact that block data is used for rescanning the wallet and importing keys or addresses (which require a rescan.) However, running the wallet with block pruning will be supported in the near future, subject to those limitations.

    Block pruning is also incompatible with -txindex and will automatically disable it.

    Once you have pruned blocks, going back to unpruned state requires re-downloading the entire blockchain. To do this, re-start the node with -reindex. Note also that any problem that would cause a user to reindex (e.g., disk corruption) will cause a pruned node to redownload the entire blockchain. Finally, note that when a pruned node reindexes, it will delete any blk???.dat and rev???.dat files in the data directory prior to restarting the download.

    To enable block pruning on the command line:

    • `-prune=N`: where N is the number of MB to allot for raw block & undo data.

    Modified RPC calls:

    • `getblockchaininfo` now includes whether we are in pruned mode or not.
    • `getblock` will check if the block's data has been pruned and if so, return an error.
    • `getrawtransaction` will no longer be able to locate a transaction that has a UTXO but where its block file has been pruned.

    Pruning is disabled by default.

    Big endian support

    Experimental support for big-endian CPU architectures was added in this release. All little-endian specific code was replaced with endian-neutral constructs. This has been tested on at least MIPS and PPC hosts. The build system will automatically detect the endianness of the target.

    Memory usage optimization

    There have been many changes in this release to reduce the default memory usage
    of a node, among which:

    • Accurate UTXO cache size accounting (#6102); this makes the option `-dbcache` precise where this grossly underestimated memory usage before
    • Reduce size of per-peer data structure (#6064 and others); this increases the number of connections that can be supported with the same amount of memory
    • Reduce the number of threads (#5964, #5679); lowers the amount of (esp. virtual) memory needed

    Fee estimation changes

    This release improves the algorithm used for fee estimation.  Previously, -1 was returned when there was insufficient data to give an estimate.  Now, -1 will also be returned when there is no fee or priority high enough for the desired confirmation target. In those cases, it can help to ask for an estimate for a higher target number of blocks. It is not uncommon for there to be no fee or priority high enough to be reliably (85%) included in the next block and for this reason, the default for `-txconfirmtarget=n` has changed from 1 to 2.

    Privacy: Disable wallet transaction broadcast

    This release adds an option `-walletbroadcast=0` to prevent automatic transaction broadcast and rebroadcast (#5951). This option allows separating transaction submission from the node functionality.

    Making use of this, third-party scripts can be written to take care of transaction (re)broadcast:

    • Send the transaction as normal, either through RPC or the GUI
    • Retrieve the transaction data through RPC using `gettransaction` (NOT `getrawtransaction`). The `hex` field of the result will contain the raw hexadecimal representation of the transaction
    • The transaction can then be broadcasted through arbitrary mechanisms supported by the script

    One such application is selective Tor usage, where the node runs on the normal internet but transactions are broadcasted over Tor.

    For an example script see bitcoin-submittx.

    Privacy: Stream isolation for Tor

    This release adds functionality to create a new circuit for every peer connection, when the software is used with Tor. The new option, `-proxyrandomize`, is on by default.

    When enabled, every outgoing connection will (potentially) go through a different exit node. That significantly reduces the chance to get unlucky and pick a single exit node that is either malicious, or widely banned from the P2P network. This improves connection reliability as well as privacy, especially for the initial connections.

    Important note: If a non-Tor SOCKS5 proxy is configured that supports authentication, but doesn't require it, this change may cause that proxy to reject connections. A user and password is sent where they weren't before. This setup is exceedingly rare, but in this case `-proxyrandomize=0` can be passed to disable the behavior.

    11.3-8698 Change log

    Detailed release notes follow. This overview includes changes that affect behavior, not code moves, refactors and string updates. For convenience in locating the code changes and accompanying discussion, both the bitcoin pull request and git merge commit are mentioned.

    RPC and REST

    • #5461 `5f7279a` signrawtransaction: validate private key
    • #5444 `103f66b` Add /rest/headers/<count>/<hash>.<ext>
    • #4964 `95ecc0a` Add scriptPubKey field to validateaddress RPC call
    • #5476 `c986972` Add time offset into getpeerinfo output
    • #5540 `84eba47` Add unconfirmed and immature balances to getwalletinfo
    • #5599 `40e96a3` Get rid of the internal miner's hashmeter
    • #5711 `87ecfb0` Push down RPC locks
    • #5754 `1c4e3f9` fix getblocktemplate lock issue
    • #5756 `5d901d8` Fix getblocktemplate_proposals test by mining one block
    • #5548 `d48ce48` Add /rest/chaininfos
    • #5992 `4c4f1b4` Push down RPC reqWallet flag
    • #6036 `585b5db` Show zero value txouts in listunspent
    • #5199 `6364408` Add RPC call `gettxoutproof` to generate and verify merkle blocks
    • #5418 `16341cc` Report missing inputs in sendrawtransaction
    • #5937 `40f5e8d` show script verification errors in signrawtransaction result
    • #5420 `1fd2d39` getutxos REST command (based on Bip64)
    • #6193 `42746b0` [REST] remove json input for getutxos, limit to query max. 15 outpoints
    • #6226 `5901596` json: fail read_string if string contains trailing garbage

    Configuration and command-line options

    • #5636 `a353ad4` Add option `-allowselfsignedrootcertificate` to allow self signed root certs (for testing payment requests)
    • #5900 `3e8a1f2` Add a consistency check `-checkblockindex` for the block chain data structures
    • #5951 `7efc9cf` Make it possible to disable wallet transaction broadcast (using `-walletbroadcast=0`)
    • #5911 `b6ea3bc` privacy: Stream isolation for Tor (on by default, use `-proxyrandomize=0` to disable)
    • #5863 `c271304` Add autoprune functionality (`-prune=<size>`)
    • #6153 `0bcf04f` Parameter interaction: disable upnp if -proxy set
    • #6274 `4d9c7fe` Add option `-alerts` to opt out of alert system

    Block and transaction handling

    • #5367 `dcc1304` Do all block index writes in a batch
    • #5253 `203632d` Check against MANDATORY flags prior to accepting to mempool
    • #5459 `4406c3e` Reject headers that build on an invalid parent
    • #5481 `055f3ae` Apply AreSane() checks to the fees from the network
    • #5580 `40d65eb` Preemptively catch a few potential bugs
    • #5349 `f55c5e9` Implement test for merkle tree malleability in CPartialMerkleTree
    • #5564 `a89b837` clarify obscure uses of EvalScript()
    • #5521 `8e4578a` Reject non-final txs even in testnet/regtest
    • #5707 `6af674e` Change hardcoded character constants to descriptive named constants for db keys
    • #5286 `fcf646c` Change the default maximum OP_RETURN size to 80 bytes
    • #5710 `175d86e` Add more information to errors in ReadBlockFromDisk
    • #5948 `b36f1ce` Use GetAncestor to compute new target
    • #5959 `a0bfc69` Add additional block index consistency checks
    • #6058 `7e0e7f8` autoprune minor post-merge improvements
    • #5159 `2cc1372` New fee estimation code
    • #6102 `6fb90d8` Implement accurate UTXO cache size accounting
    • #6129 `2a82298` Bug fix for clearing fCheckForPruning
    • #5947 `e9af4e6` Alert if it is very likely we are getting a bad chain
    • #6203 `c00ae64` Remove P2SH coinbase flag, no longer interesting
    • #5985 `37b4e42` Fix removing of orphan transactions
    • #6221 `6cb70ca` Prune: Support noncontiguous block files
    • #6256 `fce474c` Use best header chain timestamps to detect partitioning
    • #6233 `a587606` Advance pindexLastCommonBlock for blocks in chainActive

    P2P protocol and network code

    • #5507 `844ace9` Prevent DOS attacks on in-flight data structures
    • #5770 `32a8b6a` Sanitize command strings before logging them
    • #5859 `dd4ffce` Add correct bool combiner for net signals
    • #5876 `8e4fd0c` Add a NODE_GETUTXO service bit and document NODE_NETWORK
    • #6028 `b9311fb` Move nLastTry from CAddress to CAddrInfo
    • #5662 `5048465` Change download logic to allow calling getdata on inbound peers
    • #5971 `18d2832` replace absolute sleep with conditional wait
    • #5918 `7bf5d5e` Use equivalent PoW for non-main-chain requests
    • #6059 `f026ab6` chainparams: use SeedSpec6's rather than CAddress's for fixed seeds
    • #6080 `31c0bf1` Add jonasschnellis dns seeder
    • #5976 `9f7809f` Reduce download timeouts as blocks arrive
    • #6172 `b4bbad1` Ignore getheaders requests when not synced
    • #5875 `304892f` Be stricter in processing unrequested blocks
    • #6333 `41bbc85` Hardcoded seeds update June 2015

    Validation

    • #5143 `48e1765` Implement BIP62 rule 6
    • #5713 `41e6e4c` Implement BIP66

    Build system

    • #5501 `c76c9d2` Add mips, mipsel and aarch64 to depends platforms
    • #5334 `cf87536` libbitcoinconsensus: Add pkg-config support
    • #5514 `ed11d53` Fix 'make distcheck'
    • #5505 `a99ef7d` Build winshutdownmonitor.cpp on Windows only
    • #5582 `e8a6639` Osx toolchain update
    • #5684 `ab64022` osx: bump build sdk to 10.9
    • #5695 `23ef5b7` depends: latest config.guess and config.sub
    • #5509 `31dedb4` Fixes when compiling in c++11 mode
    • #5819 `f8e68f7` release: use static libstdc++ and disable reduced exports by default
    • #5510 `7c3fbc3` Big endian support
    • #5149 `c7abfa5` Add script to verify all merge commits are signed
    • #6082 `7abbb7e` qt: disable qt tests when one of the checks for the gui fails
    • #6244 `0401aa2` configure: Detect (and reject) LibreSSL
    • #6269 `95aca44` gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures
    • #6285 `ef1d506` Fix scheduler build with some boost versions.
    • #6280 `25c2216` depends: fix Boost 1.55 build on GCC 5
    • #6303 `b711599` gitian: add a gitian-win-signer descriptor
    • #6246 `8ea6d37` Fix build on FreeBSD
    • #6282 `daf956b` fix crash on shutdown when e.g. changing -txindex and abort action
    • #6354 `bdf0d94` Gitian windows signing normalization

    Wallet

    • #2340 `811c71d` Discourage fee sniping with nLockTime
    • #5485 `d01bcc4` Enforce minRelayTxFee on wallet created tx and add a maxtxfee option
    • #5508 `9a5cabf` Add RandAddSeedPerfmon to MakeNewKey
    • #4805 `8204e19` Do not flush the wallet in AddToWalletIfInvolvingMe(..)
    • #5319 `93b7544` Clean up wallet encryption code
    • #5831 `df5c246` Subtract fee from amount
    • #6076 `6c97fd1` wallet: fix boost::get usage with boost 1.58
    • #5511 `23c998d` Sort pending wallet transactions before reaccepting
    • #6126 `26e08a1` Change default nTxConfirmTarget to 2
    • #6183 `75a4d51` Fix off-by-one error w/ nLockTime in the wallet
    • #6276 `c9fd907` Fix getbalance * 0

    GUI

    • #5219 `f3af0c8` New icons
    • #5228 `bb3c75b` HiDPI (retina) support for splash screen
    • #5258 `73cbf0a` The RPC Console should be a QWidget to make window more independent
    • #5488 `851dfc7` Light blue icon color for regtest
    • #5547 `a39aa74` New icon for the debug window
    • #5493 `e515309` Adopt style colour for button icons
    • #5557 `70477a0` On close of splashscreen interrupt verifyDB
    • #5559 `83be8fd` Make the command-line-args dialog better
    • #5144 `c5380a9` Elaborate on signverify message dialog warning
    • #5489 `d1aa3c6` Optimize PNG files
    • #5649 `e0cd2f5` Use text-color icons for system tray Send/Receive menu entries
    • #5651 `848f55d` Coin Control: Use U+2248 "ALMOST EQUAL TO" rather than a simple tilde
    • #5626 `ab0d798` Fix icon sizes and column width
    • #5683 `c7b22aa` add new osx dmg background picture
    • #5620 `7823598` Payment request expiration bug fix
    • #5729 `9c4a5a5` Allow unit changes for read-only BitcoinAmountField
    • #5753 `0f44672` Add bitcoin logo to about screen
    • #5629 `a956586` Prevent amount overflow problem with payment requests
    • #5830 `215475a` Don't save geometry for options and about/help window
    • #5793 `d26f0b2` Honor current network when creating autostart link
    • #5847 `f238add` Startup script for centos, with documentation
    • #5915 `5bd3a92` Fix a static qt5 crash when using certain versions of libxcb
    • #5898 `bb56781` Fix rpc console font size to flexible metrics
    • #5467 `bc8535b` Payment request / server work - part 2
    • #6161 `180c164` Remove movable option for toolbar
    • #6160 `0d862c2` Overviewpage: make sure warning icons gets colored

    Tests

    • #5453 `2f2d337` Add ability to run single test manually to RPC tests
    • #5421 `886eb57` Test unexecuted OP_CODESEPARATOR
    • #5530 `565b300` Additional rpc tests
    • #5611 `37b185c` Fix spurious windows test failures after 012598880c
    • #5613 `2eda47b` Fix smartfees test for change to relay policy
    • #5612 `e3f5727` Fix zapwallettxes test
    • #5642 `30a5b5f` Prepare paymentservertests for new unit tests
    • #5784 `e3a3cd7` Fix usage of NegateSignatureS in script_tests
    • #5813 `ee9f2bf` Add unit tests for next difficulty calculations
    • #5855 `d7989c0` Travis: run unit tests in different orders
    • #5852 `cdae53e` Reinitialize state in between individual unit tests.
    • #5883 `164d7b6` tests: add a BasicTestingSetup and apply to all tests
    • #5940 `446bb70` Regression test for ResendWalletTransactions
    • #6052 `cf7adad` fix and enable bip32 unit test
    • #6039 `734f80a` tests: Error when setgenerate is used on regtest
    • #6074 `948beaf` Correct the PUSHDATA4 minimal encoding test in script_invalid.json
    • #6032 `e08886d` Stop nodes after RPC tests, even with --nocleanup
    • #6075 `df1609f` Add additional script edge condition tests
    • #5981 `da38dc6` Python P2P testing 
    • #5958 `9ef00c3` Add multisig rpc tests
    • #6112 `fec5c0e` Add more script edge condition tests

    Miscellaneous

    • #5457, #5506, #5952, #6047 Update libsecp256k1
    • #5437 `84857e8` Add missing CAutoFile::IsNull() check in main
    • #5490 `ec20fd7` Replace uint256/uint160 with opaque blobs where possible
    • #5654, #5764 Adding jonasschnelli's GPG key
    • #5477 `5f04d1d` OS X 10.10: LSSharedFileListItemResolve() is deprecated
    • #5679 `beff11a` Get rid of DetectShutdownThread
    • #5787 `9bd8c9b` Add fanquake PGP key
    • #5366 `47a79bb` No longer check osx compatibility in RenameThread
    • #5689 `07f4386` openssl: abstract out OPENSSL_cleanse
    • #5708 `8b298ca` Add list of implemented BIPs
    • #5809 `46bfbe7` Add bitcoin-cli man page
    • #5839 `86eb461` keys: remove libsecp256k1 verification until it's actually supported
    • #5749 `d734d87` Help messages correctly formatted (79 chars)
    • #5884 `7077fe6` BUGFIX: Stack around the variable 'rv' was corrupted
    • #5849 `41259ca` contrib/init/bitcoind.openrc: Compatibility with previous OpenRC init script variables
    • #5950 `41113e3` Fix locale fallback and guard tests against invalid locale settings
    • #5965 `7c6bfb1` Add git-subtree-check.sh script
    • #6033 `1623f6e` FreeBSD, OpenBSD thread renaming
    • #6064 `b46e7c2` Several changes to mruset
    • #6104 `3e2559c` Show an init message while activating best chain
    • #6125 `351f73e` Clean up parsing of bool command line args
    • #5964 `b4c219b` Lightweight task scheduler
    • #6116 `30dc3c1` [OSX] rename Bitcoin-Qt.app to Bitcoin-Core.app
    • #6168 `b3024f0` contrib/linearize: Support linearization of testnet blocks
    • #6098 `7708fcd` Update Windows resource files (and add one for bitcoin-tx)
    • #6159 `e1412d3` Catch errors on datadir lock and pidfile delete
    • #6186 `182686c` Fix two problems in CSubnet parsing
    • #6174 `df992b9` doc: add translation strings policy
    • #6210 `dfdb6dd` build: disable optional use of gmp in internal secp256k1 build
    • #6264 `94cd705` Remove translation for -help-debug options
    • #6286 `3902c15` Remove berkeley-db4 workaround in MacOSX build docs
    • #6319 `3f8fcc9` doc: update mailing list address
    • #6438 `2531438` openssl: avoid config file load/race
    • #6439 `980f820` Updated URL location of netinstall for Debian
    • #6384 `8e5a969` qt: Force TLS1.0+ for SSL connections
    • #6471 `92401c2` Depends: bump to qt 5.5
    • #6224 `93b606a` Be even stricter in processing unrequested blocks
    • #6571 `100ac4e` libbitcoinconsensus: avoid a crash in multi-threaded environments
    • #6545 `649f5d9` Do not store more than 200 timedata samples.
    • #6694 `834e299` [QT] fix thin space word wrap line break issue
    • #6703 `1cd7952` Backport bugfixes to 0.11
    • #6750 `5ed8d0b` Recent rejects backport to v0.11
    • #6769 `71cc9d9` Test LowS in standardness, removes nuisance malleability vector.
    • #6789 `b4ad73f` Update miniupnpc to 1.9.20151008
    • #6785 `b4dc33e` Backport to v0.11: In (strCommand == "tx"), return if AlreadyHave()
    • #6412 `0095b9a` Test whether created sockets are select()able
    • #6795 `4dbcec0` net: Disable upnp by default
    • #6793 `e7bcc4a` Bump minrelaytxfee default
    • #6124 `684636b` Make CScriptNum() take nMaxNumSize as an argument
    • #6124 `4fa7a04` Replace NOP2 with CHECKLOCKTIMEVERIFY (BIP65)
    • #6124 `6ea5ca4` Enable CHECKLOCKTIMEVERIFY as a standard script verify flag
    • #6351 `5e82e1c` Add CHECKLOCKTIMEVERIFY (BIP65) soft-fork logic
    • #6353 `ba1da90` Show softfork status in getblockchaininfo
    • #6351 `6af25b0` Add BIP65 to getblockchaininfo softforks list
    • #6688 `01878c9` Fix locking in GetTransaction
    • #6653 `b3eaa30` [Qt] Raise debug window when requested
    • #6600 `1e672ae` Debian/Ubuntu: Include bitcoin-tx binary
    • #6600 `2394f4d` Debian/Ubuntu: Split bitcoin-tx into its own package
    • #5987 `33d6825` Bugfix: Allow mining on top of old tip blocks for testnet
    • #6852 `21e58b8` build: make sure OpenSSL heeds noexecstack
    • #6846 `af6edac` alias `-h` for `--help`
    • #6867 `95a5039` Set TCP_NODELAY on P2P sockets.
    • #6856 `dfe55bd` Do not allow blockfile pruning during reindex.
    • #6566 `a1d3c6f` Add rules--presently disabled--for using GetMedianTimePast as end point for lock-time calculations
    • #6566 `f720c5f` Enable policy enforcing GetMedianTimePast as the end point of lock-time constraints
    • #6917 `0af5b8e` leveldb: Win32WritableFile without memory mapping
    • #6948 `4e895b0` Always flush block and undo when switching to new file

    Credits

    Thanks to everyone who directly contributed to this release:

    • 21E14
    • Adam Weiss
    • Alex Morcos
    • ayeowch
    • azeteki
    • Ben Holden-Crowther
    • bikinibabe
    • BitcoinPRReadingGroup
    • Blake Jakopovic
    • Casey Rodarmor
    • charlescharles
    • Chris Arnesen
    • Chris Kleeschulte
    • Ciemon
    • CohibAA
    • Corinne Dashjr
    • Cory Fields
    • Cozz Lovan
    • Daira Hopwood
    • Daniel Cousens
    • Daniel Kraft
    • Dave Collins
    • David A. Harding
    • dexX7
    • Diego Viola
    • Earlz
    • Eric Lombrozo
    • Eric R. Schulz
    • Esteban Ordano
    • Everett Forth
    • fanquake
    • Flavien Charlon
    • fsb4000
    • Gavin Andresen
    • Gregory Maxwell
    • Heath
    • Ivan Pustogarov
    • Jacob Welsh
    • Jameson Lopp
    • Jason Lewicki
    • Jeff Garzik
    • Jonas Schnelli
    • Jonathan Brown
    • Jorge Timón
    • joshr
    • J Ross Nicoll
    • Julian Yap
    • Luca Venturini
    • Luke Dashjr
    • Manuel Araoz
    • MarcoFalke
    • Marco Falke
    • Mark Friedenbach
    • Matt Bogosian
    • Matt Corallo
    • Micha
    • Michael Ford
    • Mike Hearn
    • Mitchell Cash
    • mrbandrews
    • Nicolas Benoit
    • paveljanik
    • Pavel Janík
    • Pavel Vasin
    • Peter Todd
    • Philip Kaufmann
    • Pieter Wuille
    • pstratem
    • randy-waterhouse
    • rion
    • Rob Van Mieghem
    • Ross Nicoll
    • Ruben de Vries
    • sandakersmann
    • Shaul Kfir
    • Shawn Wilkinson
    • sinetek
    • Suhas Daftuar
    • svost
    • tailsjoin
    • ฿tcDrak
    • Thomas Zander
    • Tom Harding
    • UdjinM6
    • Veres Lajos
    • Vitalii Demianets
    • Wladimir J. van der Laan
    • Zak Wilcox

    And all those who contributed additional code review and/or security research:

    • Sergio Demian Lerner
    • timothy on IRC for reporting the issue
    • Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos

    As well as everyone that helped translating on Transifex.

  8. Freicoin version 10.4.2 is now available from:

      * Linux 32-bit
      * Linux 64-bit
      * macOS (app)
      * macOS (server)
      * Windows 32-bit (installer)
      * Windows 32-bit (zip)
      * Windows 64-bit (installer)
      * Windows 64-bit (zip)
      * Source

    This is a new bug fix release, adding support for pool software that rely on freicoind for the correct coinbase commitments, including median time past. Upgrading to this release is required for miners which use pool software that depends on the availability of the "locktime" field from 'getblocktemplate,' but otherwise it is not required.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Notable changes

    Add "locktime" field to 'getblocktemplate' mining RPC

    The recent soft-fork to force vtx[0].nLockTime to be the current median-time-past requires that mining software track freicoin headers and generate this value from that information. In order to make this process simpler for many downstream maintainers, we add the field "locktime" to the results of the 'getblocktemplate' JSON-RPC call which contains the required nLockTime value, which is equal to the median of the past 11 block header timestamps.

    10.4.2 changelog

    • `a64790008` [Mining]
      Report the required coinbase nLockTime in 'getblocktemplate'.

    Credits

    Thanks to who contributed to this release, including:

    • Mark Friedenbach

    As well as everyone that helped translating on Transifex.
     

  9. Freicoin version 10.4.1 is now available from:

      * Linux 32-bit
      * Linux 64-bit
      * macOS (app)
      * macOS (server)
      * Windows 32-bit (installer)
      * Windows 32-bit (zip)
      * Windows 64-bit (installer)
      * Windows 64-bit (zip)
      * Source

    This is a new bug fix release, fixing an issue with incorrect display of immature and watch-only balances on all platforms. Upgrading to this release is recommended for those affected by this issue, but otherwise not required.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Notable changes

    Fix of incorrect display of immature and watch-only balances

    Version 10.4 introduced the new feature of watch-only addresses, which are scripts the wallet tracks as if it had the private keys, a construct which finds use in many circumstances such as online tracking of a cold-storage wallet. Unfortunately the wallet routines for calculating watch-only balances were not updated to apply demurrage to these amounts. As a result, the display for a watch-only wallet shows an incorrectly inflated amount of total freicoin compared to what is actually available.

    While fixing this bug it was re-discovered that immature balances were also being displayed improperly, the result of a conscious decision in a prior release for reasons that no longer apply.

    Both issues have been fixed, and the GUI and RPC commands which calculate wallet balances now correctly show demurrage-adjusted totals.

    10.4.1 changelog

    • `52742c45b` [Wallet]
      Correctly apply demurrage to watch-only and immature balance calculations.

    Credits

    Thanks to who contributed to this release, including:

    • Mark Friedenbach

    As well as everyone that helped translating on Transifex.
     

  10. These are based off the release notes for the underlying bitcoin releases.

    Under "notable changes" the first two headings "Protocol-cleanup flag day fork" and "Depreciation of 32-bit clients" are new and specific to freicoin.

    Also note the entire notable changes section from the recently released v0.9.5.1-5869.

    The other stuff is shared with bitcoin. One of the big changes that came with 0.10 in bitcoin (which our v10 release is based off) was the introduction of watch-only addresses. I need this to do the final donation matching from the foundation funds.

  11. Freicoin version 10.4 is now available from:

    This is a new major version release, bringing both new features and bug fixes.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    Upgrading and downgrading

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Downgrading warning

    Because release 10.4 makes use of headers-first synchronization and parallel block download (see further), the block files and databases are not backwards-compatible with older versions of Freicoin or other software:

    • Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or other programs. Reindexing using earlier versions will also not work anymore as a result of this.
    • The block index database will now hold headers for which no block is stored on disk, which earlier versions won't support.

    If you want to be able to downgrade smoothly, make a backup of your entire data directory. Without this your node will need start syncing (or importing from bootstrap.dat) anew afterwards. It is possible that the data from a completely synchronized 0.10 node may be usable in older versions as-is, but this is not supported and may break as soon as the older version attempts to reindex.

    This does not affect wallet forward or backward compatibility.

    Notable changes

    This fixes a serious problem on Windows with data directories that have non-ASCII characters (https://github.com/bitcoin/bitcoin/issues/6078).

    Protocol-cleannup flag day fork

    To achieve desired scaling limits, the forward blocks protocol upgrade will eventually trigger a hard-fork modification of the consensus rules, for the primary purposes of dropping enforcement of many aggregate block limits and altering the difficulty adjustment algorithm.

    This hard-fork will not activate until it is absolutely necessary for it to do so, at the point when measurements of real demand for additional shard space in aggregate across all forward block shard-chains exceeds the available space in the compatibility chain. It is anticipated that this will not occur until many, many years into the future, when Freicoin/Tradecraft's usage exceeds even the levels of bitcoin usage ca. 2018. However when it does eventually trigger, any node enforcing the old rules will be left behind.

    Beginning in 10.4, we introduce a flag-day relaxation of the consensus rules in preparation for this eventual fork. Since the rule changes for forward blocks have not been written yet, any code written now wouldn't be able to detect actual activation or enforce the new aggregate limits. Instead we schedule a relaxation of the consensus rules at the EOL support date for the current release, after which rules which we anticipate being changed are simply unenforced, and aggregate limits are set to the maximum values the software is able to support. After the flag-day, older clients of at least version 10.4 will continue to receive blocks, but with only SPV security ("trust the most work") for the new protocol rules. So activation of forward blocks' new scaling limits becomes a soft-fork starting with the release of 10.4, with the only concern being the forking off of pre-10.4 nodes upon activation.

    The protocol cleanup rule change is scheduled for activation on 2 April 2021 at midnight UTC. This is 4PM PDT, 7PM EDT, and 9AM JST. Since the activation time is median-time-past, it'll actually trigger about an hour after this wall-clock time.

    This date is chosen to be roughly 2 years after the expected release date of official binaries for 10.4. While the Freicoin developer team doesn't have the resources to provide strong ongoing support beyond emergency fixes, we nevertheless have an ideal goal of supporting release binaries for up to 2 years following the first release from that series. Any release of a new series prior to the deployment of forward blocks will reset this to be at least two years from the time of release. When forward blocks is deployed, this parameter will be set to the highest value used in any prior release, and becomes the earliest time at which the hard-fork rules can activate.

    All users should be aware that timely updates or modification of their own nodes are required within this time window in order to maintain full-node security, until such time as a version supporting forward blocks is released and adopted. Miners especially *must* upgrade or modify their block-generating nodes before this date, or else they place the consensus of the network at risk.

    Depreciation of 32-bit clients

    The lifting of aggregate limits in preparation of the new scaling limits enabled by forward blocks unfortunately opens a memory exhaustion denial of service attack vector after the above-mentioned flag-day activation of new rules, even if the actual activation date has been pushed back in later releases. To protect against this, 32-bit clients have smaller network buffers (about 16 MiB under default settings), too small to contain the largest block-relay message allowed under the new rules (2 GiB).

    This unfortunately means that if/when forward blocks is deployed and the flexible cap used to grow aggregate block size limits, then 32-bit nodes will no longer be able to perform network synchronization once a block larger than 17,179,845 bytes is included into the main chain.

    For this reason, support for 32-bit clients is officially depreciated as of the 10.4 release. Starting with 10.4, 32-bit clients will at some point in the future be unable to sync the main chain. Users on 32-bit hosts should strongly consider upgrading before activation of the new rules.

    However should you need to continue running 32-bit nodes, be advised that the network message limits are informed by the -maxconnections option. Specifically the maximum network packet size allowed is

        2^32 / max(125, -maxconnections) / 2,

    which for the default of 125 connection slots is 17,179,869 bytes (not including the 24-byte header). By providing a lower value for -maxconnections this value is increased.  With -maxconnections=1, the calculated value is clamped to MAX_BLOCKFILE_SIZE. So a 32-bit node with -maxconnections=1 will be able to network synchronize even the largest blocks from its (only) peer.

    Although depreciated, 32-bit official binaries will continue to be provided for releases so long as it remains a reasonable amount of work to do so.

    Faster synchronization

    Freicoin now uses 'headers-first synchronization'. This means that we first ask peers for block headers (a total of 19 megabytes, as of February 2019) and validate those. In a second stage, when the headers have been discovered, we download the blocks. However, as we already know about the whole chain in advance, the blocks can be downloaded in parallel from all available peers.

    In practice, this means a much faster and more robust synchronization. You may notice a slower progress in the very first few minutes, when headers are still being fetched and verified, but it should gain speed afterwards.

    A few RPCs were added/updated as a result of this:

    • `getblockchaininfo` now returns the number of validated headers in addition to the number of validated blocks.
    • `getpeerinfo` lists both the number of blocks and headers we know we have in common with each peer. While synchronizing, the heights of the blocks that we have requested from peers (but haven't received yet) are also listed as 'inflight'.
    • A new RPC `getchaintips` lists all known branches of the block chain, including those we only have headers for.

    Transaction fee changes

    This release automatically estimates how high a transaction fee (or how high a priority) transactions require to be confirmed quickly. The default settings will create transactions that confirm quickly; see the new 'txconfirmtarget' setting to control the tradeoff between fees and confirmation times. Fees are added by default unless the 'sendfreetransactions' setting is enabled.

    Prior releases used hard-coded fees (and priorities), and would sometimes create transactions that took a very long time to confirm.

    Statistics used to estimate fees and priorities are saved in the data directory in the `fee_estimates.dat` file just before program shutdown, and are read in at startup.

    New command line options for transaction fee changes:

    • `-txconfirmtarget=n` : create transactions that have enough fees (or priority) so they are likely to begin confirmation within n blocks (default: 1). This setting is over-ridden by the -paytxfee option.
    • `-sendfreetransactions` : Send transactions as zero-fee transactions if possible (default: 0)

    New RPC commands for fee estimation:

    • `estimatefee nblocks` : Returns approximate fee-per-1,000-bytes needed for a transaction to begin confirmation within nblocks. Returns -1 if not enough transactions have been observed to compute a good estimate.
    • `estimatepriority nblocks` : Returns approximate priority needed for a zero-fee transaction to begin confirmation within nblocks. Returns -1 if not enough free transactions have been observed to compute a good estimate.

    RPC access control changes

    Subnet matching for the purpose of access control is now done by matching the binary network address, instead of with string wildcard matching. For the user this means that `-rpcallowip` takes a subnet specification, which can be

    • a single IP address (e.g. `1.2.3.4` or `fe80::0012:3456:789a:bcde`)
    • a network/CIDR (e.g. `1.2.3.0/24` or `fe80::0000/64`)
    • a network/netmask (e.g. `1.2.3.4/255.255.255.0` or `fe80::0012:3456:789a:bcde/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`)

    An arbitrary number of `-rpcallow` arguments can be given. An incoming connection will be accepted if its origin address matches one of them.

    For example:

    | 0.9.x and before                           | 10.x                                  |
    |--------------------------------------------|---------------------------------------|
    | `-rpcallowip=192.168.1.1`                  | `-rpcallowip=192.168.1.1` (unchanged) |
    | `-rpcallowip=192.168.1.*`                  | `-rpcallowip=192.168.1.0/24`          |
    | `-rpcallowip=192.168.*`                    | `-rpcallowip=192.168.0.0/16`          |
    | `-rpcallowip=*` (dangerous!)               | `-rpcallowip=::/0` (still dangerous!) |
    
    

    Using wildcards will result in the rule being rejected with the following error in debug.log:

        Error: Invalid -rpcallowip subnet specification: *. Valid are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24).

    REST interface

    A new HTTP API is exposed when running with the `-rest` flag, which allows unauthenticated access to public node data.

    It is served on the same port as RPC, but does not need a password, and uses plain HTTP instead of JSON-RPC.

    Assuming a local RPC server running on port 8638, it is possible to request:

    In every case, *EXT* can be `bin` (for raw binary data), `hex` (for hex-encoded binary) or `json`.

    For more details, see the `doc/REST-interface.md` document in the repository.

    RPC Server "Warm-Up" Mode

    The RPC server is started earlier now, before most of the expensive initializations like loading the block index.  It is available now almost immediately after starting the process.  However, until all initializations are done, it always returns an immediate error with code -28 to all calls.

    This new behavior can be useful for clients to know that a server is already started and will be available soon (for instance, so that they do not have to start it themselves).

    Improved signing security

    For 0.10 the security of signing against unusual attacks has been improved by making the signatures constant time and deterministic.

    This change is a result of switching signing to use libsecp256k1 instead of OpenSSL. Libsecp256k1 is a cryptographic library optimized for the curve Freicoin uses which was created by Bitcoin Core developer Pieter Wuille.

    There exist attacks[1] against most ECC implementations where an attacker on shared virtual machine hardware could extract a private key if they could cause a target to sign using the same key hundreds of times. While using shared hosts and reusing keys are inadvisable for other reasons, it's a better practice to avoid the exposure.

    OpenSSL has code in their source repository for derandomization and reduction in timing leaks that we've eagerly wanted to use for a long time, but this functionality has still not made its way into a released version of OpenSSL. Libsecp256k1 achieves significantly stronger protection: As far as we're aware this is the only deployed implementation of constant time signing for the curve Freicoin uses and we have reason to believe that libsecp256k1 is better tested and more thoroughly reviewed than the implementation in OpenSSL.

    [1] https://eprint.iacr.org/2014/161.pdf

    Watch-only wallet support

    The wallet can now track transactions to and from wallets for which you know all addresses (or scripts), even without the private keys.

    This can be used to track payments without needing the private keys online on a possibly vulnerable system. In addition, it can help for (manual) construction of multisig transactions where you are only one of the signers.

    One new RPC, `importaddress`, is added which functions similarly to `importprivkey`, but instead takes an address or script (in hexadecimal) as argument.  After using it, outputs credited to this address or script are considered to be received, and transactions consuming these outputs will be considered to be sent.

    The following RPCs have optional support for watch-only: `getbalance`, `listreceivedbyaddress`, `listreceivedbyaccount`, `listtransactions`, `listaccounts`, `listsinceblock`, `gettransaction`. See the RPC documentation for those methods for more information.

    Compared to using `getrawtransaction`, this mechanism does not require `-txindex`, scales better, integrates better with the wallet, and is compatible with future block chain pruning functionality. It does mean that all relevant addresses need to added to the wallet before the payment, though.

    Consensus library

    Starting from 10.4, the Freicoin distribution includes a consensus library.

    The purpose of this library is to make the verification functionality that is critical to Freicoin's consensus available to other applications, e.g. to language bindings such as [python-bitcoinlib](https://pypi.python.org/pypi/python-bitcoinlib) or alternative node implementations.

    This library is called `libfreicoinconsensus.so` (or, `.dll` for Windows). Its interface is defined in the C header [freicoinconsensus.h](https://github.com/tradecraftio/tradecraft/blob/v10.4/src/script/freicoinconsensus.h).

    In its initial version the API includes two functions:

    - `freicoinconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction correctly spends the passed scriptPubKey under additional constraints indicated by flags
    - `freicoinconsensus_version` returns the API version, currently at an experimental `0`

    The functionality is planned to be extended to e.g. UTXO management in upcoming releases, but the interface for existing methods should remain stable.

    Standard script rules relaxed for P2SH addresses

    The IsStandard() rules have been almost completely removed for P2SH redemption scripts, allowing applications to make use of any valid script type, such as "n-of-m OR y", hash-locked oracle addresses, etc. While the Freicoin protocol has always supported these types of script, actually using them on mainnet has been previously inconvenient as standard Freicoin nodes wouldn't relay them to miners, nor would most miners include them in blocks they mined.

    freicoin-tx

    It has been observed that many of the RPC functions offered by freicoind are "pure functions", and operate independently of the freicoind wallet. This included many of the RPC "raw transaction" API functions, such as createrawtransaction.

    freicoin-tx is a newly introduced command line utility designed to enable easy manipulation of freicoin transactions. A summary of its operation may be obtained via "freicoin-tx --help" Transactions may be created or signed in a manner similar to the RPC raw tx API. Transactions may be updated, deleting inputs or outputs, or appending new inputs and outputs. Custom scripts may be easily composed using a simple text notation, borrowed from the freicoin test suite.

    This tool may be used for experimenting with new transaction types, signing multi-party transactions, and many other uses. Long term, the goal is to deprecate and remove "pure function" RPC API calls, as those do not require a server round-trip to execute.

    Other utilities "freicoin-key" and "freicoin-script" have been proposed, making key and script operations easily accessible via command line.

    Mining and relay policy enhancements

    Freicoin's block templates are now for version 3 blocks only, and any mining software relying on its `getblocktemplate` must be updated in parallel to use libblkmaker either version 0.4.2 or any version from 0.5.1 onward. If you are solo mining, this will affect you the moment you upgrade Freicoin. If you are mining with the stratum mining protocol: this does not affect you. If you are mining with the getblocktemplate protocol to a pool: this will affect you at the pool operator's discretion.

    The `prioritisetransaction` RPC method has been added to enable miners to manipulate the priority of transactions on an individual basis.

    Freicoin now supports BIP 22 long polling, so mining software can be notified immediately of new templates rather than having to poll periodically.

    Support for BIP 23 block proposals is now available in Freicoin's `getblocktemplate` method. This enables miners to check the basic validity of their next block before expending work on it, reducing risks of accidental hardforks or mining invalid blocks.

    The relay policy has changed to more properly implement the desired behavior of not relaying free (or very low fee) transactions unless they have a priority above the AllowFreeThreshold(), in which case they are relayed subject to the rate limiter.

    Fix buffer overflow in bundled upnp

    Bundled miniupnpc was updated to 1.9.20151008. This fixes a buffer overflow in the XML parser during initial network discovery.

    Details can be found here: http://talosintel.com/reports/TALOS-2015-0035/

    This applies to the distributed executables only, not when building from source or using distribution provided packages.

    Additionally, upnp has been disabled by default. This may result in a lower number of reachable nodes on IPv4, however this prevents future libupnpc vulnerabilities from being a structural risk to the network (see https://github.com/bitcoin/bitcoin/pull/6795).

    Minimum relay fee default increase

    The default for the `-minrelaytxfee` setting has been increased from `0.00001` to `0.00005`.

    This is antemporary measure, bridging the time until a dynamic method for determining this fee is merged (which will be in 0.12).

    (see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 11.3 release notes, in which this value was suggested)

    Windows bug fix for corrupted UTXO database on unclean shutdowns

    Several Windows users of the upstream Bitcoin Core software reported that they often need to reindex the entire blockchain after an unclean shutdown of Bitcoin on Windows (or an unclean shutdown of Windows itself). Although unclean shutdowns remain unsafe, this release no longer relies on memory-mapped files for the UTXO database, which significantly reduced the frequency of unclean shutdowns leading to required reindexes during testing.

    For more information, see: <https://github.com/bitcoin/bitcoin/pull/6917>

    Other fixes for database corruption on Windows are expected in the next major release.

    10.4 Change log

    Detailed release notes follow. This overview includes changes that affect external behavior, not code moves, refactors or string updates.

    RPC:

    • `f923c07` Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhost
    • `b641c9c` Fix addnode "onetry": Connect with OpenNetworkConnection
    • `171ca77` estimatefee / estimatepriority RPC methods
    • `b750cf1` Remove cli functionality from bitcoind
    • `f6984e8` Add "chain" to getmininginfo, improve help in getblockchaininfo
    • `99ddc6c` Add nLocalServices info to RPC getinfo
    • `cf0c47b` Remove getwork() RPC call
    • `2a72d45` prioritisetransaction <txid> <priority delta> <priority tx fee>
    • `2ec5a3d` Prevent easy RPC memory exhaustion attack
    • `d4640d7` Added argument to getbalance to include watchonly addresses and fixed errors in balance calculation
    • `83f3543` Added argument to listaccounts to include watchonly addresses
    • `952877e` Showing 'involvesWatchonly' property for transactions returned by 'listtransactions' and 'listsinceblock'. It is only appended when the transaction involves a watchonly address
    • `d7d5d23` Added argument to listtransactions and listsinceblock to include watchonly addresses
    • `f87ba3d` added includeWatchonly argument to 'gettransaction' because it affects balance calculation
    • `0fa2f88` added includedWatchonly argument to listreceivedbyaddress/...account
    • `6c37f7f` `getrawchangeaddress`: fail when keypool exhausted and wallet locked
    • `ff6a7af` getblocktemplate: longpolling support
    • `c4a321f` Add peerid to getpeerinfo to allow correlation with the logs
    • `1b4568c` Add vout to ListTransactions output
    • `b33bd7a` Implement "getchaintips" RPC command to monitor blockchain forks
    • `733177e` Remove size limit in RPC client, keep it in server
    • `6b5b7cb` Categorize rpc help overview
    • `6f2c26a` Closely track mempool byte total. Add "getmempoolinfo" RPC
    • `aa82795` Add detailed network info to getnetworkinfo RPC
    • `01094bd` Don't reveal whether password is <20 or >20 characters in RPC
    • `57153d4` rpc: Compute number of confirmations of a block from block height
    • `ff36cbe` getnetworkinfo: export local node's client sub-version string
    • `d14d7de` SanitizeString: allow '(' and ')'
    • `31d6390` Fixed setaccount accepting foreign address
    • `b5ec5fe` update getnetworkinfo help with subversion
    • `ad6e601` RPC additions after headers-first
    • `33dfbf5` rpc: Fix leveldb iterator leak, and flush before `gettxoutsetinfo`
    • `f877aaa` submitblock: Use a temporary CValidationState to determine accurately the outcome of ProcessBlock
    • `e69a587` submitblock: Support for returning specific rejection reasons
    • `af82884` Add "warmup mode" for RPC server
    • `e2655e0` Add unauthenticated HTTP REST interface to public blockchain data
    • `683dc40` Disable SSLv3 (in favor of TLS) for the RPC client and server
    • `44b4c0d` signrawtransaction: validate private key
    • `9765a50` Implement BIP 23 Block Proposal
    • `f9de17e` Add warning comment to getinfo
    • `7f502be` fix crash: createmultisig and addmultisigaddress
    • `eae305f` Fix missing lock in submitblock

    Command-line options:

    • `ee21912` Use netmasks instead of wildcards for IP address matching
    • `deb3572` Add `-rpcbind` option to allow binding RPC port on a specific interface
    • `96b733e` Add `-version` option to get just the version
    • `1569353` Add `-stopafterblockimport` option
    • `77cbd46` Let -zapwallettxes recover transaction meta data
    • `1c750db` remove -tor compatibility code (only allow -onion)
    • `4aaa017` rework help messages for fee-related options
    • `4278b1d` Clarify error message when invalid -rpcallowip
    • `6b407e4` -datadir is now allowed in config files
    • `bdd5b58` Add option `-sysperms` to disable 077 umask (create new files with system default umask)
    • `cbe39a3` Add "bitcoin-tx" command line utility and supporting modules
    • `dbca89b` Trigger -alertnotify if network is upgrading without you
    • `ad96e7c` Make -reindex cope with out-of-order blocks
    • `16d5194` Skip reindexed blocks individually
    • `ec01243` --tracerpc option for regression tests
    • `f654f00` Change -genproclimit default to 1
    • `3c77714` Make -proxy set all network types, avoiding a connect leak
    • `57be955` Remove -printblock, -printblocktree, and -printblockindex
    • `ad3d208` remove -maxorphanblocks config parameter since it is no longer functional

    Block and transaction handling:

    • `7a0e84d` ProcessGetData(): abort if a block file is missing from disk
    • `8c93bf4` LoadBlockIndexDB(): Require block db reindex if any `blk*.dat` files are missing
    • `77339e5` Get rid of the static chainMostWork (optimization)
    • `4e0eed8` Allow ActivateBestChain to release its lock on cs_main
    • `18e7216` Push cs_mains down in ProcessBlock
    • `fa126ef` Avoid undefined behavior using CFlatData in CScript serialization
    • `7f3b4e9` Relax IsStandard rules for pay-to-script-hash transactions
    • `c9a0918` Add a skiplist to the CBlockIndex structure
    • `bc42503` Use unordered_map for CCoinsViewCache with salted hash (optimization)
    • `d4d3fbd` Do not flush the cache after every block outside of IBD (optimization)
    • `ad08d0b` Bugfix: make CCoinsViewMemPool support pruned entries in underlying cache
    • `5734d4d` Only remove actually failed blocks from setBlockIndexValid
    • `d70bc52` Rework block processing benchmark code
    • `714a3e6` Only keep setBlockIndexValid entries that are possible improvements
    • `ea100c7` Reduce maximum coinscache size during verification (reduce memory usage)
    • `4fad8e6` Reject transactions with excessive numbers of sigops
    • `b0875eb` Allow BatchWrite to destroy its input, reducing copying (optimization)
    • `92bb6f2` Bypass reloading blocks from disk (optimization)
    • `2e28031` Perform CVerifyDB on pcoinsdbview instead of pcoinsTip (reduce memory usage)
    • `ab15b2e` Avoid copying undo data (optimization)
    • `341735e` Headers-first synchronization
    • `afc32c5` Fix rebuild-chainstate feature and improve its performance
    • `e11b2ce` Fix large reorgs
    • `ed6d1a2` Keep information about all block files in memory
    • `a48f2d6` Abstract context-dependent block checking from acceptance
    • `7e615f5` Fixed mempool sync after sending a transaction
    • `51ce901` Improve chainstate/blockindex disk writing policy
    • `a206950` Introduce separate flushing modes
    • `9ec75c5` Add a locking mechanism to IsInitialBlockDownload to ensure it never goes from false to true
    • `868d041` Remove coinbase-dependant transactions during reorg
    • `723d12c` Remove txn which are invalidated by coinbase maturity during reorg
    • `0cb8763` Check against MANDATORY flags prior to accepting to mempool
    • `8446262` Reject headers that build on an invalid parent
    • `008138c` Bugfix: only track UTXO modification after lookup
    • `1d2cdd2` Fix InvalidateBlock to add chainActive.Tip to setBlockIndexCandidates
    • `c91c660` fix InvalidateBlock to repopulate setBlockIndexCandidates
    • `002c8a2` fix possible block db breakage during re-index
    • `a1f425b` Add (optional) consistency check for the block chain data structures
    • `1c62e84` Keep mempool consistent during block-reorgs
    • `57d1f46` Fix CheckBlockIndex for reindex
    • `bac6fca` Set nSequenceId when a block is fully linked

    P2P protocol and network code:

    • `f80cffa` Do not trigger a DoS ban if SCRIPT_VERIFY_NULLDUMMY fails
    • `c30329a` Add testnet DNS seed of Alex Kotenko
    • `45a4baf` Add testnet DNS seed of Andreas Schildbach
    • `f1920e8` Ping automatically every 2 minutes (unconditionally)
    • `806fd19` Allocate receive buffers in on the fly
    • `6ecf3ed` Display unknown commands received
    • `aa81564` Track peers' available blocks
    • `caf6150` Use async name resolving to improve net thread responsiveness
    • `9f4da19` Use pong receive time rather than processing time
    • `0127a9b` remove SOCKS4 support from core and GUI, use SOCKS5
    • `40f5cb8` Send rejects and apply DoS scoring for errors in direct block validation
    • `dc942e6` Introduce whitelisted peers
    • `c994d2e` prevent SOCKET leak in BindListenPort()
    • `a60120e` Add built-in seeds for .onion
    • `60dc8e4` Allow -onlynet=onion to be used
    • `3a56de7` addrman: Do not propagate obviously poor addresses onto the network
    • `6050ab6` netbase: Make SOCKS5 negotiation interruptible
    • `604ee2a` Remove tx from AlreadyAskedFor list once we receive it, not when we process it
    • `efad808` Avoid reject message feedback loops
    • `71697f9` Separate protocol versioning from clientversion
    • `20a5f61` Don't relay alerts to peers before version negotiation
    • `b4ee0bd` Introduce preferred download peers
    • `845c86d` Do not use third party services for IP detection
    • `12a49ca` Limit the number of new addresses to accumulate
    • `35e408f` Regard connection failures as attempt for addrman
    • `a3a7317` Introduce 10 minute block download timeout
    • `3022e7d` Require sufficent priority for relay of free transactions
    • `58fda4d` Update seed IPs, based on bitcoin.sipa.be crawler data
    • `18021d0` Remove bitnodes.io from dnsseeds.
    • `78f64ef` don't trickle for whitelisted nodes
    • `ca301bf` Reduce fingerprinting through timestamps in 'addr' messages.
    • `200f293` Ignore getaddr messages on Outbound connections.
    • `d5d8998` Limit message sizes before transfer
    • `aeb9279` Better fingerprinting protection for non-main-chain getdatas.
    • `cf0218f` Make addrman's bucket placement deterministic (countermeasure 1 against eclipse attacks, see http://cs-people.bu.edu/heilman/eclipse/)
    • `0c6f334` Always use a 50% chance to choose between tried and new entries (countermeasure 2 against eclipse attacks)
    • `214154e` Do not bias outgoing connections towards fresh addresses (countermeasure 2 against eclipse attacks)
    • `aa587d4` Scale up addrman (countermeasure 6 against eclipse attacks)
    • `139cd81` Cap nAttempts penalty at 8 and switch to pow instead of a division loop

    Validation:

    • `6fd7ef2` Also switch the (unused) verification code to low-s instead of even-s
    • `584a358` Do merkle root and txid duplicates check simultaneously
    • `217a5c9` When transaction outputs exceed inputs, show the offending amounts so as to aid debugging
    • `f74fc9b` Print input index when signature validation fails, to aid debugging
    • `6fd59ee` script.h: set_vch() should shift a >32 bit value
    • `d752ba8` Add SCRIPT_VERIFY_SIGPUSHONLY (BIP62 rule 2) (test only)
    • `698c6ab` Add SCRIPT_VERIFY_MINIMALDATA (BIP62 rules 3 and 4) (test only)
    • `ab9edbd` script: create sane error return codes for script validation and remove logging
    • `219a147` script: check ScriptError values in script tests
    • `0391423` Discourage NOPs reserved for soft-fork upgrades
    • `98b135f` Make STRICTENC invalid pubkeys fail the script rather than the opcode
    • `307f7d4` Report script evaluation failures in log and reject messages
    • `ace39db` consensus: guard against openssl's new strict DER checks
    • `12b7c44` Improve robustness of DER recoding code
    • `76ce5c8` fail immediately on an empty signature
    • `d148f62` Acquire CCheckQueue's lock to avoid race condition

    Build system:

    • `f25e3ad` Fix build in OS X 10.9
    • `65e8ba4` build: Switch to non-recursive make
    • `460b32d` build: fix broken boost chrono check on some platforms
    • `9ce0774` build: Fix windows configure when using --with-qt-libdir
    • `ea96475` build: Add mention of --disable-wallet to bdb48 error messages
    • `1dec09b` depends: add shared dependency builder
    • `c101c76` build: Add --with-utils (bitcoin-cli and bitcoin-tx, default=yes). Help string consistency tweaks. Target sanity check fix
    • `e432a5f` build: add option for reducing exports (v2)
    • `6134b43` Fixing condition 'sabotaging' MSVC build
    • `af0bd5e` osx: fix signing to make Gatekeeper happy (again)
    • `a7d1f03` build: fix dynamic boost check when --with-boost= is used
    • `d5fd094` build: fix qt test build when libprotobuf is in a non-standard path
    • `2cf5f16` Add libbitcoinconsensus library
    • `914868a` build: add a deterministic dmg signer 
    • `2d375fe` depends: bump openssl to 1.0.1k
    • `b7a4ecc` Build: Only check for boost when building code that requires it
    • `8752b5c` 0.10 fix for crashes on OSX 10.6

    Wallet:

    • `b33d1f5` Use fee/priority estimates in wallet CreateTransaction
    • `4b7b1bb` Sanity checks for estimates
    • `c898846` Add support for watch-only addresses
    • `d5087d1` Use script matching rather than destination matching for watch-only
    • `d88af56` Fee fixes
    • `a35b55b` Don't run full check every time we decrypt wallet
    • `3a7c348` Fix make_change to not create half-satoshis
    • `f606bb9` fix a possible memory leak in CWalletDB::Recover
    • `870da77` fix possible memory leaks in CWallet::EncryptWallet
    • `ccca27a` Watch-only fixes
    • `9b1627d` [Wallet] Reduce minTxFee for transaction creation to 1000 satoshis
    • `a53fd41` Deterministic signing
    • `15ad0b5` Apply AreSane() checks to the fees from the network
    • `11855c1` Enforce minRelayTxFee on wallet created tx and add a maxtxfee option
    • `824c011` fix boost::get usage with boost 1.58

    GUI:

    • `c21c74b` osx: Fix missing dock menu with qt5
    • `b90711c` Fix Transaction details shows wrong To:
    • `516053c` Make links in 'About Bitcoin Core' clickable
    • `bdc83e8` Ensure payment request network matches client network
    • `65f78a1` Add GUI view of peer information
    • `06a91d9` VerifyDB progress reporting
    • `fe6bff2` Add BerkeleyDB version info to RPCConsole
    • `b917555` PeerTableModel: Fix potential deadlock. #4296
    • `dff0e3b` Improve rpc console history behavior
    • `95a9383` Remove CENT-fee-rule from coin control completely
    • `56b07d2` Allow setting listen via GUI
    • `d95ba75` Log messages with type>QtDebugMsg as non-debug
    • `8969828` New status bar Unit Display Control and related changes
    • `674c070` seed OpenSSL PNRG with Windows event data
    • `509f926` Payment request parsing on startup now only changes network if a valid network name is specified
    • `acd432b` Prevent balloon-spam after rescan
    • `7007402` Implement SI-style (thin space) thoudands separator
    • `91cce17` Use fixed-point arithmetic in amount spinbox
    • `bdba2dd` Remove an obscure option no-one cares about
    • `bd0aa10` Replace the temporary file hack currently used to change Bitcoin-Qt's dock icon (OS X) with a buffer-based solution
    • `94e1b9e` Re-work overviewpage UI
    • `8bfdc9a` Better looking trayicon
    • `b197bf3` disable tray interactions when client model set to 0
    • `1c5f0af` Add column Watch-only to transactions list
    • `21f139b` Fix tablet crash. closes #4854
    • `e84843c` Broken addresses on command line no longer trigger testnet
    • `a49f11d` Change splash screen to normal window
    • `1f9be98` Disable App Nap on OSX 10.9+
    • `27c3e91` Add proxy to options overridden if necessary
    • `4bd1185` Allow "emergency" shutdown during startup
    • `d52f072` Don't show wallet options in the preferences menu when running with -disablewallet
    • `6093aa1` Qt: QProgressBar CPU-Issue workaround
    • `0ed9675` [Wallet] Add global boolean whether to send free transactions (default=true)
    • `ed3e5e4` [Wallet] Add global boolean whether to pay at least the custom fee (default=true)
    • `e7876b2` [Wallet] Prevent user from paying a non-sense fee
    • `c1c9d5b` Add Smartfee to GUI
    • `e0a25c5` Make askpassphrase dialog behave more sanely
    • `94b362d` On close of splashscreen interrupt verifyDB
    • `b790d13` English translation update
    • `8543b0d` Correct tooltip on address book page
    • `2c08406` some mac specifiy cleanup (memory handling, unnecessary code)
    • `81145a6` fix OSX dock icon window reopening
    • `786cf72` fix a issue where "command line options"-action overwrite "Preference"-action (on OSX)

    Tests:

    • `b41e594` Fix script test handling of empty scripts
    • `d3a33fc` Test CHECKMULTISIG with m == 0 and n == 0
    • `29c1749` Let tx (in)valid tests use any SCRIPT_VERIFY flag
    • `6380180` Add rejection of non-null CHECKMULTISIG dummy values
    • `21bf3d2` Add tests for BoostAsioToCNetAddr
    • `b5ad5e7` Add Python test for -rpcbind and -rpcallowip
    • `9ec0306` Add CODESEPARATOR/FindAndDelete() tests
    • `75ebced` Added many rpc wallet tests
    • `0193fb8` Allow multiple regression tests to run at once
    • `92a6220` Hook up sanity checks
    • `3820e01` Extend and move all crypto tests to crypto_tests.cpp
    • `3f9a019` added list/get received by address/ account tests
    • `a90689f` Remove timing-based signature cache unit test
    • `236982c` Add skiplist unit tests
    • `f4b00be` Add CChain::GetLocator() unit test
    • `b45a6e8` Add test for getblocktemplate longpolling
    • `cdf305e` Set -discover=0 in regtest framework
    • `ed02282` additional test for OP_SIZE in script_valid.json
    • `0072d98` script tests: BOOLAND, BOOLOR decode to integer
    • `833ff16` script tests: values that overflow to 0 are true
    • `4cac5db` script tests: value with trailing 0x00 is true
    • `89101c6` script test: test case for 5-byte bools
    • `d2d9dc0` script tests: add tests for CHECKMULTISIG limits
    • `d789386` Add "it works" test for bitcoin-tx
    • `df4d61e` Add bitcoin-tx tests
    • `aa41ac2` Test IsPushOnly() with invalid push
    • `6022b5d` Make `script_{valid,invalid}.json` validation flags configurable
    • `8138cbe` Add automatic script test generation, and actual checksig tests
    • `ed27e53` Add coins_tests with a large randomized CCoinViewCache test
    • `9df9cf5` Make SCRIPT_VERIFY_STRICTENC compatible with BIP62
    • `dcb9846` Extend getchaintips RPC test
    • `554147a` Ensure MINIMALDATA invalid tests can only fail one way
    • `dfeec18` Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule
    • `2b62e17` Clearly separate PUSHDATA and numeric argument MINIMALDATA tests
    • `16d78bd` Add valid invert of invalid every numeric opcode tests
    • `f635269` tests: enable alertnotify test for Windows
    • `7a41614` tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment
    • `5122ea7` tests: fix forknotify.py on windows
    • `fa7f8cd` tests: remove old pull-tester scripts
    • `7667850` tests: replace the old (unused since Travis) tests with new rpc test scripts
    • `f4e0aef` Do signature-s negation inside the tests
    • `1837987` Optimize -regtest setgenerate block generation
    • `2db4c8a` Fix node ranges in the test framework
    • `a8b2ce5` regression test only setmocktime RPC call
    • `daf03e7` RPC tests: create initial chain with specific timestamps
    • `8656dbb` Port/fix txnmall.sh regression test
    • `ca81587` Test the exact order of CHECKMULTISIG sig/pubkey evaluation
    • `7357893` Prioritize and display -testsafemode status in UI
    • `f321d6b` Add key generation/verification to ECC sanity check
    • `132ea9b` miner_tests: Disable checkpoints so they don't fail the subsidy-change test
    • `bc6cb41` QA RPC tests: Add tests block block proposals
    • `f67a9ce` Use deterministically generated script tests
    • `11d7a7d` [RPC] add rpc-test for http keep-alive (persistent connections)
    • `34318d7` RPC-test based on invalidateblock for mempool coinbase spends
    • `76ec867` Use actually valid transactions for script tests
    • `c8589bf` Add actual signature tests
    • `e2677d7` Fix smartfees test for change to relay policy
    • `263b65e` tests: run sanity checks in tests too
    • `1117378` add RPC test for InvalidateBlock

    Miscellaneous:

    • `122549f` Fix incorrect checkpoint data for testnet3
    • `5bd02cf` Log used config file to debug.log on startup
    • `68ba85f` Updated Debian example bitcoin.conf with config from wiki + removed some cruft and updated comments
    • `e5ee8f0` Remove -beta suffix
    • `38405ac` Add comment regarding experimental-use service bits
    • `be873f6` Issue warning if collecting RandSeed data failed
    • `8ae973c` Allocate more space if necessary in RandSeedAddPerfMon
    • `675bcd5` Correct comment for 15-of-15 p2sh script size
    • `fda3fed` libsecp256k1 integration
    • `2e36866` Show nodeid instead of addresses in log (for anonymity) unless otherwise requested
    • `cd01a5e` Enable paranoid corruption checks in LevelDB >= 1.16
    • `9365937` Add comment about never updating nTimeOffset past 199 samples
    • `403c1bf` contrib: remove getwork-based pyminer (as getwork API call has been removed)
    • `0c3e101` contrib: Added systemd .service file in order to help distributions integrate bitcoind
    • `0a0878d` doc: Add new DNSseed policy
    • `2887bff` Update coding style and add .clang-format
    • `5cbda4f` Changed LevelDB cursors to use scoped pointers to ensure destruction when going out of scope
    • `b4a72a7` contrib/linearize: split output files based on new-timestamp-year or max-file-size
    • `e982b57` Use explicit fflush() instead of setvbuf()
    • `234bfbf` contrib: Add init scripts and docs for Upstart and OpenRC
    • `01c2807` Add warning about the merkle-tree algorithm duplicate txid flaw
    • `d6712db` Also create pid file in non-daemon mode
    • `772ab0e` contrib: use batched JSON-RPC in linarize-hashes (optimization)
    • `7ab4358` Update bash-completion for v0.10
    • `6e6a36c` contrib: show pull # in prompt for github-merge script
    • `5b9f842` Upgrade leveldb to 1.18, make chainstate databases compatible between ARM and x86 (issue #2293)
    • `4e7c219` Catch UTXO set read errors and shutdown
    • `867c600` Catch LevelDB errors during flush
    • `06ca065` Fix CScriptID(const CScript& in) in empty script case
    • `c9e022b` Initialization: set Boost path locale in main thread
    • `23126a0` Sanitize command strings before logging them.
    • `323de27` Initialization: setup environment before starting Qt tests
    • `7494e09` Initialization: setup environment before starting tests
    • `df45564` Initialization: set fallback locale as environment variable
    • `da65606` Avoid crash on start in TestBlockValidity with gen=1.
    • `424ae66` don't imbue boost::filesystem::path with locale "C" on windows (fixes #6078)

    For convenience in locating the code changes and accompanying discussion, the following changes reference both the pull request and git merge commit.

    Bitcoin Core pull requests

    • #6186 `e4a7d51` Fix two problems in CSubnet parsing
    • #6153 `ebd7d8d` Parameter interaction: disable upnp if -proxy set
    • #6203 `ecc96f5` Remove P2SH coinbase flag, no longer interesting
    • #6226 `181771b` json: fail read_string if string contains trailing garbage
    • #6244 `09334e0` configure: Detect (and reject) LibreSSL
    • #6276 `0fd8464` Fix getbalance * 0
    • #6274 `be64204` Add option `-alerts` to opt out of alert system
    • #6319 `3f55638` doc: update mailing list address
    • #6438 `7e66e9c` openssl: avoid config file load/race
    • #6439 `255eced` Updated URL location of netinstall for Debian
    • #6412 `0739e6e` Test whether created sockets are select()able
    • #6694 `f696ea1` [QT] fix thin space word wrap line brake issue
    • #6704 `743cc9e` Backport bugfixes to 0.10
    • #6769 `1cea6b0` Test LowS in standardness, removes nuisance malleability vector.
    • #6789 `093d7b5` Update miniupnpc to 1.9.20151008
    • #6795 `f2778e0` net: Disable upnp by default
    • #6797 `91ef4d9` Do not store more than 200 timedata samples
    • #6793 `842c48d` Bump minrelaytxfee default
    • #6953 `8b3311f` alias -h for --help
    • #6953 `97546fc` Change URLs to https in debian/control
    • #6953 `38671bf` Update debian/changelog and slight tweak to debian/control
    • #6953 `256321e` Correct spelling mistakes in doc folder
    • #6953 `eae0350` Clarification of unit test build instructions
    • #6953 `90897ab` Update bluematt-key, the old one is long-since revoked
    • #6953 `a2f2fb6` build: disable -Wself-assign
    • #6953 `cf67d8b` Bugfix: Allow mining on top of old tip blocks for testnet (fixes testnet-in-a-box use case)
    • #6953 `b3964e3` Drop "with minimal dependencies" from description
    • #6953 `43c2789` Split freicoin-tx into its own package
    • #6953 `dfe0d4d` Include freicoin-tx binary on Debian/Ubuntu
    • #6953 `612efe8` [Qt] Raise debug window when requested
    • #6953 `3ad96bd` Fix locking in GetTransaction
    • #6953 `9c81005` Fix spelling of Qt
    • #6946 `94b67e5` Update LevelDB
    • #6706 `5dc72f8` CLTV: Add more tests to improve coverage
    • #6706 `6a1343b` Add RPC tests for the CHECKLOCKTIMEVERIFY (BIP65) soft-fork
    • #6706 `4137248` Add CHECKLOCKTIMEVERIFY (BIP65) soft-fork logic
    • #6706 `0e01d0f` Enable CHECKLOCKTIMEVERIFY as a standard script verify flag
    • #6706 `6d01325` Replace NOP2 with CHECKLOCKTIMEVERIFY (BIP65)
    • #6706 `750d54f` Move LOCKTIME_THRESHOLD to src/script/script.h
    • #6706 `6897468` Make CScriptNum() take nMaxNumSize as an argument
    • #6867 `5297194` Set TCP_NODELAY on P2P sockets
    • #6836 `fb818b6` Bring historical release notes up to date
    • #6852 `0b3fd07` build: make sure OpenSSL heeds noexecstack

    Tradecraft pull requests

    • #23 `9f12779` [Demurrage] Add inverse-demurrage calculations, permitting GetTimeAdjustedValue to be called with negative relative_depth values and yield reasonable results.
    • #23 `6ca19e0` [Alert] Do not warn that an upgrade is required when unrecognized block versions have been observed.
    • #24 `2289825` [Branding] Update macOS icon file to use new Freicoin kria logo.
    • #26 `8333769` [Hard-Fork] Implement time-activated "protocol cleanup" flag-day hard-fork, set to activate in April 2021.
    • #28 `d9b93a4` [Standard] Remove SCRIPT_VERIFY_NULLDUMMY from the standard verification flags.
    • #29 `62ce0e7` [Soft-fork] Require the nTimeLock value of a coinbase transaction to be equal to the median of the past 11 block times.

    Credits

    Thanks to everyone who contributed to this release:

    • 21E14
    • Adam Weiss
    • Aitor Pazos
    • Alex Morcos
    • Alexander Jeng
    • Alon Muroch
    • Andreas Schildbach
    • Andrew Poelstra
    • Andy Alness
    • Ashley Holman
    • Ben Holden-Crowther
    • Benedict Chan
    • Bryan Bishop
    • BtcDrak
    • Casey Rodarmor
    • Christian von Roques
    • Clinton Christian
    • Cory Fields
    • Cozz Lovan
    • daniel
    • Daniel Cousens
    • Daniel Kraft
    • David Hill
    • Derek701
    • dexX7
    • Diego Viola
    • dllud
    • Dominyk Tiller
    • Doug
    • elichai
    • elkingtowa
    • ENikS
    • Eric Lombrozo
    • Eric Shaw
    • Esteban Ordano
    • fanquake
    • Federico Bond
    • Francis GASCHET
    • Fredrik Bodin
    • fsb4000
    • Gavin Andresen
    • Giuseppe Mazzotta
    • Glenn Willen
    • Gregory Maxwell
    • gubatron
    • HarryWu
    • himynameismartin
    • Huang Le
    • Ian Carroll
    • imharrywu
    • Ivan Pustogarov
    • J Ross Nicoll
    • Jameson Lopp
    • Janusz Lenar
    • JaSK
    • Jeff Garzik
    • JL2035
    • Johnathan Corgan
    • Jonas Schnelli
    • jtimon
    • Julian Haight
    • Kamil Domanski
    • Karl Johan Alm
    • kazcw
    • kevin
    • kiwigb
    • Kosta Zertsekel
    • LongShao007
    • Luke Dashjr
    • MarcoFalke
    • Mark Friedenbach
    • Mathy Vanvoorden
    • Matt Corallo
    • Matthew Bogosian
    • Micha
    • Michael Ford
    • Mike Hearn
    • Mitchell Cash
    • mrbandrews
    • mruddy
    • ntrgn
    • Otto Allmendinger
    • Pavel Vasin
    • paveljanik
    • Peter Todd
    • phantomcircuit
    • Philip Kaufmann
    • Pieter Wuille
    • pryds
    • R E Broadley
    • randy-waterhouse
    • Rose Toomey
    • Ross Nicoll
    • Roy Badami
    • Ruben Dario Ponticelli
    • Ruben de Vries
    • Rune K. Svendsen
    • Ryan X. Charles
    • Saivann
    • sandakersmann
    • SergioDemianLerner
    • shshshsh
    • sinetek
    • Stuart Cardall
    • Suhas Daftuar
    • Tawanda Kembo
    • Teran McKinney
    • tm314159
    • Tom Harding
    • Trevin Hofmann
    • Veres Lajos
    • Whit J
    • Wladimir J. van der Laan
    • Yoichi Hirai
    • Zak Wilcox
    • ฿tcDrak

    And all those who contributed additional code review and/or security research:

    • 21E14
    • Alison Kendler
    • Aviv Zohar
    • dexX7
    • Ethan Heilman
    • Evil-Knievel
    • fanquake
    • Fredrik Bodin
    • Jeff Garzik
    • Jonas Nick
    • Luke Dashjr
    • Patrick Strateman
    • Philip Kaufmann
    • Pieter Wuille
    • Sergio Demian Lerner
    • Sharon Goldberg
    • timothy on IRC for reporting the issue
    • vayvanne
    • Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos

    As well as everyone that helped translating on Transifex.

  12. Freicoin version 0.9.5.1 is now available from:

    This is a new minor version release, with the goal of backporting soft-fork activation rules for verification of the coinbase transaction's nLockTime field. There is also a modification of the wallet code to produce low-S signatures, and various bug fixes. Upgrading to this release is recommended.

    Please report bugs using the issue tracker at github:

      https://github.com/tradecraftio/tradecraft/issues

    How to Upgrade

    If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Freicoin-Qt (on Mac) or freicoind/freicoin-qt (on Linux).

    Notable changes

    Soft-fork activation rules for coinbase nLockTime

    This rule update requires the nTimeLock value of a coinbase transaction to be equal to the median of the past 11 block times. It uses an old-style supermajority rollout with BIP8/BIP9-like version bits and BIP8-like activation-on-timeout semantics. It's not strictly compatible with those BIPs though, as we didn't want to back port all the necessary state management code. But miners using BIP8/BIP9 compatible version bit software should work with this rollout by configuring their devices to signal bit #28 (the highest-order BIP8/BIP9 bit).

    Wallet generates signatures with low-S value

    The prior release included a modification to the wallet signing code to produce signatures with quadratic residue R values rather than low (< half the order) S values. Given the structure of the signing code, we can actually do both, and this release always generates quadratic R, low S signatures.

    Remove version-upgrade warnings

    The version upgrade warning implemented in the 0.9 series is unable to properly handle version bits signaling, and falsely identifies BIP8 / BIP9 blocks as being produced by a future version, thereby triggering upgrade warnings on up-to-date clients. This upgrade warning has been removed; future releases will include proper handling for version-bits blocks.

    Reverse demurrage code

    Example code, currently unused, is provided for doing "reverse" demurrage calculations, taking a present value amount and calculating what it would have been at an earlier epoch. This fast code uses only fixed-point integer math.

    Build system upgrades

    Due to deprecation of some build dependencies, the build system has been modified to bootstrap itself from alternative sources.

    0.9.5.1 changelog

    • `59cb913b` [Soft-fork] Require the nTimeLock value of a coinbase transaction to be equal to the median of the past 11 block times.
    • `e62b1f35` [OpenSSL] Generate signatures with low-S values.
    • `e37ec652` [Alert] Do not warn that an upgrade is required when unrecognized block versions have been observed.
    • `9f12779b` [Demurrage] Add inverse-demurrage calculations, permitting GetTimeAdjustedValue to be called with negative relative_depth values and yield reasonable results.
    • `04006641` [Vagrant] Switch to our own hosted macOS 10.7 SDK dependency, required for pre-0.11 releases.
    • `9f399309` [Vagrant] Update download URL for libpng-1.6.8.tar.gz, since the original server is no longer online.
    • `eec192d4` [Vagrant] Update from Ubuntu 16.04.4 to 16.04.5, since the .4 images are no longer hosted by Canonical.

    Credits

    Thanks to who contributed to this release, including:

    • Fredrik Bodin
    • Mark Friedenbach

    As well as everyone that helped translating on Transifex.

  13. One of my nodes is getting a bunch of invalid transactions being sent to it:

    Quote

    ERROR: AcceptToMemoryPool : not enough fees 183a154db8e61cb926dfd56263d7f826d8d2e6b6eee03721a308ed28c0a79081, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 5ae2b6b559073eac520f9c65c61316113b86f617cbb34978cd5616ded4d00ccb, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees 740c4286ae44e193dc4bd5b0a184d356061590a7d68a82b665c28d3dc413c603, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees 61b146e9138d9eb77595a8c2bc61f4b56eca8380329bcf183230a23ba8a583cc, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees 19629adf8cdfa808a4401a0519d2977c4e25848061360c0ad036d258db2b4678, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees c25a1dbb2158b64091a3b19003b363fdf7a74aa42a75064d7cefbd6a798029d0, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 49270f09541e62a3458b861d269889c436a853b722d7ee6a9db863805cf706f1, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 003d348c80c3238f9154d59f360736d4f3cf3cef707c7e69392a82a44832ba83, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 31c6b8767a7b1d7ab8ca6ef97d44749982324d8437cf15efd55e042bdc75afa4, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees b2ed7e6d8901fb8a9e075156e1ee34ee99687383919733abf4c479713b65481f, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees d15c5233c0a843e73e96e67883cb22ed8e371668ae6c5309dea71726c0162aa1, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees f57e5c7c1fe5c26ad27b68e57737d3c64dd8169c09654f4bf7201994d4187c5c, -3 < 0

    ERROR: AcceptToMemoryPool : not enough fees 3ae7811461534c17bc7af1dd24873700d3063da16321bcacf93e95fa5d007320, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees 7e0185157bda36cee6899d087a98b7e80a8c9e35b83c3ea88f4bf2f978a19ed1, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 2ce13a552799578395edcd61064d957924aa0eb2767d9c4fe00da27b03c5c179, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 511e5524de4dadea042d251ee52da355b0c81d43319fe98781c2d22bef398354, -3 < 0

    ERROR: AcceptToMemoryPool : not enough fees f62cd014e974332254176c5f286c438aa7ca41cbe29371ddd03af9ac9e73ec39, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees 6b9ab369b7b331eb4540a4c211ee6c9002416b2a0529924039e02dd9e299ab2d, -3 < 0

    ERROR: AcceptToMemoryPool : not enough fees cbcb220ba1c426613adb3e0725e9e3564601218e24c5af8808a131f97ef291f9, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees ce2da5cb1225bf518475e70e85701df5c5abc01f5b88dc0e67629c8d973d51a5, -3 < 0

    ERROR: AcceptToMemoryPool : not enough fees 68d3ab150c2bfff7f80a8b1f80d4fd55989b07b96f8a909bedfac0be36df3b78, -1 < 0

    ERROR: AcceptToMemoryPool : not enough fees 1c953f021e9cd64051d0f2849cd10e5b1125b75ee8f1b73a39d98f43a5ac4ddb, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees a3a32cc867d4fa88ef88ebe2f7390eaae826d02a481d3f4cae743ef5914d5047, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 8dab37bf6849ac0105bf4841771100f6bb8f41cbd5096b8a1534c11a771ec842, -2 < 0

    ERROR: AcceptToMemoryPool : not enough fees 819eff31f96ce2fecf5e1b7b3c599c9fd304203ed083e36a2c7398e59f1583b1, -1 < 0

    Given the fact that these transactions are off by only a few kria, it looks like someone is generating zero-fee transactions on a pre-fork wallet. Someone needs to update their wallet and make new transactions!

  14. Look at the reference heights--they're the same. There's no demurrage if the reference height of the tx is the same as its inputs. Someone probably manually created these transactions.

    I'm not sure how ABE works to be honest. Just noticed that when you click on a transaction, the "Fee" field includes the demurrage. Maybe this is a long-standing bug in ABE I just didn't know about.

  15. I didn't realize demurrage was implemented inside of ABE. The RPCs report transaction values and demurrage a little bit more intelligently. Part of why I haven't made a new topic yet is I need to update the release notes to explain better how they work now. What it was doing before really didn't make any sense -- when looking at historical data it would show the transaction 'value' as the present adjusted value, and demurrage wasn't reported or worse it was part of the fee, etc.

    Now if you are using a certain wallet RPCs (getbalance with no arguments, listunspent) it will show the present value, as this is what is available for spend. But otherwise it shows the value at the refheight of the transaction, and specifies what that refheight is. For inputs/spends, it reports BOTH fee and demurrage separately.

    So if you call 'gettransaction txid' is will tell you the sum of the outputs (no adjustment to present value), the specified ref height, and both the value in, fee, and demurrage components of the input separately. If you call 'getbalance' it will tell you the currently spendable amount as of the height of the next block. But if you call 'getbalance account' (including 'getbalance *') it will tell you the total received without adjusting for demurrage. This actually makes accounts useful, but probably isn't relevant to the explorer.

    So you probably don't need to do the demurrage calculation yourself, and should just fix the explorer to use the values output by Freicoin now. It sounds like you were fixing it yourself before, and Freicoin should be reporting it in a useful form now.

  16. Yes and no, mostly no. “Sharding” is the term for splitting a single block chain into multiple chains sharing the same assets, which solves a latency problem fundamental to scaling and improves resistance to certain forms of adversarial attack. But a miner must still track all chains, or else forego the income involved. If we have so much activity across all the chains such that a single person cannot run a full node on ALL chains using the same PoW, then the whole system can no longer be decentralized.

    But things like efficient atomic swaps using adapter signatures, HTLC payment channel updates, and submarine swaps mean that we don’t need to strive for direct interoperability so long as we have some level of crypto compatibility (same OP_HASH256 and same ECDSA or Schnorr signature algorithm).

  17. Yup, pushed the code for the next release: v0.9.5.0-6. Everything seems good on my end.. just wanted to pull the release notes together for an official announcement. It's usable if you want to upgrade though. In fact, I'd highly recommend it as it comes with significant security updates.

    I've updated the download links on the main website for the gitian-built binaries. Also in the good news: macOS builds are back.

  18. Sidechains and merge mining have their own intractable problems, and in particular they do not mix together very well (merge mining makes the sidechain problems worse, and vice versa). If freicoin were to be sidechain to another chain, it would have to either (1) be a separate proof of work, or (2) have all full nodes of both chains validate each other, an idea more commonly known as extension blocks. Setting freicoin up as a separately mined chain with a different proof of work (and therefore different hardware distribution) prepares for the first possibility while not excluding the second. But in reality I expect that freicoin will remain different from bitcoin and other coins, and not an active sidechain, except perhaps via strong federations or higher level protocols using cross-chain payment channels.

    There is at least one person I know who has made a recent ASIC purchase for freicoin mining, and I would hate to invalidate that investment. But the transition period also serves the purpose of having incentive for securing the sha256 portion of the network for some time to come, which helps protect other full nodes. In fact, current full nodes will be able to sync indefinitely into the future, even after the transition is complete, as the difficulty will have transitioned back down to diff-1, and all cuckoo cycle blocks will require a follow-up diff-1 sha256 block in order for the cuckoo cycle miners to actually collect their payment -- the trick which makes the soft-fork deployment possible.

  19. Regarding ASIC reistance, it's a goal that in its strongest form is impossible. You cannot have an ASIC-reistant proof of work, and if someone is trying to tell you otherwise that's a good indicator you're dealing with a crank (or they're trying to sell you something). Anything you can do with a general application-agnostic circuit you can do more efficiently in a specialized circuit. This follows straight from information theory.

    HOWEVER, there is a weak form of ASIC-resistance which is interesting to note. With double-SHA256, GPUs are 100-1,000x more efficient than CPUs, FPGAs are 100-1,000x more efficient than GPUs, and ASICs are an additional 10-100x more efficient. Double-SHA256 ccould hardly be more ASCI-friendly. So the weak form of ASIC-resistance is an algorithm which, when implemented in specialized hardware, has the smallest possible advantage when when compared against consumer hardware like vector CPUs or GPUs. With Cuckoo Cycle, for example, the advantage gained by ASICs over GPUs is only an (estimated) 2-4x. Compare that with the more than thousand-fold improvement double-SHA256 sees.

    Why does this matter? Because in the event of an attack on the network, a disadvantage of 2-4x can be overcome by a wide decentralized base of users, perhaps motivated by investors favoring the decentralized chain over the centralized one (e.g. look to the price difference between BTC and BCH). The decentralized chain can withstand an attack by retreating to a popular base of GPU miners. With double-SHA256 however this isn't possible. If non-ASIC bitcoin users wanted to revolt against the ASIC industry, they would find that even if everyone mined they'd only get a block on their chain once a month or so. It would take the better part of a century to see the first hash rate reduction. Even with freicoin's faster difficulty adjustment it would still take years. That's not even close to being a realistic alternative, and therefore any resistance to centralization forces all the problems that come with hard forks.

    Weak ASIC resistance doesn't do anything to boost decentralization, in first order analysis. You'll still see creation of ASICs and their adoption within the mining industry. However it does enable fallback options whose very existance prevents the ills of centralization from happening. These are 2nd-order game theoretic effects.

    We've discussed both proof of stake and paxos consensus models before. The claims of these systems are analagous to perpetual motion machines. I really have no interest in going that direction, and would spilt ways with freicoin if that's what the community wants.

    > Why use a two way proof of work architecture?

    It's a necessary fact of being a soft-fork. The old clients need to see progress being made on double-SHA256 blocks. That's the only reason.

    > Isn't a double spend more easy in a two way proof of work architecture?

    No.

    > How can a simple difficulty algorithm look like?

    That's a bit isomorphic, but the difficulty algorithm would probably look a lot like the one in Freicoin today. The parameters could probably be better optimized, but ultimately the choice of a linear filter was correct is justified by its performance.

×
×
  • Create New...