> ## Documentation Index
> Fetch the complete documentation index at: https://whitepaper.rwanftfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# DA 代币机制

> 只升不降的价格模型。

export const DaPriceSimulator = () => {
  if (typeof window === 'undefined') {
    return null;
  }
  var [minted, setMinted] = useState(1000000);
  var [liquidity, setLiquidity] = useState(1000000);
  var [burned, setBurned] = useState(0);
  var [dbMinted, setDbMinted] = useState(1000000);
  var [dbLiquidity, setDbLiquidity] = useState(1000000);
  var [dbBurned, setDbBurned] = useState(0);
  var timerRef = useRef(null);
  useEffect(function () {
    if (timerRef.current) clearTimeout(timerRef.current);
    timerRef.current = setTimeout(function () {
      setDbMinted(minted);
      setDbLiquidity(liquidity);
      setDbBurned(burned);
    }, 150);
    return function () {
      if (timerRef.current) clearTimeout(timerRef.current);
    };
  }, [minted, liquidity, burned]);
  var fmtUsd = function (n) {
    if (n >= 1000000) return '$' + (n / 1000000).toFixed(1) + 'M';
    if (n >= 1000) return '$' + (n / 1000).toFixed(1) + 'K';
    if (n >= 100) return '$' + Math.round(n);
    if (n >= 10) return '$' + n.toFixed(1);
    return '$' + n.toFixed(2);
  };
  var fmtUsdFull = function (n) {
    var digits = Math.abs(n) >= 10000 ? 0 : 2;
    return new Intl.NumberFormat('en-US', {
      style: 'currency',
      currency: 'USD',
      maximumFractionDigits: digits
    }).format(n);
  };
  var fmtNum = function (n) {
    return new Intl.NumberFormat('en-US').format(Math.round(n));
  };
  var circulating = minted - burned;
  if (circulating < 1) circulating = 1;
  var price = liquidity / circulating;
  var basePrice = liquidity / minted;
  var priceChange = (price - basePrice) / Math.max(basePrice, 0.0001) * 100;
  var burnedMax = minted - 1;
  var actualBurned = burned > burnedMax ? burnedMax : burned;
  var moonCirculating = Math.max(minted * 0.05, 1);
  var moonPrice = liquidity / moonCirculating;
  var chartData = useMemo(function () {
    var points = [];
    var steps = 200;
    for (var i = 0; i <= steps; i++) {
      var pct = i / steps * 95;
      var b = pct / 100 * dbMinted;
      var s = dbMinted - b;
      if (s < 1) s = 1;
      var p = dbLiquidity / s;
      points.push({
        pct: pct,
        burned: b,
        price: p
      });
    }
    return points;
  }, [dbMinted, dbLiquidity]);
  var W = 640, H = 280;
  var PAD = {
    top: 28,
    right: 56,
    bottom: 44,
    left: 64
  };
  var cW = W - PAD.left - PAD.right;
  var cH = H - PAD.top - PAD.bottom;
  var minP = chartData[0] ? chartData[0].price : 1;
  var maxP = chartData[chartData.length - 1] ? chartData[chartData.length - 1].price : minP * 2;
  var capP = minP * 50;
  var displayMaxP = Math.min(maxP, capP);
  var yPad = (displayMaxP - minP) * 0.08 || 0.01;
  displayMaxP = displayMaxP + yPad;
  var sqrtScale = function (val) {
    var norm = (Math.min(val, displayMaxP) - minP) / (displayMaxP - minP || 0.01);
    if (norm < 0) norm = 0;
    return Math.sqrt(norm);
  };
  var getX = function (pct) {
    return PAD.left + pct / 95 * cW;
  };
  var getY = function (p) {
    return PAD.top + cH - sqrtScale(p) * cH;
  };
  var currentPct = dbMinted > 0 ? dbBurned / dbMinted * 100 : 0;
  if (currentPct > 95) currentPct = 95;
  var currentChartPrice = dbLiquidity / Math.max(dbMinted - dbBurned, 1);
  var pathParts = [];
  for (var k = 0; k < chartData.length; k++) {
    var d = chartData[k];
    var px = getX(d.pct).toFixed(1);
    var py = getY(d.price).toFixed(1);
    pathParts.push((k === 0 ? 'M' : 'L') + ' ' + px + ' ' + py);
  }
  var pathD = pathParts.join(' ');
  var lastPt = chartData[chartData.length - 1];
  var areaD = pathD + ' L ' + getX(lastPt.pct).toFixed(1) + ' ' + (PAD.top + cH) + ' L ' + getX(0).toFixed(1) + ' ' + (PAD.top + cH) + ' Z';
  var dotX = getX(currentPct);
  var dotY = getY(currentChartPrice);
  var milestones = [10, 100, 1000, 10000];
  var visibleMilestones = milestones.filter(function (m) {
    return m > minP * 1.2 && m < displayMaxP * 0.95;
  });
  var xPcts = [0, 20, 40, 60, 80];
  var yLabelFracs = [0, 0.25, 0.5, 0.75, 1];
  var hdZoneX = getX(50);
  var hdZoneW = getX(95) - hdZoneX;
  var sliderStyle = {
    touchAction: 'manipulation',
    height: '6px',
    borderRadius: '3px',
    background: 'linear-gradient(to right, rgba(255,255,255,0.4), rgba(255,255,255,0.15))',
    outline: 'none',
    WebkitAppearance: 'none',
    appearance: 'none'
  };
  var pulseKeyframes = '@keyframes daPulse{0%,100%{opacity:0.6;r:12}50%{opacity:0.2;r:18}}';
  return <div style={{
    backgroundColor: '#000000',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="p-6 rounded-xl not-prose">

      {}
      <style>{pulseKeyframes}</style>

      {}
      <div className="flex items-center justify-between mb-6">
        <h3 style={{
    color: '#FFFFFF',
    margin: 0
  }} className="text-lg font-serif italic">DA Price Simulator</h3>
        <span style={{
    color: 'rgba(255,255,255,0.6)',
    backgroundColor: 'rgba(255,255,255,0.1)',
    border: '1px solid rgba(255,255,255,0.2)',
    fontSize: '11px',
    padding: '4px 12px',
    borderRadius: '9999px',
    fontWeight: 500
  }}>Interactive</span>
      </div>

      {}
      <div className="grid grid-cols-1 sm:grid-cols-3 gap-4 mb-6">
        {}
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <label style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    fontWeight: 500,
    display: 'block',
    marginBottom: '4px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>DA Minted</label>
          <span style={{
    color: '#FFFFFF',
    fontSize: '18px',
    fontWeight: 800,
    display: 'block',
    marginBottom: '8px'
  }}>{fmtNum(minted)} DA</span>
          <input type="range" min="10000" max="21000000" step="10000" value={minted} onChange={function (e) {
    var val = Number(e.target.value);
    setMinted(val);
    if (burned >= val) setBurned(val - 1);
  }} className="w-full cursor-pointer" style={sliderStyle} />
          <div className="flex justify-between text-[10px] mt-1">
            <span style={{
    color: 'rgba(255,255,255,0.5)'
  }}>10,000</span>
            <span style={{
    color: 'rgba(255,255,255,0.5)'
  }}>21,000,000</span>
          </div>
        </div>
        {}
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <label style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    fontWeight: 500,
    display: 'block',
    marginBottom: '4px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>USDT Liquidity Pool</label>
          <span style={{
    color: '#FFFFFF',
    fontSize: '18px',
    fontWeight: 800,
    display: 'block',
    marginBottom: '8px'
  }}>{fmtUsdFull(liquidity)}</span>
          <input type="range" min="10000" max="100000000" step="10000" value={liquidity} onChange={function (e) {
    setLiquidity(Number(e.target.value));
  }} className="w-full cursor-pointer" style={sliderStyle} />
          <div className="flex justify-between text-[10px] mt-1">
            <span style={{
    color: 'rgba(255,255,255,0.5)'
  }}>$10,000</span>
            <span style={{
    color: 'rgba(255,255,255,0.5)'
  }}>$100,000,000</span>
          </div>
        </div>
        {}
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4">
          <label style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    fontWeight: 500,
    display: 'block',
    marginBottom: '4px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em'
  }}>DA Burned</label>
          <span style={{
    color: '#FFFFFF',
    fontSize: '18px',
    fontWeight: 800,
    display: 'block',
    marginBottom: '8px'
  }}>{fmtNum(actualBurned)} DA</span>
          <input type="range" min="0" max={burnedMax} step="10000" value={actualBurned} onChange={function (e) {
    setBurned(Number(e.target.value));
  }} className="w-full cursor-pointer" style={sliderStyle} />
          <div className="flex justify-between text-[10px] mt-1">
            <span style={{
    color: 'rgba(255,255,255,0.5)'
  }}>0</span>
            <span style={{
    color: 'rgba(255,255,255,0.5)'
  }}>{fmtNum(burnedMax)}</span>
          </div>
        </div>
      </div>

      {}
      <div className="mb-6" style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '16px',
    alignItems: 'center'
  }}>
        {}
        <div style={{
    flexShrink: 0,
    display: 'flex',
    justifyContent: 'center'
  }} className="w-[160px] sm:w-[140px] mx-auto sm:mx-0">
          <video autoPlay muted loop playsInline style={{
    borderRadius: '12px',
    objectFit: 'cover'
  }} className="w-[160px] h-[160px] sm:w-[140px] sm:h-[140px]">
            <source src="/DAalpha-Uncompressed8-bit422.webm" type="video/webm" />
          </video>
        </div>
        {}
        <div style={{
    flex: '1 1 0%',
    minWidth: '240px',
    display: 'flex',
    flexWrap: 'wrap',
    gap: '12px'
  }}>
          {}
          <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)',
    flex: '1 1 160px'
  }} className="rounded-xl p-4">
            <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    marginBottom: '4px'
  }}>DA Price</div>
            <div style={{
    color: '#4ade80',
    fontSize: '28px',
    fontWeight: 900,
    lineHeight: 1.2
  }}>{fmtUsdFull(price)}</div>
            <div style={{
    color: 'rgba(255,255,255,0.7)',
    fontSize: '12px',
    fontWeight: 600,
    marginTop: '4px'
  }}>
              {priceChange >= 0 ? 'Up' : 'Down'} {Math.abs(priceChange).toFixed(2)}% from base
            </div>
          </div>
          {}
          <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)',
    flex: '1 1 160px'
  }} className="rounded-xl p-4">
            <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    marginBottom: '4px'
  }}>Circulating Supply</div>
            <div style={{
    color: '#FFFFFF',
    fontSize: '20px',
    fontWeight: 900
  }}>{fmtNum(circulating)} DA</div>
            <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '12px',
    marginTop: '4px'
  }}>of 21M hard cap</div>
          </div>
          {}
          <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)',
    flex: '1 1 160px'
  }} className="rounded-xl p-4">
            <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px',
    textTransform: 'uppercase',
    letterSpacing: '0.05em',
    marginBottom: '4px'
  }}>Liquidity Pool</div>
            <div style={{
    color: '#FFFFFF',
    fontSize: '20px',
    fontWeight: 900
  }}>{fmtUsdFull(liquidity)}</div>
            <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '12px',
    marginTop: '4px'
  }}>100% USDT backed</div>
          </div>
        </div>
      </div>

      {}
      <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-4 overflow-x-auto">
        <div style={{
    color: 'rgba(255,255,255,0.6)',
    fontSize: '12px',
    fontWeight: 600,
    marginBottom: '8px'
  }}>Price vs Burn Percentage</div>
        <svg viewBox={'0 0 ' + W + ' ' + H} className="w-full" style={{
    minWidth: '400px'
  }}>
          <defs>
            <linearGradient id="daAreaGrad" x1="0" y1="0" x2="1" y2="0">
              <stop offset="0%" stopColor="#4ade80" stopOpacity="0.03" />
              <stop offset="100%" stopColor="#4ade80" stopOpacity="0.25" />
            </linearGradient>
          </defs>

          {}
          <rect x={hdZoneX} y={PAD.top} width={hdZoneW} height={cH} fill="rgba(251,191,36,0.04)" />
          <text x={hdZoneX + 6} y={PAD.top + 12} fill="rgba(251,191,36,0.3)" style={{
    fontSize: '8px',
    fontWeight: 500
  }}>High Deflation Zone</text>

          {}
          {yLabelFracs.map(function (frac, idx) {
    var val = minP + (displayMaxP - minP) * frac;
    var y = getY(val);
    return <line key={'yg-' + idx} x1={PAD.left} y1={y} x2={W - PAD.right} y2={y} stroke="rgba(255,255,255,0.05)" strokeWidth="0.5" />;
  })}

          {}
          {visibleMilestones.map(function (m) {
    var y = getY(m);
    return <g key={'ms-' + m}>
                <line x1={PAD.left} y1={y} x2={W - PAD.right} y2={y} stroke="rgba(255,255,255,0.08)" strokeWidth="0.5" strokeDasharray="4 4" />
                <text x={W - PAD.right + 4} y={y + 3} fill="rgba(255,255,255,0.35)" style={{
      fontSize: '8px'
    }}>{fmtUsd(m)}</text>
              </g>;
  })}

          {}
          {yLabelFracs.map(function (frac, idx) {
    var val = minP + (displayMaxP - minP) * frac;
    var y = getY(val);
    return <text key={'yl-' + idx} x={PAD.left - 8} y={y} textAnchor="end" dominantBaseline="middle" fill="rgba(255,255,255,0.4)" style={{
      fontSize: '9px'
    }}>
                {fmtUsd(val)}
              </text>;
  })}

          {}
          <path d={areaD} fill="url(#daAreaGrad)" />

          {}
          <path d={pathD} fill="none" stroke="#4ade80" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" />

          {}
          <line x1={dotX} y1={PAD.top} x2={dotX} y2={PAD.top + cH} stroke="rgba(255,255,255,0.15)" strokeWidth="1" strokeDasharray="4 3" />

          {}
          <circle cx={dotX} cy={dotY} r="12" fill="none" stroke="#4ade80" strokeWidth="1.5" opacity="0.4" style={{
    animation: 'daPulse 2s ease-in-out infinite'
  }} />

          {}
          <circle cx={dotX} cy={dotY} r="6" fill="#4ade80" stroke="#000000" strokeWidth="2" />

          {}
          <rect x={dotX + 10} y={dotY - 12} width={Math.max(fmtUsd(currentChartPrice).length * 7 + 12, 48)} height={20} rx="4" fill="rgba(0,0,0,0.7)" stroke="rgba(74,222,128,0.3)" strokeWidth="1" />
          <text x={dotX + 16} y={dotY + 2} fill="#4ade80" style={{
    fontSize: '10px',
    fontWeight: 700
  }}>{fmtUsd(currentChartPrice)}</text>

          {}
          {xPcts.map(function (pct) {
    return <text key={'xl-' + pct} x={getX(pct)} y={H - PAD.bottom + 18} textAnchor="middle" fill="rgba(255,255,255,0.4)" style={{
      fontSize: '9px'
    }}>
                {pct}%
              </text>;
  })}
          <text x={W / 2} y={H - 4} textAnchor="middle" fill="rgba(255,255,255,0.3)" style={{
    fontSize: '8px'
  }}>Burn Percentage (% of Minted Supply)</text>
        </svg>

        {}
        <div className="flex items-center gap-4 mt-2" style={{
    paddingLeft: PAD.left + 'px'
  }}>
          <div className="flex items-center gap-1">
            <span style={{
    display: 'inline-block',
    width: '8px',
    height: '8px',
    borderRadius: '50%',
    backgroundColor: '#4ade80'
  }} />
            <span style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px'
  }}>DA Price</span>
          </div>
          <div className="flex items-center gap-1">
            <span style={{
    display: 'inline-block',
    width: '8px',
    height: '8px',
    borderRadius: '50%',
    backgroundColor: '#4ade80',
    boxShadow: '0 0 6px rgba(74,222,128,0.6)'
  }} />
            <span style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px'
  }}>Current Position</span>
          </div>
          <div className="flex items-center gap-1">
            <span style={{
    display: 'inline-block',
    width: '12px',
    height: '6px',
    backgroundColor: 'rgba(251,191,36,0.15)',
    borderRadius: '2px'
  }} />
            <span style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px'
  }}>High Deflation Zone</span>
          </div>
        </div>

        {}
        <div style={{
    marginTop: '10px',
    paddingLeft: PAD.left + 'px'
  }}>
          <span style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '12px'
  }}>
            If 95% of supply is burned:{' '}
            <span style={{
    color: '#FFFFFF',
    fontWeight: 700
  }}>{fmtUsdFull(moonPrice)}</span>
            {' '}USDT per DA
          </span>
        </div>
      </div>

      {}
      <p style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '12px',
    lineHeight: 1.6,
    marginTop: '16px',
    marginBottom: 0
  }}>
        Direct formula calculator. DA Price = Liquidity Pool ÷ Circulating Supply. Supply starts at 0 and grows via farming — hard cap 21M. Every sale burns 100% of sold tokens. On every sale, 25% (manual) or 30% (auto) of USDT backing stays in the pool — this drives the price upward.
      </p>
    </div>;
};

