Skip to content

事件与接口(草案) ​

草案

以下接口草图用于讨论,不是最终 ABI。函数签名、参数类型和事件字段都可能变化。

Factory ​

solidity
// 草案
struct LaunchParams {
    string  name;
    string  symbol;
    string  metadataURI;      // 图片、链接
    address quoteAsset;       // 必须在本链白名单内
    uint16  feeTierBps;       // 100..500,步长 100
    uint16  creatorShareBps;  // 0..4000(占手续费)
    address creatorRecipient;
    uint256 targetFdv;        // 市值,4.2–42 ETH
    uint16  incentiveBps;     // 激励池 x,由 Factory 校验上限
    uint8   underfillRule;    // 0 = 退款, 1 = 保价缩量
    uint32  saleDuration;     // 例如 48h
    bytes32 whitelistRoot;    // 叶子: (address, cap)
    uint8   treasuryMode;     // 0 = 回购本币, 1 = 按 TWAB 回馈持有人
}

interface IPortusFactory {
    function createToken(LaunchParams calldata p)
        external returns (address token, address sale, address pool, address treasury);

    function isQuoteAssetAllowed(address asset) external view returns (bool);

    event TokenLaunched(
        address indexed token, address indexed creator, address indexed quoteAsset,
        address sale, address pool, address treasury, LaunchParams params
    );
}

Sale ​

solidity
// 草案
interface IPortusSale {
    function subscribe(uint256 amount, uint256 cap, bytes32[] calldata proof) external;
    function finalize() external;            // 认购期结束后任何人可调用
    function claimTokens() external;
    function claimRefund() external;

    function raiseTarget() external view returns (uint256);   // R
    function totalCommitted() external view returns (uint256);// C
    function price() external view returns (uint256);         // p

    event Subscribed(address indexed user, uint256 amount);
    event Finalized(uint8 outcome, uint256 raised, uint256 fillRatioBps, uint256 burned);
    event Claimed(address indexed user, uint256 tokens, uint256 refund);
}

Pool ​

solidity
// 草案
interface IPortusPool {
    function swap(bool buy, uint256 amountIn, uint256 minAmountOut, address to)
        external returns (uint256 amountOut, uint256 feeInQuote);
    function getAmountOut(bool buy, uint256 amountIn)
        external view returns (uint256 amountOut, uint256 feeInQuote);
    function getReserves() external view returns (uint256 quoteReserve, uint256 tokenReserve);
    function priceCumulative() external view returns (uint256); // 供 TWAP 使用

    event Swap(address indexed sender, bool buy, uint256 amountIn, uint256 amountOut,
               uint256 feeInQuote, address indexed to);
}

FeeSplitter / Treasury / Distributor ​

solidity
// 草案
interface IPortusFeeSplitter {
    function shares(address token) external view
        returns (uint16 platformBps, uint16 flywheelBps, uint16 creatorBps, uint16 treasuryBps);
    function claim(address token) external; // 收款方自行领取
    event FeeSplit(address indexed token, uint256 platform, uint256 flywheel,
                   uint256 creator, uint256 treasury);
}

interface IPortusTreasury {
    function executeBuyback(uint256 maxQuoteIn, uint256 minTokensOut) external; // 任何人
    event Buyback(uint256 quoteSpent, uint256 tokensBought);
}

interface IPortusDistributor {
    function claim(uint256 epoch, uint256 amount, bytes32[] calldata proof) external;
    event RootPublished(uint256 indexed epoch, bytes32 root, uint256 total, string dataURI);
    event Claimed(uint256 indexed epoch, address indexed user, uint256 amount);
}

合约尚未部署 · 本文档不构成投资建议