XC-20s и кросс-чейн активы
Введение
Формат 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, выполните следующие действия:
- В выпадающем списке запроса выбранного состояния выберите активы.
- Выберите актив extinsic
- Отключите ползунок опции включения
- Отправьте запрос, нажав на кнопку +
Результат покажет идентификатор актива и некоторую дополнительную информацию для всех зарегистрированных XC-20 на Moonbase Alpha.
Получение метаданных кросс-чейн активов
Чтобы быстро получить дополнительную информацию о конкретном XC-20, такую как название, символ и многократное местоположение актива, вы можете использовать дополнительный параметр метаданных для возврата метаданных:
- В выпадающем списке запроса выбранного состояния выберите активы.
- Выберите дополнительный параметр метаданных
- Включите ползунок опции include
- Введите идентификатор актива, который был возвращен при вызове дополнительного свойства актива. Обратите внимание, что если вы скопируете и вставите идентификатор актива с запятыми, запятые будут автоматически удалены, а число может быть обрезано. Убедитесь, что это точно такое же число, как и ID. В данном примере вы можете использовать идентификатор актива 42259045809535163221576417993425387648.
- Отправьте запрос, нажав на кнопку +
С помощью результатов, полученных из метаданных, можно увидеть, что идентификатор актива соответствует 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, вам потребуется:
- MetaMask, установленный и подключенный к сети Moonbase Alpha TestNet.
- Создать или иметь две учетные записи на Moonbase Alpha.
- Как минимум один из учетных записей должен быть пополнен токенами DEV. Вы можете получить токены для целей тестирования в Mission Control.
Взаимодействие с прекомпилятором с помощью Remix
Вы можете взаимодействовать с прекомпиляцией XC-20 с помощью Remix. Сначала вам нужно будет добавить интерфейс ERC-20 в Remix:
- Получите копию файла ERC20.sol
- Вставьте содержимое файла в файл Remix с именем IERC20.sol
Скомпилируйте контракт
После того как интерфейс ERC-20 загружен в Remix, его необходимо скомпилировать:
- Нажмите на вкладку Компиляция, вторую сверху.
- Скомпилируйте файл 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.