<CardGroup cols={2}>
  <Card title="2100 万硬顶" icon="cube">
    最大供应量永久固定。无通胀,无增发。
  </Card>

  <Card title="USDT 100% 背书" icon="shield-check">
    每一枚 DA 代币都由流动性池中的真实 USDT 背书。
  </Card>

  <Card title="每次出售必销毁" icon="fire">
    售出代币 100% 被永久销毁。用户以 USDT 形式获得 75%(手动)或 70%(自动)的价值。剩余 25%(手动)或 30%(自动)为协议佣金,留在池中作为背书 —— 这正是推动 DA 价格上行的力量。
  </Card>

  <Card title="无 P2P 转账" icon="ban">
    DA 仅可被出售、抵押借贷或还款 —— 不支持点对点转账。
  </Card>
</CardGroup>

## "只升不降"的价格公式

价格 = 流动性 ÷ 流通供应量

每次出售 DA,代币会被销毁(供应量下降),而 USDT 留在池中(流动性保持或增长)。代币更少 ÷ 等量或更多的 USDT = 每枚代币的价格更高。

<Info>
  **工作原理示例:** 流通中有 200 DA,流动性池中有 200 USDT。价格 = 1.00 USDT/DA。某用户出售 100 DA。池子支付 70 USDT(100 USDT 价值的 70%)。全部 100 DA 被销毁。结果:流通中剩余 100 DA,池中 130 USDT。新价格 = 130 ÷ 100 = **1.30 USDT/DA**。
