Основанный в 2017 г. предпринимателем из Китая Джастином Саном, сегодня TRON является одним из наиболее популярных блокчейн-проектов. Популярность этой платформы в основном обусловлена ее высокой пропускной способностью и низкой стоимостью транзакций, что позволяет разрабатывать на ее основе эффективные децентрализованные приложения (в основном игровые). В последнее время проект TRON привлек много внимания со стороны крупных международных корпораций, что привело к заключению сделок и партнерских соглашений с BitTorrent, Samsung, Huawei, Opera и т.д. В феврале 2021 г. рыночная капитализация Tronix (TRX) - нативной криптовалюты платформы TRON - превысила $4.2 млрд.

Благодаря большому количеству созданных на ее основе приложений платформа TRON является интересным и ценным источником данных для решения разнообразных аналитических задач. Конечно, для реализации этих задач требуется программный способ сбора соответствующих данных. Создатели и сообщество пользователей TRON разработали для этого несколько API (см. ниже) и клиентских библиотек. Однако до недавнего времени среди подобных библиотек не было ни одного пакета для R, несмотря на популярность этого языка среди аналитиков. Ниже приведено краткое описание tronr - пакета, который я разработал для устранения указанного пробела. Этот пакет появился в результате моей работы в последнее время над несколькими консалтинговыми проектами, включавшими сбор и анализ данных из блокчейн-сети TRON.

Инсталляция

В настоящее время tronr можно установить только из GitHub, что можно сделать следующим образом:
# install.packages("devtools")
devtools::install_github("next-game-solutions/tronr")
В будущем я планирую также опубликовать этот пакет в репозитории CRAN.

Примеры

Пакет позволяет собирать данные по балансу отдельных аккаунтов, транзакциям, переводам токенов и результатам выполнения умных контрактов. Кроме того пользователи имеют возможность выполнять запросы к текущим и историческим показателям статуса TRX на глобальном рынке криптовалют. Детальные примеры использования соответствующих функций можно найти в онлайн-документации tronr. Ниже я приведу лишь несколько примеров, демонстрирующих возможности пакета.
library(dplyr)
library(ggplot2)
library(tronr)
#> R toolbox to explore the TRON blockchain
#> Developed by Next Game Solutions (http://nextgamesolutions.com)

# Получение актуальной стоимости TRX, выраженной в USD, EUR и BTC (Bitcoin):
get_current_trx_price(vs_currencies = c("usd", "eur", "btc"))
#> # A tibble: 3 x 3
#>    trx_price vs_currency last_updated_at    
#>        <dbl> <chr>       <dttm>             
#> 1 0.0599     usd         2021-02-21 15:57:13
#> 2 0.0494     eur         2021-02-21 15:57:13
#> 3 0.00000104 btc         2021-02-21 15:57:13


# Получение исторических данных по рыночным показателям TRX 
# с последующей визуализацией динамики стоимости этой криптовалюты:
(min_timestamp <- as.POSIXct("2020-01-01 00:00:00") %>% 
   to_unix_timestamp()
)
#> [1] "1577836800000"
(max_timestamp = as.POSIXct("2020-05-01 00:00:00") %>%
   to_unix_timestamp()
)
#> [1] "1588287600000"

price_history <- get_trx_market_data_for_time_range(
  vs_currency = "usd",
  min_timestamp = min_timestamp,
  max_timestamp = max_timestamp
)

glimpse(price_history)
#> Rows: 121
#> Columns: 5
#> $ timestamp         <dttm> 2020-01-01, 2020-01-02, 2020-01-03,...
#> $ vs_currency       <chr> "usd", "usd", "usd", "usd", "usd",...
#> $ price             <dbl> 0.01329452, 0.01319943, 0.01284472,...
#> $ total_trading_vol <dbl> 1134528759, 1032624901, 1056549454,...
#> $ market_cap        <dbl> 877119319, 872350811, 848482045,...

price_history %>% 
  ggplot(aes(timestamp, price)) +
  geom_line() +
  theme_minimal()




# Характеристики последнего сгенерированного в сети блока:
get_block_info(latest = TRUE) %>% glimpse()

#> Rows: 1
#> Columns: 11
#> $ request_time    <dttm> 2021-02-21 15:57:33
#> $ block_number    <chr> "27844966"
#> $ timestamp       <dttm> 2021-02-21 15:56:24
#> $ hash            <chr> "0000000001a8e1666864254248f7f8d4b2e41...
#> $ parent_hash     <chr> "0000000001a8e1657f864801f99717577b481...
#> $ tx_trie_root    <chr> "uLCTnmEGhvpmUeqcZM3VvMxZjiPUd8sr8FPwK...
#> $ confirmed       <lgl> TRUE
#> $ size            <int> 34298
#> $ witness_address <chr> "TWkpg1ZQ4fTv7sj41zBUTMo1kuJEUWTere"
#> $ tx_count        <int> 135
#> $ tx              <list> [<tbl_df[135 x 4]>]


