XC-20s и кросс-чейн активы

Andrey P.
Moonbeam in Russian
7 min readApr 17, 2022

Введение

Формат Cross-Consensus Message (XCM) определяет способ передачи сообщений между взаимодействующими блокчейнами. Этот формат открывает возможность передачи сообщений и активов (Substrate assets) между Moonbeam/Moonriver и релейной цепочкой или другими парачейнами в экосистемах Polkadot/Kusama.

Активы Substrate изначально являются совместимыми. Однако для взаимодействия с ними разработчикам необходимо подключаться к Substrate API, что делает работу разработчиков неоптимальной, особенно для тех, кто работает в мире Ethereum. Поэтому, чтобы помочь разработчикам воспользоваться нативной совместимостью, которую предлагает Polkadot/Kusama, Moonbeam ввела концепцию XC-20s.

XC-20s — это уникальный класс активов на Moonbeam. Он сочетает в себе возможности активов Substrate (нативная совместимость), но позволяет пользователям и разработчикам взаимодействовать с ними через привычный интерфейс ERC-20 посредством прекомпилированного контракта (Ethereum API). Более того, разработчики могут интегрировать XC-20 в обычные фреймворки разработки Ethereum или dApps.

Активы XC-20 будут выделяться тем, что к их названию будет добавлено xc. Например, отображение KSM Kusama на Moonriver будет иметь вид xcKSM. Обратите внимание, что прекомпиляторы XC-20 не поддерживают кросс-чейн транзакции, и это сделано намеренно, чтобы максимально приблизиться к стандартному интерфейсу ERC-20.

Перед использованием XC-20 необходимо зарегистрировать и связать с другим активом в экосистеме. Это делается через процесс белых списков посредством демократического предложения. Если вы заинтересованы в тестировании функций XCM в нашей сети TestNet, пожалуйста, свяжитесь с нами через наш сервер Discord. Для получения дополнительной информации о XCM вы можете ознакомиться со страницей XCM Overview нашей документации.

Текущие активы XC-20

Текущий список доступных активов XC-20 для каждой сети выглядит следующим образом:

*Вы можете проверить идентификатор каждого актива здесь

Это руководство покажет вам, как получить доступные XC-20 и вычислить их адреса предварительной компиляции для Moonbase Alpha TestNet с помощью Polkadot.js Apps. Кроме того, вы узнаете, как взаимодействовать с прекомпиляцией XC-20 с помощью Remix.

XC-20 против ERC-20

Несмотря на то, что XC-20 и ERC-20 очень похожи, следует знать о некоторых явных различиях.

Прежде всего, XC-20 являются активами, основанными на субстрате, и как таковые, они также подвержены прямому влиянию особенностей субстрата, таких как управление. Кроме того, транзакции XC-20s, осуществляемые через Substrate API, не будут видны в блок эксплорерах таких как Moonscan.Такие программы видят только транзакции, проведенные через Ethereum API.

Тем не менее, с XC-20 можно взаимодействовать через интерфейс ERC-20, поэтому они имеют дополнительное преимущество — доступ к ним возможен как через Substrate, так и через Ethereum API. В конечном итоге это обеспечивает большую гибкость для разработчиков при работе с этими типами активов и позволяет беспрепятственно интегрировать их в смарт-контракты на базе EVM, такие как DEXs, платформы кредитования и другие.

Получение списка кросс-чейн активов

Чтобы получить список XC-20, доступных в настоящее время в тестовой сети Moonbase Alpha, зайдите на сайт Polkadot.js Apps и убедитесь, что вы подключены к Moonbase Alpha. Затем перейдите на вкладку “Разработчик” и выберите “Состояние цепи” из выпадающего списка. Чтобы запросить доступные XC-20, выполните следующие действия:

  1. В выпадающем списке запроса выбранного состояния выберите активы.
  2. Выберите актив extinsic
  3. Отключите ползунок опции включения
  4. Отправьте запрос, нажав на кнопку +

Результат покажет идентификатор актива и некоторую дополнительную информацию для всех зарегистрированных XC-20 на Moonbase Alpha.

Получение метаданных кросс-чейн активов

Чтобы быстро получить дополнительную информацию о конкретном XC-20, такую как название, символ и многократное местоположение актива, вы можете использовать дополнительный параметр метаданных для возврата метаданных:

  1. В выпадающем списке запроса выбранного состояния выберите активы.
  2. Выберите дополнительный параметр метаданных
  3. Включите ползунок опции include
  4. Введите идентификатор актива, который был возвращен при вызове дополнительного свойства актива. Обратите внимание, что если вы скопируете и вставите идентификатор актива с запятыми, запятые будут автоматически удалены, а число может быть обрезано. Убедитесь, что это точно такое же число, как и ID. В данном примере вы можете использовать идентификатор актива 42259045809535163221576417993425387648.
  5. Отправьте запрос, нажав на кнопку +

С помощью результатов, полученных из метаданных, можно увидеть, что идентификатор актива соответствует VUNIT XC-20.

Вычисление адресов предварительной компиляции

Теперь, когда вы получили список доступных XC-20, прежде чем вы сможете взаимодействовать с ними через предварительную компиляцию, вам необходимо вычислить адрес предварительной компиляции из идентификатора актива.

Адрес прекомпиляции XC-20 вычисляется следующим образом:

адрес = “0xFFF…” + DecimalToHex(AssetId).

