This document describes the video tutorial series for Ethos-Protocol. Each tutorial maps to a specific feature or workflow. Tutorials are organized by audience level and include outlines, key talking points, and links to the matching written documentation.
- Overview
- Tutorial Conventions
- Series 1: Getting Started
- Series 2: Core Vault Flows
- Series 3: Beneficiary Features
- Series 4: Authentication and Passkeys
- Series 5: Configuration Tutorials
- Series 6: Troubleshooting Videos
- Tutorial Production Process
- Contributing a Tutorial
Text documentation is valuable for reference, but visual, step-by-step walkthroughs lower the barrier for new contributors and users. This tutorial series covers:
- Issuance — creating and funding a vault.
- Check-in (Attestation) — proving liveness to extend TTL.
- Verification — confirming vault state and release eligibility.
- Configuration — environment setup, deployment, network selection.
- Troubleshooting — common errors and how to fix them.
Each tutorial is self-contained. Viewers can watch a single episode without having seen the others.
All tutorials follow a consistent format:
| Element | Standard |
|---|---|
| Length | 5–15 minutes per episode |
| Resolution | 1080p minimum |
| Audio | Clear voiceover; no background music during code sections |
| Code font | Fira Code or JetBrains Mono at 16pt minimum |
| Terminal theme | Dark background, high-contrast text |
| Chapters | Timestamps in video description for each major step |
| Captions | Auto-generated + manual review for accuracy |
| Code samples | Always shown in full; no partial pastes without explanation |
| Environment | Testnet for all tutorials unless explicitly stated otherwise |
Audience: Developers new to Ethos-Protocol
Duration: ~12 minutes
Written reference: README.md Quick Start, docs/deployment-guide.md
Outline:
- Prerequisites: Rust 1.70+, Soroban CLI, Stellar CLI, Docker
- Clone the repository
- Copy
.env.exampleto.envand configure key variables - Run
docker-compose up -dand verify all three services are healthy - Run
cargo testto confirm everything is working - Tour of the project structure:
contracts/,backend/,docs/,scripts/
Key talking points:
- Why Docker Compose is the fastest local setup path
- The role of each service (PostgreSQL, backend, Stellar Quickstart)
- What the
.envvariables control and which ones are required immediately
Audience: Developers ready for their first on-chain deployment
Duration: ~10 minutes
Written reference: docs/deployment-guide.md
Outline:
- Generate a testnet identity:
stellar keys generate deployer --network testnet - Fund the account using Friendbot
- Run
./scripts/deploy_testnet.sh - Copy the deployed contract address into
.env - Invoke a test function using Stellar CLI to confirm deployment
- View contract state using Stellar Laboratory or Horizon
Key talking points:
- Difference between testnet and standalone for development
- How
environments.tomlselects the right RPC endpoint - What to do if the deployment script fails
Audience: End users and developers
Duration: ~8 minutes
Written reference: README.md Smart Contract API
Outline:
- What a vault is and what parameters it requires
- Choosing an appropriate
check_in_interval(seconds) - Calling
create_vault(beneficiary, check_in_interval) - Recording the returned
vault_id - Calling
get_vault(vault_id)to inspect the initial state - Making the first deposit:
deposit(vault_id, amount)
Key talking points:
- Why
owner == beneficiaryis rejected - Amount units: stroops (1 XLM = 10,000,000 stroops)
- How the TTL countdown starts on creation
Audience: End users
Duration: ~6 minutes
Written reference: docs/ttl-logic.md
Outline:
- What happens without a check-in (TTL expiry and release)
- Calling
check_in(vault_id) - Calling
get_ttl_remaining(vault_id)before and after check-in - The check-in cooldown: what
CheckInTooFrequentmeans and how to avoid it - Optional: geo check-in with
check_in_with_geo
Key talking points:
- Setting up a reminder so you never miss a check-in
- The rate limiter default (60 seconds) and how to configure it
- Geographic metadata privacy considerations
Audience: Beneficiaries and developers
Duration: ~8 minutes
Written reference: docs/ttl-logic.md, docs/beneficiary-conditional-acceptance.md
Outline:
- Conditions required for release: TTL expired, vault not already released
- Calling
is_expired(vault_id)to check eligibility - Calling
trigger_release(vault_id) - Observing the fund transfer on Stellar explorer
- Calling
get_release_status(vault_id)to confirm completion - What happens with archived vaults: automatic restoration during release
Key talking points:
- Anyone can call
trigger_release, not just the beneficiary - What
ContractError::NotExpiredmeans and how to verify TTL - Viewing the transaction on Stellar Expert
Audience: Vault owners
Duration: ~7 minutes
Written reference: docs/withdrawal-features.md
Outline:
- Prerequisites: vault must be active (not expired, not released)
- Calling
withdraw(vault_id, amount) - The withdrawal audit trail: how every attempt is logged
- Withdrawal notifications: real-time alerts for all withdrawal events
- The 24-hour dispute window for unauthorized withdrawals
- Withdrawal batching for multiple small amounts
Key talking points:
- Why withdrawals are logged even when they fail
- How to batch withdrawals efficiently
- How to open a dispute
Audience: Advanced users
Duration: ~7 minutes
Written reference: docs/beneficiary-conditional-acceptance.md, docs/beneficiary-minimum-threshold.md
Outline:
- What conditional acceptance means for beneficiaries
- Setting a minimum fund threshold for acceptance
- The beneficiary floor and cap concepts
- Walk-through: creating a vault where beneficiary must accept when funds exceed 100 XLM
Key talking points:
- Protecting beneficiaries from inheriting underfunded vaults
- The difference between floor, threshold, and cap
- What happens if conditions are never met
Audience: Advanced users and legal-tech enthusiasts
Duration: ~9 minutes
Written reference: docs/beneficiary-conflict-resolution.md
Outline:
- Scenario: multiple parties claim the same vault
- How the automated conflict resolution algorithm works
- The beneficiary ranking system
- The beneficiary auction mechanism
- Final resolution: who gets paid and how much
Key talking points:
- No human intermediary is involved — all on-chain
- How ranking scores are calculated
- What beneficiaries need to do to maximize their claim
Audience: Beneficiaries
Duration: ~5 minutes
Written reference: docs/beneficiary-advanced-features.md
Outline:
- Why delegation exists (beneficiary cannot act at time of release)
- Calling
delegate_beneficiary_role(vault_id, delegate_address) - The delegation chain: how authority passes down
- The
del_benevent and how to monitor it
Audience: End users
Duration: ~10 minutes
Written reference: docs/passkeys.md
Outline:
- What Passkeys are and why Ethos uses them instead of seed phrases
- Current status: WebAuthn planned for v2.0; current auth via Stellar address
- Registering a biometric credential:
bind_passkey_biometric - Performing a biometric check-in:
biometric_check_in - Listing registered biometrics:
get_vault_biometrics - Removing a credential:
unbind_passkey_biometric
Key talking points:
- Raw biometric data never leaves your device — only a SHA-256 hash is stored
- Multiple credentials per vault (fingerprint + face ID)
- Phishing resistance: why WebAuthn is safer than passwords or seed phrases
Audience: Security-conscious users
Duration: ~8 minutes
Written reference: docs/passkeys.md
Outline:
- Setting a passkey expiry with
extend_passkey_expiry - What
PasskeyExpired(error 59) looks like and how to recover - Reporting a compromise:
report_passkey_compromise - Automatic compromise detection: the 3-consecutive-different-hash heuristic
- Clearing a compromise flag:
clear_passkey_compromise - The
pk_expdandpk_compevents and how to monitor them
Audience: Operators deploying production vaults
Duration: ~12 minutes
Written reference: docs/deployment-guide.md
Outline:
- Generate a mainnet identity:
stellar keys generate deployer-mainnet --network mainnet - Set
STELLAR_MAINNET_RPC_URL - Review
environments.tomlfor mainnet settings - Run
./scripts/deploy_mainnet.sh— why it asks you to typemainnet - Post-deployment: update
.envwith contract address, verify on Stellar Expert - Setting up monitoring: docs/monitoring-guide.md
Key talking points:
- Never share your mainnet signing key
- Test thoroughly on testnet first — mainnet mistakes cost real funds
- The importance of the WASM size budget: docs/wasm-size-budget.md
Audience: Operators
Duration: ~8 minutes
Written reference: docs/push-notifications.md, docs/backend-api.md
Outline:
- Setting up email reminders:
REMINDER_EMAIL_API_KEY - Setting up SMS reminders:
REMINDER_SMS_API_KEY - WebSocket real-time alerts for withdrawal and TTL events
- Webhook delivery for external integrations
- Configuring the scheduler for reminder frequency
Audience: Advanced users and protocol integrators
Duration: ~10 minutes
Written reference: docs/vesting-schedules.md, docs/token-management.md
Outline:
- What vesting schedules are and why you might use them
- Configuring a vesting schedule on a vault
- Token management: native XLM vs. custom Stellar tokens
- How token support will expand in v1.1
Audience: Developers
Duration: ~10 minutes
Written reference: docs/faq.md
Outline:
- How to read a Soroban
HostErrorresponse - The most common errors:
NotExpired,InvalidPasskey,CheckInTooFrequent - Using
get_vault,get_ttl_remaining, andis_expiredto diagnose state - Reading on-chain events for
pk_expd,pk_comp,ci_rl - Escalation: what to log before opening a GitHub issue
Audience: Developers
Duration: ~8 minutes
Written reference: docs/faq.md
Outline:
- Docker Compose containers not starting: port conflicts, volume issues
wasm-opt not found: installingbinaryen- Stellar CLI network errors: verifying RPC URLs
- PostgreSQL connection refused:
.envmismatch, health check failures - Resetting local state completely:
docker-compose down -v
Audience: Operators
Duration: ~12 minutes
Written reference: docs/disaster-recovery-runbook.md
Outline:
- Scenario: contract state archived unexpectedly
- Calling
restore_vault(vault_id)manually - Re-deploying a contract if the WASM is unavailable
- Database recovery from PostgreSQL backup
- Key rotation after a suspected compromise
When producing a new tutorial:
- Write the script — follow the outline format above. Full sentences, not bullet notes.
- Record in stages — record each section separately; assemble in post.
- Screen capture — use a clean terminal with the theme defined in Tutorial Conventions.
- Voiceover — record in a quiet room; review for accuracy against the current codebase.
- Add timestamps — include chapter markers matching the outline headings.
- Generate captions — auto-generate, then manually review for technical term accuracy.
- Link from this file — add the video URL to the relevant tutorial entry above.
- Cross-link in written docs — add a "Video Walkthrough" link in the corresponding
.mdfile.
Each tutorial entry lists the written docs it is based on. When those docs change:
- Review the tutorial for outdated steps.
- Record an updated segment for changed sections only (avoid re-recording the whole video).
- Pin a note in the video description:
"Updated section at 3:42 for v1.1 token support." - Update the outline in this file to reflect the current state.
Community-contributed tutorials are welcome. Before recording:
- Open an issue in the repository describing the tutorial topic.
- Confirm there is no existing tutorial covering the same flow.
- Follow the Tutorial Conventions and Production Process.
- Submit the outline in your PR alongside the video link.
See CONTRIBUTING.md for general contribution guidelines.