Talk:Transaction Construction Algorithm (voting pools)
In the preparation step it is mentioned that we create a withdrawal status object which is referenced throughout the algorithm.
We add the roundID to this object, but it does not seem to be used anywhere. Is it needed at all?
It's needed to match up withdrawalstatus objects with siglist objects.
In the output list initialization procedure we may return an empty output list if the smallest output is bigger than the sum of the inputs. What should happen if we return an empty output list? The next step (transaction initialization) seems to assume that it is not empty.
As there are no longer any ouputs we cannot make a transaction. I don't seem to find any error code that reflects this situation.
Transaction Initialization does not depend on the size of the output list. If the transaction skeleton ends up not being used, then Finalize Transaction will discard it (first step).
Easiest way to see what happens is to just follow the steps with an empty output list and you'll find all the checks that handle it.
Output List Initialization
In the 'Output List Initialization' I don't think it's specified how to keep track of the outputs that are removed if sum(inputs) < sum(outputs). I would assume that we need to mark the output status in the withdrawal status object so the caller can take appropriate action?
See the flowchart. It explains how to update the output status.
In the 'Finalize Transaction' we create a ntxid which is used for tracking purposes. What kind of tracking purposes is that? I see it is used later to update the outbailment status to split if the outbailment has more than one ntxid.
What is ntxid an abbreviation for? Does it have other roles?
ntxid is a transaction hash (normalized transaction id) with the input scripts blanked out. It's a more reliable way to track unconfirmed transactions.
For other uses, see updatewithdrawal