Support delegated Soroban auth credentials (CAP-71)
Protocol 27 (CAP-71) introduced two new Soroban authorization credential
types alongside the legacy SOROBAN_CREDENTIALS_ADDRESS:
SOROBAN_CREDENTIALS_ADDRESS_V2 — same fields as the legacy type, but
binds the address into the signed payload.
SOROBAN_CREDENTIALS_ADDRESS_WITH_DELEGATES — enables delegated signing
through an account + delegate tree, where every signer commits to the
top-level address in a shared payload.
Already done (as part of the JS SDK v16 / protocol 27 update)
Defensive handling so the Lab correctly processes whatever simulation
returns has shipped with the SDK v16 upgrade:
Note: confirmed against live testnet — protocol 27 is active, but
simulation still returns legacy ADDRESS credentials by default (the SDK's
authV2 flag defaults to false until CAP-71 activation makes V2
mandatory). The work above is forward-compatible for when that default flips.
Remaining (this issue)
Building and signing the new credential types is account-specific policy the
client must drive — simulation never emits the delegates variant on its own.
This is net-new functionality, not a compatibility fix:
References
Support delegated Soroban auth credentials (CAP-71)
Protocol 27 (CAP-71) introduced two new Soroban authorization credential
types alongside the legacy
SOROBAN_CREDENTIALS_ADDRESS:SOROBAN_CREDENTIALS_ADDRESS_V2— same fields as the legacy type, butbinds the address into the signed payload.
SOROBAN_CREDENTIALS_ADDRESS_WITH_DELEGATES— enables delegated signingthrough an account + delegate tree, where every signer commits to the
top-level address in a shared payload.
Already done (as part of the JS SDK v16 / protocol 27 update)
Defensive handling so the Lab correctly processes whatever simulation
returns has shipped with the SDK v16 upgrade:
isAddressAuthEntry) soADDRESS,ADDRESS_V2, andADDRESS_WITH_DELEGATESentries are alldetected as requiring a signature — only source-account credentials are
treated as envelope-authorized.
instead of silently passing them through unsigned.
(
address) and V2 (address_v2) shapes. Delegates entries areintentionally left for this issue (see below).
auth-entry detection.
Remaining (this issue)
Building and signing the new credential types is account-specific policy the
client must drive — simulation never emits the delegates variant on its own.
This is net-new functionality, not a compatibility fix:
ADDRESS_V2— surfaceauthV2: truewhen signing authentries on CAP-71-activated networks (
authorizeEntry/authorizeInvocation).ADDRESS/ADDRESS_V2entry into
ADDRESS_WITH_DELEGATESwith a delegate tree, viabuildWithDelegatesEntry()(handles sorting/dedup per CAP-71-01).authorizeEntry(..., forAddress), or drive signing externally with theshared payload from
buildAuthorizationEntryPreimage().signature status in the auth-entry / dashboard views. Must parse the
delegate tree recursively: for accounts that authorize purely via
delegates, the top-level
address_credentials.signatureisVoidand thereal signatures live under
delegates[*].signature(and nested delegates).The current dashboard parser unwraps only the top-level credentials, so
delegated-only entries would otherwise be silently omitted.
protocol 27+ networks).
References