Base URL of the cfx-link redirect host (e.g. https://l.dev.cfx.to).
sendEscrowRecipientSms assembles the claim link as
${shortUrlBaseUrl}/${claimShortUrlId}. MUST be the cfx-link host that
runs the resolver Lambda — the apex (https://cfx.to) does not resolve
short ids.
Activities that mutate escrow transfer state. Every mutating activity is idempotent: it reads the row + the on-chain
EscrowStatePDA, derives the effective state, and short-circuits if the work has already happened on a prior container.The set is deliberately small — each one performs a single DB or chain action so workflows can compose them point-to-point.
NOTE(nonce serialization): the
noncecolumn isbigintin the DB. Temporal's default JSON data converter can't serialize JSbigints, so we exchangenonceas a base-10 string at the activity boundary andBigInt(...)it inside the activity body / workflow as needed.