</Info>

<Tip>
  全部营销奖励征收的 5% 佣金会直接流入 DA 流动性池 —— 与出售比例分开。借贷手续费、RWA 收入与 FinPro 收入也会注入额外流动性。
</Tip>

<Info>
  **种子供应保护:** 协议在启动时会预先向系统中注入一笔小额永久 DA 储备 —— 即 **种子供应** —— 作为价格公式的技术保障。

  * **永久且不可出售。** 种子供应在协议层被锁定:**不可销毁**、**不可出售**(无论手动或自动),并且 **被排除在自动出售循环之外**。
  * **不计入流通量。** 它 **不被计入流通供应量**,且永远不参与用户余额、农场、借贷或营销分配。
  * **保证分母非零。** 由于 `价格 = 流动性 ÷ 流通供应量`,公式绝不能被零除。种子供应保证 `totalSupply > 0` 始终成立,因此即使在所有其他流通代币都被销毁的极端情况下,价格函数也始终有定义。
  * **仅用于边界情形保护。** 在常规运行下,种子供应对价格发现毫无影响。它纯粹作为一个确定性的下限存在,使 `getPrice()` 在仍有流动性但流通供应量本应归零时仍然良好定义。
</Info>

## 流动性池来源

流动性池是 DA 经济的基石。它由 RWANFTFI 生态系统中的多个来源共同提供资金,确保代币背书持续增长。协议中的每一条收入流都汇入同一个池子,强化"价格 = 流动性 ÷ 供应量"这一公式。

<AccordionGroup>
  <Accordion title="NFT 活动">
    **NFT 购买** —— 每次 NFT 购买的 20% 自动注入流动性池,用于铸造新 DA。

    **再次购买与 Autobuy** —— 每次重复或自动 NFT 购买,额外有 20% 流入流动性池。这激励持续续约,并支持系统增长。
  </Accordion>

  <Accordion title="手续费与佣金">
    **营销奖励税** —— 整个推荐网络中所有营销奖励的 5% 会自动流向流动性池。网络活动直接增强 DA 的背书。

    **累积余额转账费** —— 当将累积余额转给其他用户时,转账金额的 20% 路由至 DA 流动性池。累积余额的任何动作 —— 无论用于 NFT 购买还是钱包间转账 —— 都会为池子带来 20% 的流入。

    **累积余额购买费** —— 使用累积余额购买 NFT 时,被纳入金额的 20% 路由至 DA 流动性池,用于铸造新 DA。示例:累积余额 898 USDT —— 当被纳入 NFT 购买时,718 USDT 用于支付 NFT 价格,180 USDT(898 的 20%)流入 DA 流动性池。每一笔此类购买都会补充池子并为新 DA 创造基础。

    **借贷佣金** —— 取出贷款时,借款人需一次性支付 5% 的佣金,直接进入流动性池。示例:贷款 1,000 USD,借款人收到 950 USD,50 USD 进入池子。每一笔新贷款都会收取此佣金。
  </Accordion>

  <Accordion title="过期与未使用资金">
    **零收入上限下的自动出售** —— 如果 DA 自动出售触发时,用户 NFT 的收入上限为零,则 100% 所得款项将路由至流动性池或 DA 销毁(具体机制由 DAO 设置决定)。

    **过期代金券** —— 如果代金券连续 365 天未使用,100% 资金将注入流动性池。这避免了闲置资金,并消除了不活跃负债。

    **未使用的累积余额** —— 如果累积余额连续 120 天未使用,70% 资金将注入流动性池,用于铸造新 DA。
  </Accordion>

  <Accordion title="外部收入">
    **SWAP 佣金** —— 所有兑换(SWAP)操作的佣金会自动路由至流动性池。

    **借记卡佣金** —— 来自借记卡项目的佣金流入流动性池,从外部经济中创造真实现金流。

    **RWA 收入** —— 来自房地产、租金收益、商业资产以及其他真实世界资产收入的一部分会注入流动性池,将系统锚定到真实经济。

    **FinPro 收入** —— 金融产品(借贷、投资产品、金融服务)利润的一部分流入流动性池。

    **生态系统收入** —— 协议总收入的一部分可能被注入流动性池,或用于为新 DA 铸造创造额外流动性。
  </Accordion>
