// Unsafe because reject and deliver can both occur, causing a // conflict on outcome Purchase Unsafe { roles Buyer, Seller, Shipper parameters out ID key, out item, out price, out outcome private address, shipped Buyer → Seller: rfq[out ID,out item] Seller → Buyer: quote[in ID, in item, out price] Buyer → Seller: accept[in ID, in item, in price, out address] Buyer → Seller: reject[in ID, in item, in price, out outcome] Seller → Shipper: ship[in ID, in item, in address, out shipped] Shipper → Buyer: deliver[in ID, in item, in address, out outcome] }