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

# Сыйақылар және өтемақы

> Желіңізден қалай табыс табасыз.

export const IncomeCalculator = () => {
  var LEVEL_PERCENTS = [30, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 2, 2, 1, 0.5, 0.5, 0.5, 0.5];
  var DEPTH_BY_NFT = [2, 3, 4, 6, 9, 11, 12, 13, 15, 19];
  var NFT_NAMES = ['GENESIS', 'ADVANCE', 'ASCEND', 'ECLIPSE', 'HYDRO', 'QUANTUM', 'PULSE', 'AURORA', 'FLAME', 'INFINITY'];
  var NFT_PRICES = [28, 55, 140, 275, 550, 1100, 2200, 5500, 11000, 24000];
  var MAX_PARTICIPANTS = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304];
  var usdFormatter = new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD',
    maximumFractionDigits: 2
  });
  var fmtUsd = function (n) {
    return usdFormatter.format(n);
  };
  var makeInitialLevels = function () {
    var arr = [];
    for (var i = 0; i < 22; i++) {
      arr.push({
        level: i + 1,
        sales: 0,
        rawSales: '',
        avgPrice: 550
      });
    }
    return arr;
  };
  var [nftLevel, setNftLevel] = useState(5);
  var [showAll, setShowAll] = useState(false);
  var [activePreset, setActivePreset] = useState(null);
  var [levels, setLevels] = useState(makeInitialLevels);
  var maxDepth = DEPTH_BY_NFT[nftLevel - 1];
  var calculated = [];
  for (var ci = 0; ci < levels.length; ci++) {
    var l = levels[ci];
    var isUnlocked = l.level <= maxDepth;
    var pct = LEVEL_PERCENTS[l.level - 1];
    var income = isUnlocked ? l.sales * l.avgPrice * (pct / 100) : 0;
    calculated.push({
      level: l.level,
      sales: l.sales,
      rawSales: l.rawSales,
      avgPrice: l.avgPrice,
      pct: pct,
      income: income,
      isUnlocked: isUnlocked,
      maxPos: MAX_PARTICIPANTS[l.level - 1]
    });
  }
  var visibleLevels;
  if (showAll) {
    visibleLevels = calculated;
  } else {
    visibleLevels = [];
    for (var vi = 0; vi < calculated.length; vi++) {
      if (calculated[vi].isUnlocked || calculated[vi].sales > 0) {
        visibleLevels.push(calculated[vi]);
      }
    }
  }
  var totalIncome = 0;
  for (var ti = 0; ti < calculated.length; ti++) {
    totalIncome = totalIncome + calculated[ti].income;
  }
  var netIncome = totalIncome * 0.75;
  var updateLevel = function (index, updates) {
    setLevels(function (prev) {
      var next = [];
      for (var ui = 0; ui < prev.length; ui++) {
        if (ui === index) {
          next.push({
            level: prev[ui].level,
            sales: updates.sales !== undefined ? updates.sales : prev[ui].sales,
            rawSales: updates.rawSales !== undefined ? updates.rawSales : prev[ui].rawSales,
            avgPrice: updates.avgPrice !== undefined ? updates.avgPrice : prev[ui].avgPrice
          });
        } else {
          next.push({
            level: prev[ui].level,
            sales: prev[ui].sales,
            rawSales: prev[ui].rawSales,
            avgPrice: prev[ui].avgPrice
          });
        }
      }
      return next;
    });
  };
  var applyPreset = function (name, newLevels) {
    setLevels(newLevels);
    setActivePreset(name);
  };
  var makeSmallPreset = function () {
    var arr = [];
    for (var si = 0; si < levels.length; si++) {
      arr.push({
        level: levels[si].level,
        sales: 0,
        rawSales: '',
        avgPrice: 275
      });
    }
    arr[1] = {
      level: arr[1].level,
      sales: 2,
      rawSales: '2',
      avgPrice: 275
    };
    arr[2] = {
      level: arr[2].level,
      sales: 2,
      rawSales: '2',
      avgPrice: 275
    };
    arr[3] = {
      level: arr[3].level,
      sales: 2,
      rawSales: '2',
      avgPrice: 275
    };
    return arr;
  };
  var makeGrowingPreset = function () {
    var arr = [];
    for (var gi = 0; gi < levels.length; gi++) {
      arr.push({
        level: levels[gi].level,
        sales: 0,
        rawSales: '',
        avgPrice: 550
      });
    }
    for (var gi2 = 1; gi2 <= 8; gi2++) {
      var s = Math.min(3 + gi2, MAX_PARTICIPANTS[gi2]);
      arr[gi2] = {
        level: arr[gi2].level,
        sales: s,
        rawSales: String(s),
        avgPrice: 550
      };
    }
    return arr;
  };
  var makeClearPreset = function () {
    var arr = [];
    for (var ki = 0; ki < levels.length; ki++) {
      arr.push({
        level: levels[ki].level,
        sales: 0,
        rawSales: '',
        avgPrice: levels[ki].avgPrice
      });
    }
    return arr;
  };
  var presetBtnStyle = function (name) {
    return {
      backgroundColor: activePreset === name ? 'rgba(255,255,255,0.2)' : 'rgba(255,255,255,0.1)',
      border: '1px solid ' + (activePreset === name ? 'rgba(255,255,255,0.3)' : 'rgba(255,255,255,0.15)'),
      color: '#FFFFFF',
      padding: '6px 16px',
      borderRadius: '9999px',
      fontSize: '11px',
      fontWeight: 600,
      cursor: 'pointer'
    };
  };
  var selectStyle = {
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: '6px',
    padding: '6px 4px',
    fontSize: '12px',
    width: '68px',
    outline: 'none',
    cursor: 'pointer',
    WebkitAppearance: 'none',
    appearance: 'none',
    backgroundImage: 'url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'10\' height=\'6\'%3E%3Cpath d=\'M0 0l5 6 5-6z\' fill=\'%23666\'/%3E%3C/svg%3E")',
    backgroundRepeat: 'no-repeat',
    backgroundPosition: 'right 6px center',
    paddingRight: '18px'
  };
  var inputStyle = {
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: '6px',
    padding: '6px 8px',
    fontSize: '13px',
    width: '48px',
    textAlign: 'center',
    outline: 'none'
  };
  var thStyle = function (width, align) {
    return {
      padding: '4px 4px',
      textAlign: align || 'center',
      color: 'rgba(255,255,255,0.5)',
      fontWeight: 600,
      fontSize: '11px',
      textTransform: 'uppercase',
      letterSpacing: '0.05em',
      width: width
    };
  };
  return <div style={{
    backgroundColor: '#000000',
    color: '#FFFFFF',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="p-6 rounded-xl not-prose border">
      {}
      <div className="flex items-center justify-between mb-6">
        <h3 style={{
    color: '#FFFFFF',
    margin: 0
  }} className="text-lg font-serif italic">Marketing Income Calculator</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)'
  }} className="text-xs px-3 py-1 rounded-full font-medium">Interactive</span>
      </div>

      {}
      <div style={{
    backgroundColor: '#383838',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="rounded-xl border p-4 mb-4">
        <label style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-[10px] font-semibold uppercase tracking-wider mb-2 block">Your NFT Level</label>
        <select value={nftLevel} onChange={function (e) {
    setNftLevel(Number(e.target.value));
  }} style={{
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="w-full p-2.5 rounded-lg text-sm font-medium border">
          {NFT_NAMES.map(function (name, i) {
    return <option key={i} value={i + 1}>{'L' + (i + 1) + ' — ' + name + ' (' + fmtUsd(NFT_PRICES[i]) + ') — ' + DEPTH_BY_NFT[i] + ' lvls'}</option>;
  })}
        </select>
      </div>

      {}
      <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.1)'
  }} className="rounded-xl p-6 text-center mb-4">
        <div style={{
    color: 'rgba(255,255,255,0.6)'
  }} className="text-xs uppercase tracking-wider mb-1">Total Gross Income</div>
        {totalIncome === 0 ? <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '14px'
  }}>
            Enter sales data below or use a preset
          </div> : <div style={{
    color: '#FFFFFF',
    fontSize: '40px'
  }} className="font-black transition-all duration-300">{'≈ ' + fmtUsd(totalIncome)}</div>}
        <div style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-xs mt-1">Based on your custom level inputs below</div>
        {totalIncome > 0 && <div>
            <div style={{
    height: '1px',
    width: '80px',
    backgroundColor: 'rgba(255,255,255,0.1)',
    margin: '14px auto'
  }} />
            <div style={{
    display: 'inline-flex',
    alignItems: 'center',
    gap: '8px',
    backgroundColor: 'rgba(74,222,128,0.08)',
    border: '1px solid rgba(74,222,128,0.15)',
    borderRadius: '9999px',
    padding: '6px 16px'
  }}>
              <span style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '12px'
  }}>75% net income</span>
              <span style={{
    color: '#4ade80',
    fontSize: '14px',
    fontWeight: 800
  }}>{fmtUsd(netIncome)}</span>
            </div>
            <div style={{
    color: 'rgba(255,255,255,0.35)',
    fontSize: '11px',
    marginTop: '10px'
  }}>Regular Balance — withdraw anytime</div>
          </div>}
      </div>

      {}
      <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    marginBottom: '8px'
  }}>
        Quick fill presets:
      </div>
      <div className="flex gap-2 mb-3 flex-wrap">
        <button onClick={function () {
    applyPreset('small', makeSmallPreset());
  }} style={presetBtnStyle('small')}>
          Small Team
        </button>
        <button onClick={function () {
    applyPreset('growing', makeGrowingPreset());
  }} style={presetBtnStyle('growing')}>
          Growing Network
        </button>
        <button onClick={function () {
    applyPreset('clear', makeClearPreset());
  }} style={presetBtnStyle('clear')}>
          Clear All
        </button>
      </div>

      {}
      <div style={{
    overflowX: 'auto'
  }}>
        <table style={{
    minWidth: '400px',
    width: '100%',
    borderCollapse: 'collapse',
    fontSize: '12px',
    tableLayout: 'fixed'
  }}>
          <thead>
            <tr style={{
    backgroundColor: 'rgba(255,255,255,0.08)'
  }}>
              <th style={thStyle('32px', 'center')}>Level</th>
              <th style={thStyle('36px', 'center')}>%</th>
              <th style={thStyle('72px', 'center')}>NFT Price</th>
              <th style={thStyle('52px', 'center')}>Sales</th>
              <th style={thStyle('72px', 'right')}>Income</th>
            </tr>
          </thead>
          <tbody>
            {visibleLevels.map(function (row) {
    var idx = row.level - 1;
    var isLocked = !row.isUnlocked;
    var rowBg = row.sales > 0 ? 'rgba(255,255,255,0.04)' : idx % 2 === 0 ? 'rgba(255,255,255,0.03)' : 'transparent';
    var rowOpacity = isLocked ? 0.3 : 1;
    return <tr key={row.level} style={{
      backgroundColor: rowBg,
      opacity: rowOpacity
    }}>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center',
      fontWeight: 600
    }}>
                    {row.level}
                    {row.level >= 16 && row.isUnlocked && <span style={{
      color: 'rgba(255,255,255,0.3)',
      fontSize: '9px',
      marginLeft: '4px'
    }}>P2</span>}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center',
      color: 'rgba(255,255,255,0.5)'
    }}>
                    {row.level === 1 ? <span style={{
      fontSize: '10px',
      color: 'rgba(255,255,255,0.5)'
    }}>Direct Sale</span> : <span>{row.pct + '%'}</span>}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center'
    }}>
                    {isLocked ? <span style={{
      color: 'rgba(255,255,255,0.4)',
      fontSize: '11px'
    }}>Upgrade NFT</span> : <select value={row.avgPrice} onChange={function (e) {
      updateLevel(idx, {
        avgPrice: Number(e.target.value)
      });
    }} style={selectStyle}>
                        {NFT_PRICES.map(function (p) {
      return <option key={p} value={p}>{'$' + p.toLocaleString()}</option>;
    })}
                      </select>}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center'
    }}>
                    {isLocked ? <span style={{
      color: 'rgba(255,255,255,0.3)'
    }}>{'\u2014'}</span> : <input type="text" inputMode="numeric" pattern="[0-9]*" value={row.rawSales} placeholder="0" onChange={function (e) {
      var val = e.target.value.replace(/[^0-9]/g, '');
      var num = val === '' ? 0 : parseInt(val, 10);
      updateLevel(idx, {
        sales: num,
        rawSales: val
      });
    }} onFocus={function (e) {
      e.target.select();
    }} style={inputStyle} />}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'right',
      fontWeight: 700
    }}>
                    {row.isUnlocked ? row.sales > 0 ? <span style={{
      color: '#4ade80'
    }}>{fmtUsd(row.income)}</span> : <span style={{
      color: 'rgba(255,255,255,0.3)'
    }}>{'\u2014'}</span> : '\u2014'}
                  </td>
                </tr>;
  })}
          </tbody>
        </table>
        {}
        <div style={{
    backgroundColor: 'rgba(255,255,255,0.08)',
    display: 'flex',
    justifyContent: 'space-between',
    padding: '12px 16px',
    borderRadius: '0 0 12px 12px',
    fontSize: '14px',
    fontWeight: 800
  }}>
          <span style={{
    color: 'rgba(255,255,255,0.6)'
  }}>TOTAL</span>
          <span style={{
    color: '#4ade80'
  }}>{'≈ ' + fmtUsd(totalIncome)}</span>
        </div>
      </div>

      {}
      <div style={{
    color: '#9CA3AF',
    fontSize: '12px',
    marginTop: '8px'
  }}>
        Level 1 earnings come from the Sponsor Bonus (30% new sale / 20% rebuy), not from the tree distribution percentage.
      </div>

      {}
      <button onClick={function () {
    setShowAll(!showAll);
  }} style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '11px',
    marginTop: '8px',
    background: 'none',
    border: 'none',
    cursor: 'pointer',
    padding: 0
  }}>
        {showAll ? 'Hide locked levels' : 'Show all 22 levels'}
      </button>
    </div>;
};