# Текущий баланс аккаунта:
get_account_balance(
    address = "TQjaZ9FD473QBTdUzMLmSyoGB6Yz1CGpux"
) %>% glimpse()

#> Rows: 1
#> Columns: 10
#> $ request_time <dttm> 2021-02-21 15:57:36
#> $ address      <chr> "TQjaZ9FD473QBTdUzMLmSyoGB6Yz1CGpux"
#> $ name         <chr> "SunTRXV3Pool"
#> $ total_tx     <int> 69012
#> $ bandwidth    <list> [<tbl_df[1 x 20]>]
#> $ trx_balance  <dbl> 5628275
#> $ n_trc20      <int> 16
#> $ trc20        <list> [<tbl_df[16 x 7]>]
#> $ n_trc10      <int> 12
#> $ trc10        <list> [<tbl_df[12 x 8]>]


# Перевод TRC-10 токенов, имевших место в течение определенного
# периода времени:
get_trc10_transfers(
  related_address = "TMaBqmMRekKZMQEq3u3QrJpGDwPYZZo87V",
  min_timestamp = "1577837400000",
  max_timestamp = "1577837430000"
) %>% glimpse()

#> Rows: 2
#> Columns: 13
#> $ tx_id                    <chr> "675a3606a414f0ea09979688889df0237911d368d...
#> $ block_number             <chr> "15860788", "15860784"
#> $ timestamp                <dttm> 2020-01-01 00:10:27, 2020-01...
#> $ from_address             <chr> "TMaBqmMRekKZMQEq3u3QrJpGDwPY...
#> $ to_address               <chr> "TT5W8MPbYJih9R586kTszb4Loybz...
#> $ is_contract_from_address <lgl> FALSE, FALSE
#> $ is_contract_to_address   <lgl> FALSE, FALSE
#> $ contract_result          <chr> "SUCCESS", "SUCCESS"
#> $ confirmed                <lgl> TRUE, TRUE
#> $ amount                   <dbl> 10, 10
#> $ token_id                 <chr> "1002830", "1002830"
#> $ token_name               <chr> "AUP", "AUP"
#> $ token_abbr               <chr> "AUP", "AUP"

О чем необходимо помнить при использовании tronr

При разработке этого пакета мне пришлось принять несколько субъективных решений в отношении его дизайна:
  • Большинство функций, возвращающих данные по транзакциям, "под капотом" выполняют запросы к публичному API, который обеспечивает функционал вебсайта Tronscan. Это имеет следующие важные последствия:
    • Tronscan API значительно медленнее, чем TronGrid API, который является официально рекомендованным механизмом извлечения больших объемов данных из блокчейн-сети TRON. Однако выбор в пользу Tronscan API был сделан в связи с более богатыми и стандартизованными данными, которые он возвращает. Это решение может быть пересмотрено в будущем по мере дальнейшего развития TronGrid API.
    • Попытки выполнения частых и/или "тяжелых" (в смысле объема данных) запросов с одного и того же IP адреса потенциально могут быть расценены серверами Tronscan как DoS-атаки и привести к блокировке этого IP адреса. Поэтому пользователям tronr рекомендуется не "злоупотреблять" подобными запросами и предусматривать в своем коде соответствующие меры "предосторожности" (например, в виде небольших пауз между отдельными запросами - см. базовую функцию Sys.sleep()).
    • С учетом последних двух пунктов, tronr не предназначен для разработки масштабных аналитических приложений, предусматривающих регулярный сбор больших объемов данных.
  • Многие функции tronr возвращают данные в виде вложенных таблиц (nested tibbles; см. приведенные выше примеры). Можно утверждать, что подобный формат является естественным для таких данных, учитывая их иерархическую структуру. Вложенные таблицы были выбраны также в связи с тем, что они представляют собой "опрятный" (tidy) формат данных, полностью совместимый с группой пакетов tidyverse. Однако я понимаю, что не все пользователи R предпочитают работать с инструментами tidyverse, что делает tronr несколько менее доступным для таких пользователей.

Заключение

TRON - интересный проект, набирающий популярность и значимость. Сгенерированные в этой блокчейн-сети данные могут оказаться полезными для разработки разнообразных аналитических приложений (например, мониторинг трендов, учет финансовых потоков, предсказание стоимости токенов, обнаружение популярных игровых приложение, выявление необычных транзакций и т.п.). Описанный в этой статье пакет tronr позволяет собирать данные из сети TRON в формате, готовом к дальнейшему анализу практически любыми инструментами из "экосистемы" R. Я был бы благодарен получить ваши отзывы и предложения о функционале этого пакета - подробнее см. GitHub-репозиторий tronr.

Послать комментарий

Новые Старые