Google Sheets Balance v0.1
December 6th, 2022

Для чего?

Если у вас более 20,30,50,100 адресов(вы мультовод), то уверен сталкивались с ситуацией когда на одном или нескольких “забывали” средства. Данный скрипт поможет мониторить их балансы.

Чем лучше аналогов?

Мы будем использовать App Scripts и потому лимиты внешних запросов в обычных запросах гугл-таблиц(50 в час) нам не будут доставлять неудобств. Мы сможем получать балансы для любого количества кошельков, неограниченное количество раз.

Что понадобится?

Один гугл-аккаунт.

Как установить/начать?

  • Открываем Google sheets(клик на ссылку ниже) и создаем новую таблицу.

    https://docs.google.com/spreadsheets/

  • Заполняем в таблицу адреса как показано на рисунке ниже, вместо адресов из примера, вставляем адреса балансы которых мы хотим отслеживать, первую строку пропускаем.

Пример заполнения таблицы адресов
Пример заполнения таблицы адресов
  • Теперь нам нужно добавить скрипт для подсчета. Для этого переходим в редактор скриптов с помощью меню Расширения → App Scripts.
Переходим сюда
Переходим сюда
  • В новой вкладке у нас откроется редактор скриптов.
Вкладка которую мы должны увидеть
Вкладка которую мы должны увидеть
  • Удаляем все из него и вставляем код из блока ниже*(обновлено 2023-03-12, изменение верстки mainnet)*.

    function getBalances()
    {
      var networks = [
        { name : 'ETH', url : 'https://etherscan.io/address/', sum: 0 },
        { name : 'Arbitrum', url : 'https://arbiscan.io/address/', sum: 0 },
        { name : 'Matic', url : 'https://polygonscan.com/address/', sum: 0 },
        { name : 'Optimism', url : 'https://optimistic.etherscan.io/address/', sum: 0 },
        { name : 'Bsc', url : 'https://bscscan.com/address/', sum: 0 },
        { name : 'Avax', url : 'https://snowtrace.io/address/', sum: 0 },
      ];
    
      var sheet = SpreadsheetApp.getActiveSheet();
      var cells = sheet.getDataRange().getValues();
    
      var walletsCount = 0;
      var balance = 0;
    
      for (var nI = 0; nI < networks.length; nI++) {
        sheet.getRange(1, nI + 2).setValue(networks[nI].name);
      }
    
      for (var i = 1; i < cells.length; i++) {
        if (cells[i][0] !== '') {
          walletsCount++;
          for (var nI = 0; nI < networks.length; nI++) {
            if (networks[nI].name == 'ETH') {
              balance = fetchUSDBalanceMainNet(UrlFetchApp.fetch(networks[nI].url + cells[i][0], {muteHttpExceptions: true}).getContentText());
            } else {
              balance = fetchUSDBalance(UrlFetchApp.fetch(networks[nI].url + cells[i][0], {muteHttpExceptions: true}).getContentText());
            }
            networks[nI].sum += balance;
            sheet.getRange(i+1, nI + 2).setValue(balance);
          }
        }
      }
    
      for (var nI = 0; nI < networks.length; nI++) {
        sheet.getRange(walletsCount+2, nI + 2).setValue(networks[nI].sum);
      }
    }
    
    function fetchUSDBalanceMainNet(html)
    {
      var output = html.match(new RegExp("<\/h4>(.*?)<span", 'si'));
      if (output !== null) {
        return parseFloat(output[1].match(new RegExp("\\$(.*)"), 'si')[1].replace(/,/g, ''));
      } else {
        return 0;
      }
    }
    
    function fetchUSDBalance(html)
    {
      var output = html.match(new RegExp("Value:<\/div>(.*?)<\/div>", 'si'));
      if (output !== null) {
        return parseFloat(output[1].match(new RegExp("\\$(.*)"), 'si')[1].replace(/,/g, ''));
      } else {
        return 0;
      }
    }
    
  • Жмем на иконку “Сохранить” и возвращаемся на вкладку с гугл таблицей.

Жмем на эту кнопку
Жмем на эту кнопку
  • Далее мы создадим кнопку для обновления таблицы, для этого выделяем любую свободную ячейку правее колонки G(скажем I2) и переходим в меню Вставка → Рисунок.
Переходим сюда
Переходим сюда
  • У нас откроется попап в нем в меню выбираем Фигуры → Прямоугольник(хотя это не принципиально, вы можете сделать круглую кнопку).
Выбираем фигуру.
Выбираем фигуру.
  • Рисуем кнопку(у нас изменится курсор после нажатия), кликаем внутри фигуры и вводим название, форматируем его по своему усмотрению.
Рисуем кнопку
Рисуем кнопку
  • Жмем “Сохранить и закрыть”. Теперь у нас появилась кнопка, осталось добавить к ней функционал. Для этого нажимаем на ней правой кнопкой мышки(она выделится). В правом верхнем углу кнопки нажимаем на 3 вертикальных точки и в появившемся меню выбираем “Назначить скрипт”.
Выбираем этот пункт меню
Выбираем этот пункт меню
  • В появившемся попапе вводим getBalances и нажимаем Ок.
Назначаем скрипт на кнопку
Назначаем скрипт на кнопку
  • Теперь проверим что у нас получилось. Жмем на созданную нами кнопку. В верхней части экрана появится сообщение что скрипт выполняется и через некоторое время(зависит от количества адресов), мы увидим результат.
Результат
Результат
  • После нажатия кнопки, у нас могут попросить доступ - подтверждаем, этим мы даем Google таблицам разрешение доступа к нашему скрипту. Об этом мы получим оповещение на почту.

Что дальше?

Если скрипт окажется полезен. Добавлю подсчет балансов по токенам, сейчас идет подсчет баланса только основной монеты сети. Пожелания или идеи - велком сюда:

Subscribe to Karl
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from Karl

Skeleton

Skeleton

Skeleton