<CardGroup cols={2}>
  <Card title="1-фаза — жаңа сатылым" icon="user-plus">
    Тікелей демеуші NFT сату бағасының 30%-ын алады. Қайталанатын сатып алу: 20%.
  </Card>

  <Card title="2-фаза — реттелген" icon="arrows-rotate">
    Жаңа сатылым 20%-ке реттеледі. Қайта сатып алу 20%-те қалады. 16–22 деңгейлер толық ашылған.
  </Card>
</CardGroup>

<Note>
  1-фазадан 2-фазаға өту (Демеуші Бонусын 30%-тен 20%-ке дейін реттеуді және 16–22 ағаш деңгейлерін ашуды қоса алғанда) DAO басқаруы арқылы орындалады, күн бойынша автоматты түрде емес. DAO дауыс беру параметр өзгерістерін қабылдау үшін стандартты 30% ұсыныс шегін және 50% көпшілік мақұлдауын талап етеді.
</Note>

RWANFTFI-дегі маркетинг сыйақылары жалпы кірісіңізді қалыптастыру үшін біріктірілетін үш тәуелсіз ағыннан тұрады:

1. **Демеуші Бонусы** — серіктесті шақырғаны үшін тікелей комиссия (NFT сату бағасының 1-фазада 30%-ы / 2-фазада 20%-ы).
2. **Ағаш бойынша бөлу** — төменгі құрылымыңыздан деңгейлік сыйақылар (2–22 деңгейлер, пайыздар тереңдікке байланысты әртүрлі).
3. **Сәйкестендіру Бонусы** — тікелей серіктестеріңіздің кірісінен 3 деңгей бойынша қайталама 5% + 5% + 5%.

