Обработка adamant-wallets: информация о монетах и токенах для клиентских приложений ADAMANT
Репозиторий adamant-wallets объединяет всю информацию о монетах и токенах для клиентских приложений ADAMANT. Клиентское приложение отвечает за корректную обработку этих данных и предоставление разработчикам удобной, унифицированной структуры. Предложенная структура не идеальна — информация о токенах объединяется из разных папок — но альтернативы имеют свои компромиссы, поэтому здесь не предлагаются изменения структуры.
Терминология
Крипто — общий термин, охватывающий как монеты, так и токены. Каждое крипто имеет название (например, Bitcoin) и тикер или символ (например, BTC). Монета — это крипто, существующее в собственной блокчейн-сети, например ADM, BTC, DOGE, DASH или KLY. Токен — это крипто, существующее поверх какой-либо блокчейн-сети, например STORJ или USDT в Ethereum или Binance Smart Chain.
Каждый блокчейн имеет одну основную монету, которая разделяет общие свойства для всех токенов в этой сети и используется для оплаты комиссий за переводы. Например, для перевода USDT в Ethereum требуется оплата комиссии в ETH. Каждый блокчейн также определяет тип токена — Ethereum использует ERC20, Binance Smart Chain — BEP20. Один и тот же токен может существовать в нескольких блокчейнах (многоцепочечный токен): USDT существует как ERC20 в Ethereum и как BEP20 в Binance Smart Chain. Это один и тот же токен с одинаковой стоимостью и общей информацией, но хранящийся и передающийся в разных сетях.
Базовая структура
Каждое крипто находится в папке /general. Токены дополнительно находятся в папке /blockchains. Например, /general/USDT/info.json содержит общую информацию о USDT, а /blockchains/ethereum/USDT/info.json — информацию о USDT в Ethereum. Файл /blockchains/{chain}/info.json хранит общую цепочечную информацию для всех токенов в этой сети и определяет ссылку на основную монету с базовыми свойствами.
Источники свойств для токена
Любой токен в любом блокчейне имеет четыре источника свойств, объединяемых по приоритету от высшего к низшему:
/blockchains/ethereum/USDT/info.json— информация о конкретном токене в конкретной блокчейн-сети/blockchains/ethereum/info.json— общая информация о токенах в этой блокчейн-сети/general/ethereum/info.json— информация из основной монеты блокчейна/general/USDT/info.json— общая информация о токене
Например, USDT в Ethereum объединяет все четыре источника, где данные из источника (1) переопределяют (2) и так далее.
Создание монет и токенов в приложениях
Чтобы создать монеты, приложение перебирает все крипто в папке /general и считывает каждый файл /general/{crypto}/info.json. Оно пропускает записи, где status не активен или где type не равен coin. Если установлено createCoin = true, приложение создаёт объект монеты, отображаемый как запись блокчейна без типа токена — примеры: ADM и BTC.


Чтобы создать токены, приложение перебирает все блокчейны в папке /blockchains (например, ethereum, binanceSmartChain) и считывает цепочечный файл info.json. Приложение пропускает блокчейн, если его status не активен, и фиксирует mainCoin. Затем оно считывает /general/{mainCoin}/info.json для получения общей информации об основной монете. Для каждого токена в папке блокчейна приложение считывает /general/{token}/info.json — пропуская токен, если файл отсутствует или если type не равен token — а затем считывает /blockchains/{blockchain}/{token}/info.json, пропуская, если status не активен. Наконец, приложение объединяет все четыре источника по приоритету и создаёт объект токена, отображаемый с указанием типа токена (например, ERC20, BEP20). Примеры: USDT, USDC и DAI.


Объект данных для крипто
После разбора adamant-wallets приложение хранит объект данных с информацией обо всех монетах и токенах во всех сетях. Поскольку свойства уже объединены, получение данных осуществляется напрямую:
// Inside token-related methods
let property = coinInfo.property
// Outside, referencing by token and chain
let property = coinInfo["USDT"]["ethereum"].property
Это гарантирует, что приложения ADAMANT могут последовательно обрабатывать несколько блокчейнов и токенов.