Учитывая вышеприведенный расчет, первым шагом является получение u128-представления идентификатора актива и преобразование его в шестнадцатеричное значение. Вы можете воспользоваться поисковой системой, чтобы найти простой инструмент для преобразования десятичных дробей в шестнадцатеричные значения. Для идентификатора актива 42259045809535163221576417993425387648 шестнадцатеричное значение равно 1FCACBD218EDC0EBA20FC2308C778080.

Поскольку адреса Ethereum состоят из 40 символов, вам нужно будет добавлять Fs к шестнадцатеричному значению до тех пор, пока адрес не будет состоять из 40 символов.

Шестнадцатеричное значение, которое уже было вычислено, состоит из 32 символов, поэтому добавление 8 Fs к шестнадцатеричному значению даст вам 40-символьный адрес, необходимый для взаимодействия с прекомпиляцией XC-20. Для данного примера полный адрес будет 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080.

Прекомпиляция актива может находиться только в диапазоне от 0xFFFFFFFF000000000000000000000000000000 до 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.

Теперь, когда вы вычислили адрес прекомпиляции XC-20, вы можете использовать этот адрес для взаимодействия с XC-20, как и с любым другим ERC-20 в Remix.

Интерфейс ERC-20

Интерфейс ERC20.sol в Moonbeam соответствует стандарту EIP-20 Token, который является стандартным интерфейсом API для токенов в смарт-контрактах. Стандарт определяет необходимые функции и события, которые должен реализовывать контракт с токенами, чтобы быть совместимым с различными приложениями.

Интерфейс включает следующие функции:

  • name() — функция только для чтения, которая возвращает имя токена
  • symbol() — функция только для чтения, которая возвращает символ токена
  • decimals() — функция только для чтения, возвращающая десятичные числа токена
  • totalSupply() — функция только для чтения, которая возвращает общее количество существующих токенов
  • balanceOf(address who) — функция только для чтения, которая возвращает баланс указанного адреса
  • allowance(address owner, address spender) — функция только для чтения, которая проверяет и возвращает количество токенов, разрешенное владельцу для траты.
  • transfer(address to, uint256 value) — переводит заданное количество токенов на указанный адрес и возвращает true, если перевод был успешным
  • approve(address spender, uint256 value) — утверждает указанный адрес для расходования заданного количества токенов от имени msg.sender. Возвращает true в случае успеха
  • transferFrom(address from, address to, uint256 value) — переводит токены с одного указанного адреса на другой указанный адрес и возвращает true в случае успеха.

Примечание

Стандарт ERC-20 не определяет последствия многократных вызовов для подтверждения. Многократное изменение размера суммы с помощью этой функции создает возможный вектор атаки. Чтобы избежать неправильного или непреднамеренного упорядочивания транзакций, вы можете сначала уменьшить надбавку для расходников до 0, а затем установить желаемую сумму надбавки. Более подробную информацию о векторе атаки можно найти в API ERC-20: Обзор вектора атаки на методы Approve/TransferFrom

Интерфейс также включает следующие необходимые события:

  • Передача (адрес с индексом from, адрес с индексом to, значение uint256) — выдается при выполнении перевода
  • Утверждение(адрес с индексом владелец, адрес с индексом отправитель, значение uint256) — выдается, когда было зарегистрировано утверждение.

Проверка предварительных условий

Чтобы утвердить расход или передачу XC-20 через предварительную компиляцию XC-20, вам потребуется:

Взаимодействие с прекомпилятором с помощью Remix

Вы можете взаимодействовать с прекомпиляцией XC-20 с помощью Remix. Сначала вам нужно будет добавить интерфейс ERC-20 в Remix:

  1. Получите копию файла ERC20.sol
  2. Вставьте содержимое файла в файл Remix с именем IERC20.sol

Скомпилируйте контракт

После того как интерфейс ERC-20 загружен в Remix, его необходимо скомпилировать:

  1. Нажмите на вкладку Компиляция, вторую сверху.
  2. Скомпилируйте файл IER20.sol

Если интерфейс был скомпилирован успешно, вы увидите зеленую галочку рядом с вкладкой Компиляция.

Доступ к контракту

Вместо развертывания предварительной компиляции ERC-20 вы получите доступ к интерфейсу, указав адрес предварительной компиляции XC-20:

Нажмите на вкладку Развернуть и запустить, расположенную непосредственно под вкладкой Компиляция в Remix. Обратите внимание, что прекомпилированный контракт уже развернут.

Убедитесь, что Injected Web3 выбран в выпадающем списке Environment. После выбора Injected Web3, MetaMask может предложить вам подключить вашу учетную запись к Remix.

Убедитесь, что в разделе Account отображается правильная учетная запись

Убедитесь, что в выпадающем списке Контракт выбран IERC20 — IERC20.sol. Поскольку это предварительно скомпилированный контракт, нет необходимости развертывать какой-либо код. Вместо этого мы укажем адрес прекомпиляции в поле At Address Field

Введите адрес прекомпиляции XC-20, рассчитанный в разделе Calculate Precompile Address, 0xFFFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080, и нажмите At Address.

Примечание

В качестве опции можно выполнить контрольное суммирование адреса предварительной компиляции XC-20, обратившись к выбранной вами поисковой системе и найдя инструмент для контрольного суммирования адреса. После того как адрес будет проверен, его можно использовать в поле At Address.

Предварительная компиляция IERC20 для XC-20 появится в списке развернутых контрактов. Теперь вы можете свободно обращаться к любой из стандартных функций ERC-20 для получения информации о XC-20 или передачи XC-20.

Чтобы узнать, как взаимодействовать с каждой из функций, вы можете ознакомиться с руководством по прекомпиляции ERC-20 и изменить его для взаимодействия с прекомпиляцией XC-20.

--

--