Если у вас более 20,30,50,100 адресов(вы мультовод), то уверен сталкивались с ситуацией когда на одном или нескольких “забывали” средства. Данный скрипт поможет мониторить их балансы.
Мы будем использовать App Scripts и потому лимиты внешних запросов в обычных запросах гугл-таблиц(50 в час) нам не будут доставлять неудобств. Мы сможем получать балансы для любого количества кошельков, неограниченное количество раз.
Один гугл-аккаунт.
Открываем Google sheets(клик на ссылку ниже) и создаем новую таблицу.
Заполняем в таблицу адреса как показано на рисунке ниже, вместо адресов из примера, вставляем адреса балансы которых мы хотим отслеживать, первую строку пропускаем.
Удаляем все из него и вставляем код из блока ниже*(обновлено 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;
}
}
Жмем на иконку “Сохранить” и возвращаемся на вкладку с гугл таблицей.
Если скрипт окажется полезен. Добавлю подсчет балансов по токенам, сейчас идет подсчет баланса только основной монеты сети. Пожелания или идеи - велком сюда: