> ## 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.

# Khai Thác & Farming

> Từ NFTM đến DA trong hai bước.

export const MiningPipeline = () => {
  const [selectedLevel, setSelectedLevel] = useState(5);
  const LEVELS = {
    5: {
      name: 'HYDRO',
      price: 550,
      days: 45,
      c1: 0.10,
      c2: 0,
      cycles: 1
    },
    6: {
      name: 'QUANTUM',
      price: 1100,
      days: 44,
      c1: 0.10,
      c2: 0,
      cycles: 1
    },
    7: {
      name: 'PULSE',
      price: 2200,
      days: 43,
      c1: 0.10,
      c2: 0,
      cycles: 1
    },
    8: {
      name: 'AURORA',
      price: 5500,
      days: 42,
      c1: 0.10,
      c2: 0.15,
      cycles: 2
    },
    9: {
      name: 'FLAME',
      price: 11000,
      days: 41,
      c1: 0.10,
      c2: 0.15,
      cycles: 2
    },
    10: {
      name: 'INFINITY',
      price: 24000,
      days: 40,
      c1: 0.10,
      c2: 0.15,
      cycles: 2
    }
  };
  const fmtUsd = 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 lvl = LEVELS[selectedLevel];
  var nftmCycle1 = lvl.price * lvl.c1;
  var nftmCycle2 = lvl.price * lvl.c2;
  var totalNftm = nftmCycle1 + nftmCycle2;
  var totalDays = lvl.days * 2 * lvl.cycles;
  var daPrice = 1.00;
  var daReceived = totalNftm / daPrice;
  return <div style={{
    backgroundColor: '#000000',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="p-6 rounded-xl not-prose">

      {}
      <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
        <div>
          <h3 style={{
    color: '#FFFFFF',
    margin: 0
  }} className="text-lg font-serif italic">Mining Dashboard</h3>
          <p style={{
    color: 'rgba(255,255,255,0.4)',
    margin: '4px 0 0 0'
  }} className="text-xs">Full pipeline overview — from NFT purchase to DA harvest</p>
        </div>
        <div className="flex items-center gap-3">
          <select value={selectedLevel} onChange={function (e) {
    setSelectedLevel(Number(e.target.value));
  }} style={{
    backgroundColor: '#383838',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: '8px',
    padding: '8px 12px',
    fontSize: '13px',
    cursor: 'pointer',
    outline: 'none'
  }}>
            {Object.entries(LEVELS).map(function (entry) {
    var k = entry[0];
    var d = entry[1];
    return <option key={k} value={k}>L{k} — {d.name} ({d.price} USDT) — {d.days} days</option>;
  })}
          </select>
          <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>

      {}
      <div className="mb-6">
        <div className="flex justify-between items-center mb-2">
          <span style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-xs font-medium">Total Pipeline</span>
          <span style={{
    color: '#FFFFFF'
  }} className="text-sm font-bold">{totalDays} days</span>
        </div>

        <div className="flex items-center gap-0.5" style={{
    height: '48px',
    borderRadius: '12px',
    overflow: 'hidden'
  }}>
          <div style={{
    backgroundColor: 'rgba(255,255,255,0.18)',
    width: '48%',
    height: '100%',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    borderTopLeftRadius: '12px',
    borderBottomLeftRadius: '12px'
  }}>
            <div style={{
    textAlign: 'center'
  }}>
              <div style={{
    color: '#FFFFFF',
    fontSize: '12px',
    fontWeight: 700
  }}>Mining</div>
              <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px'
  }}>
                {lvl.cycles === 1 ? lvl.days + ' days' : '2 × ' + lvl.days + ' days'} — {fmtNum(totalNftm)} NFTM
              </div>
            </div>
          </div>
          <div style={{
    backgroundColor: '#ef4444',
    width: '4%',
    height: '100%',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center'
  }}>
            <div style={{
    color: '#FFFFFF',
    fontSize: '9px',
    fontWeight: 900
  }}>72h</div>
          </div>
          <div style={{
    backgroundColor: 'rgba(255,255,255,0.08)',
    width: '48%',
    height: '100%',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    borderTopRightRadius: '12px',
    borderBottomRightRadius: '12px'
  }}>
            <div style={{
    textAlign: 'center'
  }}>
              <div style={{
    color: '#FFFFFF',
    fontSize: '12px',
    fontWeight: 700
  }}>Farming</div>
              <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '10px'
  }}>{lvl.cycles === 1 ? lvl.days + ' days' : '2 × ' + lvl.days + ' days'} — {fmtNum(daReceived)} DA</div>
            </div>
          </div>
        </div>

        <div className="flex items-center gap-2 mt-2">
          <span className="relative flex" style={{
    height: '8px',
    width: '8px'
  }}>
            <span className="animate-ping absolute inline-flex rounded-full" style={{
    height: '100%',
    width: '100%',
    backgroundColor: '#ef4444',
    opacity: 0.75
  }} />
            <span className="relative inline-flex rounded-full" style={{
    height: '8px',
    width: '8px',
    backgroundColor: '#ef4444'
  }} />
          </span>
          <span style={{
    color: '#f87171',
    fontSize: '11px',
    fontWeight: 500
  }}>72-hour critical window — miss it and the entire cycle restarts from scratch</span>
        </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="/NFTMp.webm" type="video/webm" />
          </video>
        </div>
        {}
        <div style={{
    flex: '1 1 0%',
    minWidth: '240px'
  }}>
          <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-5 text-center">
            <div style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-[10px] uppercase tracking-wider mb-1">
              You Receive After {totalDays} days
            </div>
            <div style={{
    color: '#FFFFFF',
    fontSize: '36px'
  }} className="font-black">
              {fmtNum(daReceived)} DA
            </div>
            <div style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-xs mt-1">
              Worth {fmtUsd(daReceived * daPrice)} at current DA price
            </div>
            <div style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-xs mt-2">
              from {fmtUsd(lvl.price)} investment · {lvl.cycles === 1 ? 'cycle 1: ' + fmtNum(nftmCycle1) + ' NFTM' : 'cycle 1: ' + fmtNum(nftmCycle1) + ' + cycle 2: ' + fmtNum(nftmCycle2) + ' NFTM'}
            </div>
          </div>
        </div>
      </div>
      <div className="grid grid-cols-3 gap-3" style={{
    marginTop: '12px'
  }}>
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-3 text-center">
          <div style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-[10px] uppercase tracking-wider mb-1">Investment</div>
          <div style={{
    color: '#FFFFFF'
  }} className="text-base font-bold">{fmtUsd(lvl.price)}</div>
        </div>
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-3 text-center">
          <div style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-[10px] uppercase tracking-wider mb-1">DA Value</div>
          <div style={{
    color: '#FFFFFF'
  }} className="text-base font-bold">{fmtUsd(daReceived * daPrice)}</div>
        </div>
        <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.05)'
  }} className="rounded-xl p-3 text-center">
          <div style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-[10px] uppercase tracking-wider mb-1">Pipeline</div>
          <div style={{
    color: '#FFFFFF'
  }} className="text-base font-bold">{totalDays} days</div>
        </div>
      </div>
      {lvl.cycles === 1 && <div style={{
    backgroundColor: 'rgba(255,255,255,0.05)',
    border: '1px solid rgba(255,255,255,0.15)',
    marginTop: '12px'
  }} className="rounded-xl p-4 text-center">
          <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '12px'
  }}>
            This NFT tier has 1 mining cycle producing 10% of NFT price in NFTM.
          </div>
        </div>}
      <div style={{
    color: 'rgba(255,255,255,0.4)'
  }} className="text-xs text-center mt-3">
        Once harvested, compare your options on{' '}
        <a href={'/en/da-selling-lending'} style={{
    color: '#FFFFFF',
    textDecoration: 'underline'
  }}>
          Selling & Lending
        </a>
      </div>

    </div>;
};

