Same primitive, now with a recipient selector. Each author or seller has their own wallet.
What changed from Chapter 1: The recipient is no longer fixed. The payment instruction's "To" field is now dynamic. That is the only change; the protocol is identical.
Devnet only: test tokens with no value. Get devnet SOL from the Solana faucet and devnet USDC from Circle's faucet.
// Chapter 1: one fixed recipient
const TO = gatewayPayTo;
// Chapter 2: the recipient the buyer chose
const TO = recipients[selected].address;
// Everything else is identical.
// Same transaction, same signing, same settlement.