</AccordionGroup>

## DA 销毁机制

DA 销毁是核心通缩机制 —— 它减少代币供应量,对资产价值形成持续上行压力。

<CardGroup cols={3}>
  <Card title="手动出售" icon="fire">
    售出 DA 100% 被永久销毁。用户以 USDT 形式获得 75% 的价值。剩余 25% 为协议佣金,作为背书留在池中,推动价格增长。
  </Card>

  <Card title="自动出售" icon="clock">
    自动售出 DA 100% 被永久销毁。用户以 USDT 形式获得 70% 的价值。剩余 30% 为协议佣金,作为背书留在池中,推动价格增长。该机制在 4 个周期(共 365 天 / 1 年)内从剩余余额中渐进式触发。
  </Card>

  <Card title="借贷违约" icon="ban">
    若贷款未偿还,作为抵押物的 DA 将通过自动出售周期被渐进式销毁。保护系统流动性,强化金融纪律。
  </Card>
</CardGroup>

## 即时可用与自动出售周期

### 即时可用

DA 代币自被农场产出之日起 100% 立即可供用户支配。无锁仓期。用户可立即:

* **手动出售** —— 以 USDT 形式获得 75% 的价值,100% 代币被销毁
* **取出贷款** —— 以 DA 为抵押,70% LTV,5% 佣金
* **持有等待** —— 保留代币,享受价格随时间增长

