// SPDX-License-Identifier: MIT pragma solidity 0.8.23; /** * @title AERE Season 1 "Altitude" — shared interfaces * @notice Minimal interfaces so the Season 1 suite can be wired to LIVE chain * 2800 contracts without importing their full source. All external * oracle references (humanity / passkey) are Foundation-settable and * wired POST-DEPLOY to the appropriate live source, so nothing here * hardcodes an ABI we cannot verify. * * HONESTY / DISCLAIMER (mandatory for all user-facing copy that surfaces * Altitude Points or Season 1 rewards): Altitude Points (AP) are NOT a * token. They are non-transferable and have no guaranteed monetary value. * Any future reward depends on the network growing and is not promised. * There is no listing. Nothing here is an offer of, or a right to, value * or returns. */ /// @notice Non-transferable Season 1 points ledger (credit-only). interface IAerePointsLedger { function credit(address account, uint256 amount, bytes32 questId) external; function balanceOf(address account) external view returns (uint256); function isAttestor(address who) external view returns (bool); } /// @notice Quest configuration registry. interface IAereQuestRegistry { struct Quest { uint256 weight; // points credited per completion uint64 startTime; // window open (unix) uint64 endTime; // window close (unix); 0 == open-ended uint256 perUserCap; // max cumulative points per user for this quest bool active; // Foundation kill-switch bool requiresVerifiedHuman; bool exists; } function getQuest(bytes32 questId) external view returns (Quest memory); function isOpen(bytes32 questId, uint256 atTime) external view returns (bool); } /// @notice First-Flight soulbound check-in attestation. interface IAereQuestCheckIn { function hasCheckedIn(address account) external view returns (bool); } /// @notice Per-account quest completion accounting exposed by the attestor. interface IAereQuestAttestor { function distinctQuestCount(address account) external view returns (uint256); function earned(address account, bytes32 questId) external view returns (uint256); } /** * @notice Generic "is this account verified as a human?" oracle. The Foundation * wires this to an adapter over AereZKScreen (over-18 / EU-residency * program clearance) + AereSanctionsRegistry (not sanctioned). Kept as a * settable reference so the compliance source can evolve without * redeploying the attestor. */ interface IHumanityOracle { function isVerifiedHuman(address account) external view returns (bool); } /** * @notice Generic boolean flag oracle. Used by the referral registry to check * "has this account created a passkey smart account?" The Foundation * wires it to a passkey-account indexer/attestor (the live * AerePasskeyAccountFactoryV2 emits AccountCreated but keeps no queryable * on-chain set, so an attested flag source is used). */ interface IAccountFlag { function isFlagged(address account) external view returns (bool); } /// @notice Wrapped-AERE (WETH-style) surface used by the reward distributor to /// convert native AERE into WAERE for the sAERE-delivery path. interface IWaereWrap { function deposit() external payable; function approve(address spender, uint256 amount) external returns (bool); function transfer(address to, uint256 amount) external returns (bool); function balanceOf(address account) external view returns (uint256); } /// @notice Minimal ERC-4626 surface for sAERE (deposit WAERE, mint sAERE to receiver). interface ISAEREVault { function deposit(uint256 assets, address receiver) external returns (uint256 shares); function asset() external view returns (address); }