> For the complete documentation index, see [llms.txt](https://darvin-space.gitbook.io/darvin-space-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://darvin-space.gitbook.io/darvin-space-docs/general-setup/routes.md).

# routes

Общие настройки для роутов

<details>

<summary>groupSettings</summary>

Одна из самых главных настроек. Которая позволяет вам рандомизировать модули в роуте.&#x20;

Давайте рассмотрим на примере ниже

```typescript
const groupSettings: GroupSettings = {
  // Рандомно выполняем 1 из модулей под indexGroup: 5
  5: [1, 1],
};
```

```typescript
const modules: UserModuleConfig[] = [
  // Пополнение с OKX/Binance, только, если необходимо
  // Выполняется только 1 модуль рандомно в рандомной сети
  {
    count: [1, 1],
    moduleName: 'okx-withdraw',

    randomOkxWithdrawNetworks: ['optimism'],

    tokenToWithdraw: 'ETH',
    minAndMaxAmount: [0.0001, 0.0002],
    minTokenBalance: MAX_BALANCE,

    // Выводим, только если в Taiko меньше указанной суммы
    minDestTokenBalance: MIN_BALANCE,
    minDestTokenNetwork: 'taiko',

    stopWalletOnError: true,
    indexGroup: 5,
  },
  {
    count: [1, 1],
    moduleName: 'bitget-withdraw',

    randomNetworks: ['optimism', 'base'],

    tokenToWithdraw: 'ETH',
    minAndMaxAmount: [0.0001, 0.0002],
    minTokenBalance: MAX_BALANCE,

    // Выводим, только если в Taiko меньше указанной суммы
    minDestTokenBalance: MIN_BALANCE,
    minDestTokenNetwork: 'taiko',

    stopWalletOnError: true,
    indexGroup: 5,
  },
  {
     count: [1, 1],
     moduleName: 'binance-withdraw',
  
     randomBinanceWithdrawNetworks: ['base', 'optimism', 'zkSync'],
  
     tokenToWithdraw: 'ETH',
     minAndMaxAmount: [MAX_BALANCE, 0.0001],
     minTokenBalance: MAX_BALANCE,
  
     // Выводим, только если в Taiko меньше указанной суммы
     minDestTokenBalance: MIN_BALANCE,
     minDestTokenNetwork: 'taiko',
  
     stopWalletOnError: true,
     indexGroup: 5,
  }
]
```

На примере выше можно увидеть, что у нас в роут добавлено 3 разных модуля. Это вывод с 3 разных бирж. Например, нам НЕ нужно выводить сразу с трёх бирж, а нужно вывести только с 1й рандомной. В этом случае в groupSettings указываем indexGroup от этих модулей и указываем количество модулей, которые должны быть выполнены из этой indexGroup.&#x20;

Давайте рассмотрим второй вариант.

```typescript
const groupSettings: GroupSettings = {
  5: [1, 1],
  10: [1, 2],
};
  
const modules: UserModuleConfig[] = [
  // Пополняем с биржи
  {
    moduleName: 'okx-withdraw',
    indexGroup: 5,
  },
  {
    moduleName: 'binance-withdraw',
    indexGroup: 5,
  },
  {
    moduleName: 'bitget-withdraw',
    indexGroup: 5,
  },
  
  // Делаем рандомные транзы
  {
    moduleName: '0xastra-boost',
    indexGroup: 10,
  },
  {
    moduleName: 'wrap-eth',
    indexGroup: 10,
  },
  {
    moduleName: 'taiko-rubyscore-vote',
    indexGroup: 10,
  },
  {
    moduleName: 'brigadegame-harvest',
    indexGroup: 10,
  },
  
  // Выводим на биржу
  {
    moduleName: 'bitget-deposit',
    indexGroup: 15,
  },
]
```

Что в итоге сделает софт, если вы так настроите роут?

1. Пополнит кошелёк через рандомную биржу
2. Сделает от 1й до 2х транзакций в сети Taiko
3. Выведет средства обратно на биржу
4. Модули под индекс группой #10 будут каждый раз перемешаны и будут использованы рандомно

В итоге мы построили максимально гибкий роут, который может закрыть потребности 99% пользователей софта QSO.&#x20;

</details>

<details>

<summary>countModules</summary>

```typescript
// Из всех модулей, возьмёт только 1 рандомный
// Укажите [0, 0] если хотите чтобы использовались все модули
const countModules = [0, 0] as NumberRange;
```

Удобная настройка вместо groupSettings, если вы просто хотите прогреть сеть рандомными транзакциями. Например указываете список из 10 модулей. В countModules ставите \[2, 5] и он вам рандомно будет выполнять для каждого кошелька от 2х до 5ти транзакций. А если вы укажите еще count: \[1, 5] внутри модуля, тогда есть шанс, что у вас кошелёк будет делать одинаковые модули и тем самым добавит еще большего рандома.&#x20;

</details>

<details>

<summary>limitWalletsToUse</summary>

Выполнит скрипт на указанном количестве кошельков

```typescript
// Если хотите отключить, укажите 0!
const limitWalletsToUse = 20;
```

То есть, если у вас 100 кошельков и включена рандомизация кошельков, то при запуске флоу в котором указана эта настройка у вас возьмётся в работу 20 рандомных кошельков, которые были указаны в wallets.csv

</details>

<details>

<summary>splitModuleCount</summary>

Самое важное поле!\
Перемешает все транзакции конкретного модуля между всеми модулями в конкретной индекс группе.\
Если у вас будет указано false, тогда транзакции модуля, которые указаны в count будут вызываться одна за одной.

Давайте рассмотрим 2 примера с включенной настройкой.

**Легкий пример:**

<pre class="language-typescript"><code class="lang-typescript"><strong>const splitModuleCount = true;
</strong></code></pre>

Если указали true, тогда вот это:

```json
[
  { moduleName: 'starkVerse', count: [2,2] }, 
  { moduleName: 'dmail', count: [2,2] }
]
```

Превратится в это:

```json
[
  { moduleName: 'starkVerse', count: [1,1] }, 
  { moduleName: 'starkVerse', count: [1,1] }, 
  { moduleName: 'dmail', count: [1,1] }, 
  { moduleName: 'dmail', count: [1,1] }
]
```

А если вы указали в settings.shuffle.modules: true, тогда они еще перемешаются между собой и будет вот это:

```json
[
  { moduleName: 'dmail', count: [1,1] },
  { moduleName: 'starkVerse', count: [1,1] }, 
  { moduleName: 'dmail', count: [1,1] }, 
  { moduleName: 'starkVerse', count: [1,1] }, 
]
```

\
**Сложный пример:**

Например, если вам нужно в Taiko сделать 100 транзакций wrap и unwrap и при этом между ними закинуть еще какие-то минты, то вам не нужно указывать и дублировать 100 таких модулей. Если вы хотите в какой-то рандомный момент запихнуть какую-то другую транзакцию для рандомизации кошелька. Вам достаточно сделать следующее...

<pre class="language-typescript"><code class="lang-typescript">
const modules: UserModuleConfig[] = [
  {
    moduleName: 'bitget-withdraw',
    indexGroup: 1,
  },
<strong>  {
</strong>    moduleName: 'wrap-eth',
    indexGroup: 2,
    count: [90, 100],
  },
  {
    moduleName: 'taiko-rubyscore-vote',
    indexGroup: 2,
    count: [0, 2],
  },
  {
    moduleName: 'brigadegame-harvest',
    indexGroup: 2,
    count: [0, 1],
  },
  {
    moduleName: 'bitget-deposit',
    indexGroup: 3,
  },
];

const splitModuleCount = true;
</code></pre>

В данном примере используются 3 группы. Так как нам важная в некоторые момента чёткая последовательность. Мы не можем крутить транзакции например без объема и в конце кошелькам нам нужно вернуться средства, чтобы начать крутить следующий кошелёк. По этому софт сначала сделает вывод с Bitget, после чего рандомно сделает транзакции в модулях wrap, rubyscore и brigadegame, а после заведёт средства обратно на биржу. Давайте посмотрим на примере JSON формата, как это будет выглядеть...

<pre class="language-json"><code class="lang-json"><strong>[
</strong><strong>  {  moduleName: 'bitget-withdraw', count: 1, indexGroup: 1 },
</strong><strong>  
</strong>  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'taiko-rubyscore-vote', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'taiko-rubyscore-vote', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'brigadegame-harvest', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  {  moduleName: 'wrap-eth', indexGroup: 2, count: 1 },
  { ...и так далее, нет смысла дублировать тут 100 модулей с wrap-eth }
  
  {  moduleName: 'bitget-deposit', count: 1, indexGroup: 3 }
]
</code></pre>

Так же стоит обратить внимание, что я указал **`count: [0, 1]`**, а это значит, что модуль как может выполниться, так и не выполниться совсем, если выпадет 0. При этом вы так же можете ставить отрицательные значения, что-то вроде этого \
**`count: [-10, 5]`,** тогда шанс того, что модуль НЕ будет на каких-то кошельках выполнен будет выше.

</details>

***

Если вы действительно хотите разобраться в QSO и понять, как работает каждая из настроек, то просто запускайте софт и наблюдайте за тем, какие модули вызываются.

<figure><img src="https://2167770735-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fdxvcw5hybcb3iGX5xC7P%2Fuploads%2FbcO0Mcq2dSH9kby9sZFe%2Fimage.png?alt=media&amp;token=4ca90ae4-5c50-4ed3-af9a-85df1cb09215" alt=""><figcaption></figcaption></figure>

Вот пример кошелька сразу же после запуска. Мы выводим такие подробные логи, чтобы вы убедились в том, а действительно правильно вы настроили роут. Так можете эксперементировать и добиваться нужного вам результата.
