跳转到主要内容

概述

GeodeTypes.sol 定义所有共享数据结构、协议常量和 EIP-712 typehash。所有结构体在文件级别声明,方便跨代码库导入。

EIP-712 常量

// 意图 typehash — 包含 poolId 用于跨池重放保护
bytes32 constant INTENT_TYPEHASH = keccak256(
    "GeodeIntent(bytes32 poolId,address owner,address tokenIn,address tokenOut,"
    "uint256 amountIn,uint256 minAmountOut,uint256 deadline,uint256 nonce)"
);

// Permit2 witness — 不在 PermitTransferFrom 中的字段
bytes32 constant GEODE_WITNESS_TYPEHASH = keccak256(
    "GeodeWitness(bytes32 poolId,address tokenOut,uint256 minAmountOut)"
);

协议常量

常量描述
Q1281 << 128价格表示的定点乘数
ABSOLUTE_MAX_BATCH_SIZE256每侧意图的硬上限
DEFAULT_BATCH_INTERVAL1 个区块结算间最小区块数
DEFAULT_DIRECT_SWAP_FEE_BPS30(0.3%)直接交换费用(曲线池;三方分配)
DEFAULT_SETTLEMENT_FEE_BPS10(0.1%)每个已成交意图输入的费用
DEFAULT_MAX_GAS_REIMBURSEMENT0.01 ETH每批次上限
BPS_DENOMINATOR10,000基点除数

结构体

GeodeIntent

用户的签名交易意图:
struct GeodeIntent {
    PoolId poolId;        // 跨池重放保护
    address owner;        // 意图签名者
    address tokenIn;      // 卖出的代币
    address tokenOut;     // 接收的代币
    uint256 amountIn;     // 卖出数量
    uint256 minAmountOut; // 最低可接受输出(滑点保护)
    uint256 deadline;     // 过期时间戳
    uint256 nonce;        // Permit2 重放保护
}

SettlementResult

出清价格计算的输出:
struct SettlementResult {
    uint256 clearingPrice;          // Q128 统一价格
    uint256 internalMatch0;         // 内部交叉的 currency0 → 卖家
    uint256 internalMatch1;         // 内部交叉的 currency1 → 买家
    uint256 residualSwapAmount;     // 路由到 AMM/曲线的数量
    bool residualZeroForOne;        // 交换方向
    uint256 buyFees;                // 来自买入输入的结算费用
    uint256 sellFees;               // 来自卖出输入的结算费用
    // 曲线模式字段(标准模式下为零):
    uint256 curveDispensed;         // 从 Hook 储备分发的代币
    uint256 curveAbsorbed;          // 吸收回 Hook 的代币
    uint256 deployerRoyalty;        // 部署者盈余份额
}

PoolConfig

每池配置——通过 geodeInitializePool 设置一次:
struct PoolConfig {
    uint256 batchInterval;
    uint24 directSwapFeeBps;          // 曲线池 0.3%(三方分配)
    uint256 settlementFeeBps;
    uint256 maxBatchSize;
    uint256 maxGasReimbursement;
    uint256 gasReimbursementMultiplier;
    // 曲线池字段(标准池为零):
    address deployer;
    uint24 deployerRoyaltyBps;
    uint256 virtualTokenReserve;
    uint256 virtualEthReserve;
}

LaunchPhase

enum LaunchPhase {
    None,   // 标准 Geode 池(非曲线)
    Active  // 永久联合曲线——双路径交易(直接 + 意图)
}
LaunchPhase 枚举只有两个值。曲线是永久的——没有 PendingGraduationGraduated 阶段。一旦 Active,曲线永远运行。

源代码

GeodeTypes.sol

在 GitHub 上查看完整源代码(约 157 行)。