Әр ағын смарт-контрактпен әр жарамды NFT сатып алуында тәуелсіз есептеледі және төленеді.

## Ағаш бойынша бөлу

Төменгі құрылымыңыздағы әр NFT сатылымынан 22 деңгейге дейін пайызын алыңыз:

<AccordionGroup>
  <Accordion title="1–6 деңгейлер · Кіру қабаттары" icon="layer-group">
    * 1-деңгей: 0%
    * 2-деңгей: 1%
    * 3–4 деңгейлер: әрқайсысы 2%
    * 5–6 деңгейлер: әрқайсысы 3%
  </Accordion>

  <Accordion title="7–15 деңгейлер · Негізгі табыс тереңдігі" icon="chart-simple">
    * 7–14 деңгейлер: әрқайсысы 4% (8 деңгей × 4% = негізгі кіріс қозғалтқышы)
    * 15-деңгей: 5% (ең жоғары жалғыз деңгей пайызы)
  </Accordion>

  <Accordion title="16–22 деңгейлер · 2-фаза кеңеюі" icon="unlock">
    * 16–17 деңгейлер: әрқайсысы 2%
    * 18-деңгей: 1%
    * 19–22 деңгейлер: әрқайсысы 0,5%

    *DAO басқару дауысы арқылы 2-фазада ашылады (Q4 2026 жоспарланған). Толық тереңдік үшін INFINITY NFT қажет.*
  </Accordion>
