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.
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_admincan move authority. The built-in public
name()identity boundary is notexplained alongside the absence of a generic SEP-41
asset()/issuer()method.Evidence
The current
stellar-transaction.mdxexample still declaresCONTRACT_EXECUTABLE_TOKENand describesCONTRACT_ID_FROM_ASSET. Currentstellar-xdrinstead usesCONTRACT_EXECUTABLE_STELLAR_ASSETand nestsFROM_ASSETunderENVELOPE_TYPE_CONTRACT_ID. Current client code identifies aSAC from its
SCContractInstance.executable, while SAC admin authority remainsmutable after initial creation.
Additional recorded evidence:
Recommendation
Update the derivation/introspection guide to current XDR enums, show
SCContractInstance.executable == STELLAR_ASSET, documentname()/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.