Bob (the person) doesn't have to necessarily know that there's an auction going in the blockchain, but he can launch a transaction and look for eUTXOs of this type of contract. If the off-chain code finds these specific type of eUTXOs, then he can fetch the datum associated to it, and therefore he can place a bid.

If you look in the `EnglishAuction.hs` file, line 334:

```
findAuction :: CurrencySymbol
            -> TokenName
            -> Contract w s Text (TxOutRef, ChainIndexTxOut, AuctionDatum)
findAuction cs tn = do
    utxos <- utxosAt $ scriptHashAddress auctionHash
    ...
```


This is the function responsible for this. This happens also when bidding (line 277):

```haskell
(oref, o, d@AuctionDatum{..}) <- findAuction bpCurrency bpToken
...
```

...or closing the auction (line 309), or with any other endpoint the contract opens to the public.