# 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. При этом вы так же можете ставить отрицательные значения, что-то вроде этого \
\&#xNAN;**`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&#x26;token=4ca90ae4-5c50-4ed3-af9a-85df1cb09215" alt=""><figcaption></figcaption></figure>

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://darvin-space.gitbook.io/darvin-space-docs/general-setup/routes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
