routes

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

groupSettings

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

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

const groupSettings: GroupSettings = {
  // Рандомно выполняем 1 из модулей под indexGroup: 5
  5: [1, 1],
};
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.

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

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.

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

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

limitWalletsToUse

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

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

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

splitModuleCount

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

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

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

const splitModuleCount = true;

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

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

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

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

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

[
  { 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 таких модулей. Если вы хотите в какой-то рандомный момент запихнуть какую-то другую транзакцию для рандомизации кошелька. Вам достаточно сделать следующее...


const modules: UserModuleConfig[] = [
  {
    moduleName: 'bitget-withdraw',
    indexGroup: 1,
  },
  {
    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;

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

[
  {  moduleName: 'bitget-withdraw', count: 1, indexGroup: 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: '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 }
]

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


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

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

Last updated