</AccordionGroup>

<Info>
  **Неліктен 1-деңгей = 0%?** Ағаш бойынша бөлу мен Демеуші Бонусы — екі бөлек сыйақы ағындары. Тікелей шақыруларыңыз сіздің маркетинг құрылымыңыздың 1-деңгейінде отырады және сіз олардың NFT сатып алуынан Демеуші Бонусын (1-фазада 30%, 2-фазада 20%) аласыз. Қос өтемақыны болдырмау үшін Ағаш бойынша бөлудің 1-деңгейі 0%-ке орнатылған. Ағаш бойынша бөлу сыйақылары 2-деңгейден (1%) бастап беріледі — жеке шақыруларыңыздан тереңірек құрылымдағы белсенділікті қамтиды.
</Info>

<Note>
  **1-деңгейдегі қайта құйылу тікелей ештеңе таппайды.** Қайта құйылу арқылы серіктес сіздің 1-деңгейіңізге орналастырылғанда (жоғарғы демеушіңіздің шақыруы сіздің ағашыңызға түседі), сіз 0% Демеуші Бонусын аласыз (ол олардың нақты шақырушысына кетеді) және 0% Ағаш бойынша бөлуді аласыз (1-деңгей = 0%). Қайта құйылудың құндылығы 2-деңгейден және тереңнен іске асырылады — ол қайта құйылған серіктестер өз командаларын құрғанда, олардың жалданғандары сізге ағаш бойынша бөлу сыйақыларын генерациялайды.