Để có được DA, người dùng phải tham gia vào quy trình hai bước: Khai Thác và Farming. Chỉ NFT Premium (Cấp 5+) và Elite mới có khả năng này.

<Info>
  **NFTM không phải là token.** Đây là bộ đếm khai thác nội bộ (chỉ số) được hợp đồng thông minh theo dõi. Trong giao diện, bạn thấy thanh tiến trình và lượng NFTM dự kiến. NFTM không có giá trị thị trường và không thể giao dịch hoặc chuyển nhượng — nó chỉ tồn tại để được stake vào Farming và chuyển đổi thành DA.
</Info>

<Info>
  **Yêu cầu Giới Hạn Thu Nhập đang hoạt động để khai thác.** Cả Khai Thác và Farming đều yêu cầu NFT đủ điều kiện có **Giới Hạn Thu Nhập** khác 0. Nếu giới hạn của bạn đã đạt 0, hợp đồng thông minh sẽ từ chối bắt đầu một chu kỳ khai thác mới. Để tiếp tục khai thác, hãy làm mới Giới Hạn Thu Nhập trước — thông qua hệ thống Autobuy 3/3, gia hạn thủ công cùng cấp, hoặc nâng cấp lên NFT cấp cao hơn — sau đó kích hoạt chu kỳ tiếp theo. Giới Hạn Thu Nhập là điều kiện tiên quyết; không có nó, dòng khai thác không bắt đầu.
