cryptofoundry

Связаться с cryptofoundry

Расскажите, что вы хотите создать или автоматизировать.

Электронная почта
[email protected]
ADAMANT Messenger
Открыть в ADAMANT
Dev Guidelines & Docs

Обработка 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 хранит общую цепочечную информацию для всех токенов в этой сети и определяет ссылку на основную монету с базовыми свойствами.

Источники свойств для токена

Любой токен в любом блокчейне имеет четыре источника свойств, объединяемых по приоритету от высшего к низшему:

  1. /blockchains/ethereum/USDT/info.json — информация о конкретном токене в конкретной блокчейн-сети
  2. /blockchains/ethereum/info.json — общая информация о токенах в этой блокчейн-сети
  3. /general/ethereum/info.json — информация из основной монеты блокчейна
  4. /general/USDT/info.json — общая информация о токене

Например, USDT в Ethereum объединяет все четыре источника, где данные из источника (1) переопределяют (2) и так далее.

Создание монет и токенов в приложениях

Чтобы создать монеты, приложение перебирает все крипто в папке /general и считывает каждый файл /general/{crypto}/info.json. Оно пропускает записи, где status не активен или где type не равен coin. Если установлено createCoin = true, приложение создаёт объект монеты, отображаемый как запись блокчейна без типа токена — примеры: ADM и BTC.

Discussion screenshot 1

Discussion screenshot 2

Чтобы создать токены, приложение перебирает все блокчейны в папке /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.

Discussion screenshot 3

Discussion screenshot 4

Объект данных для крипто

После разбора adamant-wallets приложение хранит объект данных с информацией обо всех монетах и токенах во всех сетях. Поскольку свойства уже объединены, получение данных осуществляется напрямую:

// Inside token-related methods
let property = coinInfo.property

// Outside, referencing by token and chain
let property = coinInfo["USDT"]["ethereum"].property

Это гарантирует, что приложения ADAMANT могут последовательно обрабатывать несколько блокчейнов и токенов.