AXErunners / axe

decentralized cryptocurrency
MIT License
273 stars 115 forks source link

wallet: Fix and improve CWallet::CreateTransaction (#3668) #791

Closed charlesrocket closed 3 days ago

charlesrocket commented 3 days ago

Partial

This parts were needed before when the fee was calculated after the change was assigned. But now with the previous commit the fee is calculated upfront and respected properly from the begining. So there is no longer a need of increasing or decreasing the change depending on the fee as it has the correct value directly after its added.

If nChange is negative in this cases it means that the selected inputs can't cover the amount to send and the required transaction fee. So we just add the missing amount to nFeeRet. This leads to the algo trying to pick larger inputs in the next loop (with nFeeRet more duffs than in the previous loop). This process gets repeated until the selected amount is enough to cover all the costs or until the requested amount can't be selected anymore (not enough utxos to cover it).

Prior it was messed because of 60d96a1a28b55f071c6144f248e136679c44337e. Set coins isn't sorted the same way as txNew.vin is so it sometimes may pick wrong coins for signing the input.

Return the proper fail reason. Prior to this commit it run into "Exceeded max tried".

Note: Only return if not enough amount is available if we can't subtract fee from amount.

This reverts commit 5fcdc0f00e7b961ebb62c94d17d585537e911309.

No need to do this for non-bip69 cases (i.e. when a specific change output position was requested and assigned)

Description

Please describe the purpose of the pull request.

Checklist

Thanks for contributing!