</Info>

<Steps>
  <Step title="Kích Hoạt Khai Thác">
    Bắt đầu khai thác trên NFT đủ điều kiện của bạn. Thời lượng chu kỳ phụ thuộc vào cấp của bạn — từ 45 ngày (HYDRO) xuống 40 ngày (INFINITY).
  </Step>

  <Step title="Tạo NFTM">
    NFT của bạn tạo NFTM trong suốt thời gian chu kỳ. Cấp 5–7 (HYDRO, QUANTUM, PULSE) có **1 chu kỳ khai thác** tạo ra **10%** giá NFT bằng NFTM. Cấp 8–10 (AURORA, FLAME, INFINITY) có **2 chu kỳ khai thác** — chu kỳ đầu tiên tạo ra **10%** và chu kỳ thứ hai tạo ra **15%** giá NFT bằng NFTM.
  </Step>

  <Step title="Nhận Trong Vòng 72 Giờ">
    Sau khi khai thác hoàn thành, bạn có chính xác **72 giờ** để stake NFTM của mình vào Farming. Bỏ lỡ cửa sổ này và bạn sẽ phải bắt đầu lại từ đầu.
  </Step>

  <Step title="Farm DA">
    NFTM đã stake vào Farming với cùng thời lượng như chu kỳ khai thác. Vào cuối, NFTM chuyển đổi thành DA dựa trên giá hiện tại và được ghi có vào TokenStack của bạn.
  </Step>
</Steps>

<Warning>
  **Cửa Sổ Quan Trọng 72 Giờ:** Nếu bạn không stake NFTM của mình trong vòng 72 giờ sau khi khai thác hoàn thành, toàn bộ chu kỳ sẽ mất. Bạn phải bắt đầu lại khai thác từ đầu. Đặt lời nhắc.
</Warning>

<Warning>
  **Nhận Trước Khi Bạn Nâng Cấp — Phần Thưởng Farming Chưa Nhận Sẽ Bị Hủy:** Bất kỳ giao dịch mua hoặc nâng cấp NFT nào đều kích hoạt `terminate()` trên trạng thái khai thác/farming của người dùng. Theo thiết kế, `terminate()` dừng phiên đang hoạt động và **hủy tất cả phần thưởng farming chưa nhận**, bao gồm cả phần thưởng đã đáo hạn nhưng chưa được nhận. Nhóm đã xác nhận đây là chủ ý trong phản hồi kiểm toán: *"Đây là chủ ý, terminate() phải dừng các phiên đang hoạt động và hủy phần thưởng chưa nhận theo thiết kế."*

  **Quy tắc vận hành:** nếu bạn có phần thưởng farming đã đáo hạn nhưng chưa nhận, **hãy nhận nó trước**, và chỉ sau đó mới mua hoặc nâng cấp NFT. Nếu không, phần thưởng sẽ bị mất vĩnh viễn vào thời điểm giao dịch NFT mới được xác nhận.
</Warning>

<Warning>
  **Tạm Dừng Chu Kỳ Giảm Phát:** Hai lần mỗi năm, hệ thống kích hoạt Chu Kỳ Giảm Phát kéo dài tới 30 ngày. Trong giai đoạn này, **việc khởi động các chu kỳ mới** của khai thác NFTM, staking, và tạo DA bị tạm dừng. Các chu kỳ đã chạy trước khi Chu Kỳ Giảm Phát bắt đầu **tiếp tục và hoàn thành theo lịch trình** — tiến độ không bị mất. Lập kế hoạch khởi động các chu kỳ mới xung quanh các giai đoạn theo lịch trình này.
</Warning>

<MiningPipeline />