### 自动出售周期

如果用户未手动出售,系统将从 **剩余余额** 中,在 4 个周期内分批触发自动出售,总跨度 **365 天(1 年)**。周期时长在链上以天为单位计量(120 / 90 / 90 / 65 天);下方使用的"月份"为方便阅读的近似值。

**以 100 DA 为例:**

<Steps>
  <Step title="周期 1 — 120 天后(~4 个月)">
    自动出售当前余额的 25%。25% × 100 = **售出 25 DA** → 剩余:**75 DA**
  </Step>

  <Step title="周期 2 — 再过 90 天(~3 个月,第 210 天)">
    自动出售剩余余额的 40%。40% × 75 = **售出 30 DA** → 剩余:**45 DA**
  </Step>

  <Step title="周期 3 — 再过 90 天(~3 个月,第 300 天)">
    自动出售剩余余额的 50%。50% × 45 = **售出 22.5 DA** → 剩余:**22.5 DA**
  </Step>

  <Step title="周期 4 — 再过 65 天(~2 个月,第 365 天)">
    自动出售剩余余额的 100%。100% × 22.5 = **售出 22.5 DA** → 剩余:**0 DA**
  </Step>
</Steps>

<Note>
  上方所示的自动出售比例(25% / 40% / 50% / 100%)代表当前协议配置。具体数值作为协议参数存储,可通过标准治理流程修改。请始终查阅智能合约或最新协议文档以获取最新数值。