</Note>

## Сығу

<Tip>
  **Сығу сіздің пайдаңызға жұмыс істейді.** Егер сізден жоғары біреудің кіріс лимиті сарқылған немесе NFT деңгейі жеткіліксіз болса, олардың сыйақылары жоғары қарай сығылады — сізге дейін болуы мүмкін. NFT-іңіздің маркетинг қатынасы тереңірек болған сайын, сіз қанша көп сығылған сыйақыларды иемденіп ала аласыз.
</Tip>

Төменгі құрылымыңыздағы пайдаланушы өткізіп жіберілгенде (Кіріс Лимиті = 0 немесе NFT деңгейі тым төмен), сыйақы келесі білікті қатысушыға жоғары қарай өтеді. Бұл өткізіп жіберілген пайдаланушы үшін **Жоғалған Кіріс** ретінде белгіленеді.

## Сәйкестендіру бонусы (5% + 5% + 5%)

Тікелей серіктестеріңіз 3 деңгей бойынша жасайтын **NFT-сатылымдар кірісінің** пайызын алыңыз. Сәйкестендіру Бонусы тек тікелей серіктесіңіздің құрылымы ішіндегі NFT сатуларынан алатын маркетинг төлемдерінен есептеледі — басқа кіріс ағындарынан емес (Мұздатылған Баланс босатулары, DA-ны қолмен сату және т.б.):

<Steps>
  <Step title="1-деңгей — 5%">
    Кем дегенде 4-деңгейлі (ECLIPSE, 275 USDT) NFT талап етеді.
  </Step>

  <Step title="2-деңгей — 5%">
    1 000 USDT жиынтық жеке сатуды талап етеді.
  </Step>

  <Step title="3-деңгей — 5%">
    3 000 USDT жиынтық жеке сатуды талап етеді.
  </Step>
</Steps>

<Info>
  **"Жиынтық жеке сату" нені білдіреді:** Бұл сіздің тікелей шақыруларыңыз жасаған барлық NFT сатып алулардың өмір бойы жиынтық қосындысы. Бір серіктестің қайталанатын сатып алулары (қайта сатып алулар, жаңартулар) жалпы санға енеді, ал әртүрлі серіктестерге сатылымдар бірге жинақталады. Мысалы, бір серіктес 1 000 USDT-ден үш NFT сатып алса, сіздің жиынтық жалпы сомаңыз 3 000 USDT — Сәйкестендіру Бонусының 3-деңгейін ашады. Шек жеткеннен кейін, сол Сәйкестендіру Бонусының деңгейі **тұрақты түрде белсенді** және қайта орнатылмайды.
</Info>

<IncomeCalculator />
