Contract accounts are smart contracts that act like accounts. They hold balances and use `__check_auth` to decide who can act and under what conditions. Use a contract account when: - You need custom authentication in the contract (passkeys/WebAuthn, hardware keys, or other signer checks). - You need on chain rules such as spend caps, allow lists, or timelocks. Stay with a classic account when: - You want the simplest path: one private key, fund the account, no extra contract code or infrastructure. - You must interoperate with systems/tools that expect memos (for example, some exchanges require payments with memos from a G-address; contract account payments go through the Stellar Asset Contract as muxed transfers, so transfers from contracts are not supported by exchanges today). Quick links: - [Simple Account example](https://developers.stellar.org/docs/build/smart-contracts/example-contracts/simple-account.md) - [Complex Account example](https://developers.stellar.org/docs/build/smart-contracts/example-contracts/complex-account.md) - [Contract authorization starter guide](https://developers.stellar.org/docs/build/guides/auth/contract-authorization.md) and [Authorization fundamentals](https://developers.stellar.org/docs/learn/fundamentals/contract-development/authorization.md)