</Note>

每次自动出售按对应周期触发时刻的 DA 价格执行 —— 而非最初农场产出的价格。100% 自动售出的代币被销毁,用户按自动出售当日价格以 USDT 形式获得 70% 的价值。由于价格随时间上涨,后续周期会以更高价格销毁代币,从而加速通缩。

用户可随时在自动出售触发前手动出售,从而获得 75% 而非 70%。

<Tip>
  手动出售(75% 实付率)在每枚代币层面始终比自动出售(70% 实付率)更划算。然而,自动出售可受益于价格随时间上涨 —— 后续周期会按更高的 DA 价格执行。
</Tip>

<Warning>
  **零收入上限下的自动出售:** 如果自动出售触发,而用户的收入上限为零(NFT 未续约),100% 所得款项将进入流动性池或 DA 销毁(由 DAO 决定)。用户分文不得。请始终保持收入上限处于活跃状态。
</Warning>

## 多批次借贷

每次挖矿周期产出的每个 DA 批次都作为独立的抵押物。这使得连续微贷循环成为可能:

<Steps>
  <Step title="挖矿批次 1">
    用户完成一个挖矿周期并获得 DA 批次 1。
  </Step>

  <Step title="以批次 1 为抵押借款">
    用户对批次 1 取出固定 70% LTV 贷款(5% 佣金在发放时一次性收取并注入流动性池)。
  </Step>

  <Step title="挖矿批次 2">
    用户启动新的挖矿周期并获得 DA 批次 2。
  </Step>

  <Step title="以批次 2 为抵押借款">
    用户对批次 2 取出另一笔固定 70% LTV 贷款(发放时独立的一次性 5% 佣金)。
  </Step>
</Steps>

这允许多笔同时进行的微贷,每个 DA 批次对应一笔。每笔贷款都是独立的 - 绑定到各自的批次 - 并在该批次对应的 stack 进入自动出售周期之前一直保持活跃。如果某一笔贷款违约,仅该批次的抵押物会被销毁 - 而非全部 DA 持仓。

详细的出售与借贷对比,请参阅 [出售与借贷](/zh/da-selling-lending)。借贷还支持部分还款和按比例违约恢复。完整说明请参阅 [借贷机制](/zh/da-lending)。

## 通缩周期

每年系统会触发两次特殊的通缩周期,每次最长 30 天,旨在加剧代币的稀缺性。

<Steps>
  <Step title="暂停新周期">
    在通缩周期持续期间,NFTM 挖矿、质押与 DA 生成的新周期启动将被暂停。**通缩周期开始前已启动的活跃周期仍按计划继续运行并完成** —— 已在进行中的挖矿用户不会失去进度。
  </Step>

  <Step title="启动出售机制">
    自动或自愿的 DA 出售机制被激活。
  </Step>

  <Step title="每日销毁">
    每天销毁一部分代币。
  </Step>

  <Step title="供应收缩">
    市场供应收缩,加强价格上行压力。
  </Step>
</Steps>

<Info>
  通缩周期使 DA 经济在长期内具有可预测、可管理且可持续的特征。
</Info>

活动增加 → 流动性增加 → DA 发行增加 → 销毁增加 → 稀缺性提升 → 资产价值提升。这一闭环系统意味着,生态系统发展得越积极,DA 经济越强劲。

<DaPriceSimulator />
