Skip to content

Update SAC executable identity and admin introspection terminology #2613

Description

@kalepail

Finding

SAC documentation and derived guidance retain design-era XDR names and omit the
current executable-based identification path. They also encourage issuer/admin
collapse even though the issuer is only initial administrator and set_admin
can move authority. The built-in public name() identity boundary is not
explained alongside the absence of a generic SEP-41 asset()/issuer() method.

Evidence

The current stellar-transaction.mdx example still declares
CONTRACT_EXECUTABLE_TOKEN and describes CONTRACT_ID_FROM_ASSET. Current
stellar-xdr instead uses CONTRACT_EXECUTABLE_STELLAR_ASSET and nests
FROM_ASSET under ENVELOPE_TYPE_CONTRACT_ID. Current client code identifies a
SAC from its SCContractInstance.executable, while SAC admin authority remains
mutable after initial creation.

Additional recorded evidence:

  • current SAC docs retain obsolete contract-ID/executable XDR terminology
  • current stellar-xdr uses ENVELOPE_TYPE_CONTRACT_ID with nested FROM_ASSET and CONTRACT_EXECUTABLE_STELLAR_ASSET
  • current JS Client.from detects SAC from SCContractInstance executable
  • live SAC simulation confirms public name identity and mutable C-address admin
  • live recheck 2026-07-14: stellar-transaction.mdx still shows CONTRACT_EXECUTABLE_TOKEN and CONTRACT_ID_FROM_ASSET while current stellar-xdr names CONTRACT_EXECUTABLE_STELLAR_ASSET and ENVELOPE_TYPE_CONTRACT_ID/FROM_ASSET

Recommendation

Update the derivation/introspection guide to current XDR enums, show
SCContractInstance.executable == STELLAR_ASSET, document name()/symbol()
identity after SAC verification, distinguish initial issuer from mutable
administrator, and state the provenance limits of C-address hashes/admin values.

Source Record

This was found by the downstream Raven eval/improvements loop and recorded as sd-020 (stellar-docs, discovered 2026-07-11).

Public source record: improvements/stellar-docs/sd-020-sac-xdr-introspection-admin-drift.md

Immutable source snapshot: a4608d080232

Resolution Handoff

When a fix is deployed, please link the resolving issue or PR to the source record above and notify Raven through:

https://github.com/kalepail/stellar-raven/issues/new?template=upstream-improvement-ready.yml&title=%5Bupstream-ready%5D%20sd-020%3A%20

Include the finding id, resolving issue/PR, deployed version or timestamp, and the smallest live recheck. Raven independently verifies the upstream surface before changing the finding to fixed-upstream; issue closure or a merged PR alone is not treated as proof. After a distinct reviewer repeats the live check, the active finding is retired to Raven's resolved ledger; a commit-pinned snapshot is preserved when available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ravenissues discovered by Stellar Raven QA passes

    Type

    No type

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions