user6004: In the English Auction example, let's say both wallet 2 and 3 submit a transaction to bid at the same time.
(In the simulator, I just don't add a wait time between wallet 1&2 bids).
When Wallet 1 closes the auction, nothing happens in the simulator - only the first transaction is seen :

In general, how does Cardano handle a situation when 2 wallets (say from different geographical locations) submit transactions at the same time ? Do both transactions fail or just 1 ?

user1130: Whichever transaction the block producer decides to include in block will succeed. Only one can succeed though.
The auction datum exists on a UTxO and each UTxO can only be spent once. In the case of the auction, the validator requires a new UTxO with a new Datum is created to replace the spent TxO. That new Datum isn't visible until the next block though.
Concurrency is a popular topic of conversations in the community and there are many ways a dApp designer can allow participants to interact concurrently. It often requires architectures that are unique to Cardano. Check out this post which includes a lot of helpful resources about concurrency.

6004: <p>In the English Auction example, let's say both wallet 2 and 3 submit a transaction to bid at the same time.
(In the simulator, I just don't add a wait time between wallet 1&amp;2 bids).
When Wallet 1 closes the auction, nothing happens in the simulator - only the first transaction is seen :</p>
<p><a href="https://i.stack.imgur.com/Au4Ns.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Au4Ns.png" alt="enter image description here" /></a></p>
<p>In general, how does Cardano handle a situation when 2 wallets (say from different geographical locations) submit transactions at the same time ? Do both transactions fail or just 1 ?</p>
 1130: <p>Whichever transaction the block producer decides to include in block will succeed. Only one can succeed though.</p>
<p>The auction datum exists on a UTxO and each UTxO can only be spent once. In the case of the auction, the validator requires a new UTxO with a new Datum is created to replace the spent TxO. That new Datum isn't visible until the next block though.</p>
<p>Concurrency is a popular topic of conversations in the community and there are many ways a dApp designer can allow participants to interact concurrently. It often requires architectures that are unique to Cardano. Check out <a href="https://cardano.stackexchange.com/a/3765/1130">this post</a> which includes a lot of helpful resources about concurrency.</p>
