user2306: What SIGHASH flags are used when constructing a CoinJoin transaction?

user56368: CoinJoin uses SIGHASH_ALL.
I initially found this confusing because I assumed the interface to CoinJoin a little less synchronized than it is. CoinJoin requires each participant to first specify a UTXO and a public key to pay out to. 
Someone then constructs a partially complete transaction which makes use of those UTXOs and pays out to the public keys specified by the participants -- this transaction is "partially complete" because it doesn't yet have signatures which unencumber the UTXOs. Each participant then signs their input with SIGHASH_ALL, which prevents outputs from being manipulated after the fact.

2306: <p>What SIGHASH flags are used when constructing a CoinJoin transaction?</p>
 56368: <p><a href="https://bitcoin.org/en/developer-guide#coinjoin" rel="noreferrer">CoinJoin uses <code>SIGHASH_ALL</code>.</a></p>

<p>I initially found this confusing because I assumed the interface to CoinJoin a little less synchronized than it is. CoinJoin requires each participant to first specify a UTXO and a public key to pay out to. </p>

<p><em>Someone</em> then constructs a partially complete transaction which makes use of those UTXOs and pays out to the public keys specified by the participants -- this transaction is "partially complete" because it doesn't yet have signatures which unencumber the UTXOs. Each participant then signs their input with <code>SIGHASH_ALL</code>, which prevents outputs from being manipulated after the fact.</p>
