XC-20 и кросчейн активи
Въведение
Форматът Cross-Consensus Message (XCM) определя как могат да се изпращат съобщения между оперативно съвместими блокчейн мрежи. Този формат отваря вратата за прехвърляне на съобщения и активи (Substrate assets) между Moonbeam/Moonriver и релейната мрежа или други парачейни в екосистемите Polkadot/Kusama.
Субстратните активи са естествено оперативно съвместими. Разработчиците обаче трябва да използват Substrate API, за да взаимодействат с тях, което прави опита на разработчиците неидеален, особено за тези от света на Ethereum. Следователно, за да помогне на разработчиците да се възползват от нативната оперативна съвместимост, която Polkadot/Kusama предлага, Moonbeam въведе концепцията на XC-20s.
XC-20s са уникален клас активи в Moonbeam. Той съчетава мощта на активите Substrate (нативна оперативна съвместимост), но позволява на потребителите и разработчиците да взаимодействат с тях чрез познатия интерфейс ERC-20 посредством договор за предварително компилиране (Ethereum API). Освен това разработчиците могат да интегрират XC-20 с обикновени рамки за разработка на Ethereum или dApps.
Активите XC-20 ще се различават по това, че към името им ще бъде добавено xc. Например представянето на KSM на Кусама в Moonriver ще бъде известно като xcKSM. Моля, обърнете внимание, че предварителните компилации на XC-20 не поддържат кросчейн трансфери и това е направено умишлено, за да се запази възможно най-близо към стандартния интерфейс на ERC-20.
XC-20 трябва да бъдат регистрирани и свързани с друг актив в екосистемата, преди да бъдат използвани. Това се прави чрез процес на вписване в бял списък чрез предложение за демокрация. Ако се интересувате от тестване на XCM функции в нашата тестова мрежа, моля, свържете се с нас чрез нашия Discord сървър. За повече информация относно XCM можете да разгледате страницата XCM Overview (Общ преглед на XCM) в нашата документация.
Текущи XC-20 активи
Актуалният списък на достъпните XC-20 активи за всяка мрежа е следният:
Moonriver
xc-KSM / Kusama:
0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080
xc-BNC / Bifrost:
0xFFfFFfFFF075423be54811EcB478e911F22dDe7D
xc-KAR / Karura:
0xFfFFFFfF08220AD2E6e157f26eD8bD22A336A0A5
xc-aUSD / Karura:
0xFfFffFFfa1B026a00FbAA67c86D5d1d5BF8D8228
xc-KINT / Kintsugi:
0xfffFFFFF83F4f317d3cbF6EC6250AeC3697b3fF2
xc-kBTC / Kintsugi:
0xFFFfFfFfF6E528AD57184579beeE00c5d5e646F0
xc-RMRK / Statemine:
0xffffffFF893264794d9d57E1E0E21E0042aF5A0A
Moonbase Alpha
xc-UNIT / Relay Chain Alphanet 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080
xc-BNC / Bifrost Alphanet
0xFffFFFfF1FAE104Dc4C134306bCA8e2E1990aCfd
xc-KAR / Karura Alphanet 0xFfFFFFfF08220AD2E6e157f26eD8bD22A336A0A5
xc-kUSD / Karura Alphanet 0xFfFffFFfa1B026a00FbAA67c86D5d1d5BF8D8228
xc-KINT / Kintsugi Alphanet 0xFFFfffff27C019790DFBEE7cB70F5996671B2882
xc-kBTC / Kintsugi Alphanet 0xFffFfFff5C2Ec77818D0863088929C1106635d26
xc-MRMRK / Statemine Alphanet 0xFFffffFfd2aaD7f60626608Fa4a5d34768F7892d
- Можете да проверите всеки ID на актив тук
Това ръководство ще ви покаже как да извлечете достъпните 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, няма да бъдат видими от базираните върху EVM блокови експлойъри като Moonscan. Само транзакциите, извършени чрез API в Ethereum, са видими чрез такива експлойъри.
Въпреки това с XC-20s може да се взаимодейства чрез интерфейс ERC-20, така че те имат допълнителното предимство да са достъпни както от Substrate API, така и от Ethereum API. Това в крайна сметка осигурява по-голяма гъвкавост за разработчиците при работа с тези видове активи и позволява безпроблемна интеграция със смарт контракти, базирани върху EVM, като DEX, платформи за кредитиране и др.
Извличане на списък на кросчейн активите
За да извлечете списък на XC-20, които в момента са достъпни в тестовата мрежа на Moonbase Alpha, отидете на Polkadot.js Apps и се уверете, че сте свързани с Moonbase Alpha. След това щракнете върху раздела Developer (Разработчик) и изберете Chain State (Състояние на мрежата) от падащото меню. За да потърсите достъпните XC-20s, можете да следвате следните стъпки:
1. От падащото меню за запитване за избрано състояние изберете активи
2. Изберете активите, съдържащи се в екстрите
3. Деактивирайте слайдъра за включване на опцията
4. Изпратете запитване, като щракнете върху бутона +
Резултатът ще покаже идентификатора на актива заедно с допълнителна информация за всички регистрирани XC-20 в Moonbase Alpha.
Извличане на метаданни за кросчейн активите
За да получите бързо повече информация за конкретен XC-20, като например името, символа и мулти локацията на актива, можете да използвате екстрата метаданни, за да върнете метаданни:
1. От падащото меню на запитването за избрано състояние изберете активи
2. Изберете екстрата за метаданни
3. Активирайте плъзгача на опцията за включване
4. Въведете идентификатора на актива, който е бил върнат при извикването на екстрата за активи. Обърнете внимание, че ако копирате и поставите идентификатора на актива със запетаи, запетаите ще бъдат автоматично премахнати и числото може да бъде съкратено. Уверете се, че това е точно същото число като идентификатора. За този пример можете да използвате ID на актива 42259045809535163221576417993425387648
5. Изпратете запитването, като щракнете върху бутона +
С резултатите от метаданните можете да видите, че идентификаторът на актива съответства на VUNIT XC-20.
Изчисляване на адресите за предварително компилиране
Сега, след като сте извлекли списък с достъпните XC-20s, преди да можете да взаимодействате с тях чрез предварителното компилиране, трябва да изведете адреса за предварително компилиране от идентификатора на актива.
Адресът за предварително компилиране на XC-20 се изчислява по следния начин:
address = “0xFFF…” + DecimalToHex(AssetId)
Като се има предвид горното изчисление, първата стъпка е да се вземе u128 представянето на идентификатора на актива и да се преобразува в шестнадесетична стойност. Можете да използвате избраната от вас търсачка, за да потърсите прост инструмент за преобразуване на десетични в шестнадесетични стойности. За ID на актива 42259045809535163221576417993425387648
, шестнайсетичната стойност е 1FCACBD218EDC0EBA20FC2308C778080
.
Тъй като Ethereum адресите са с дължина 40 символа, ще трябва да добавите Fs към шестнайсетичната стойност, докато адресът стане 40 символа.
Шестнайсетичната стойност, която вече беше изчислена, е с дължина 32 символа, така че предварителното добавяне на 8 Fs към шестнайсетичната стойност ще ви даде 40-символния адрес, от който се нуждаете, за да взаимодействате с предварителния компилатор XC-20. За този пример пълният адрес е 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080
.
Предварителните компилации на активите могат да се намират само между 0xFFFFFFFF00000000000000000000000000000000
и 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
.
Сега, след като сте изчислили адреса за предварително компилиране на XC-20, можете да използвате адреса, за да взаимодействате с XC-20, както бихте го направили с всеки друг ERC-20 в Remix.
Интерфейсът на ERC-20
Интерфейсът ERC20.sol на Moonbeam следва стандарта за токени EIP-20, който е стандартният 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: An Attack Vector on Approve/TransferFrom Methods overview.
Интерфейсът включва и следните необходими събития:
- Transfer( address indexed from, address indexed to, uint256 value) — задейства се, когато е осъществен трансфер
- Approval(address indexed owner, address indexed spender, uint256 value) — задейства се, когато е регистрирано потвърждение
Проверка на предварителните условия
За да потвърдите трансфер или да прехвърлите XC-20 чрез предварителното компилиране на XC-20, ще ви е необходимо:
· MetaMask да е инсталиран и свързан към тестовата мрежа Moonbase Alpha TestNet
· Да създадете или да имате два акаунта в Moonbase Alpha
· Поне един от акаунтите ще трябва да бъде попълнен с токени DEV. Можете да получите токени за тестови цели от Mission Control
Взаимодействие с предварителния компилатор чрез Remix
Можете да взаимодействате с предварителния компилатор на XC-20, като използвате Remix. Първо, ще трябва да добавите интерфейса ERC-20 в Remix:
1. Получете копие на ERC20.sol
2. Добавете информацията от файла във файл на Remix с име IERC20.sol
Подготовка на контракта
След като сте създали интерфейса ERC-20 в Remix, ще трябва да го компилирате:
1. Щракнете върху раздела Compile (Компилиране), вторият отгоре
2. Компилирайте файла IER20.sol
Ако интерфейсът е компилиран успешно, ще видите зелена отметка до раздела Компилиране.
Достъп към контракта
Вместо да разгръщате предварителния компилатор ERC-20, ще получите достъп към интерфейса, даден от адреса на предварителния компилатор XC-20:
1. Щракнете върху раздела Deploy and Run (Разгръщане и изпълнение) непосредствено под раздела Compile (Компилиране) в Remix. Моля, обърнете внимание, че предварително компилираният договор вече е разгърнат
2. Уверете се, че в падащото меню Environment (Среда) е избрана опцията Injected Web3 (Инжектиран Web3). След като изберете Injected Web3, може да бъдете уведомени от MetaMask да свържете профила си с Remix
3. Уверете се, че правилният акаунт е показан в Account (Акаунт)
4. Уверете се, че в падащото меню Contract (Контракт) е избран IERC20 — IERC20.sol. Тъй като това е предварително компилиран контракт, не е необходимо да въвеждате какъвто и да е код. Вместо това ще предоставим адреса на предварителния компилатор в полето At Address.
5. Предоставете адреса на предварителния компилатор XC-20, изчислен в раздела Calculate Precompile Address (Изчисляване на адреса на предварителния компилатор), 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080
, и щракнете върху At Address.
Забележка
По желание можете да въведете контролна сума за адреса на предварителното компилиране на XC-20, като влезете в избраната от вас търсачка и потърсите инструмент за въвеждане на контролна сума за адреса. След като адресът е с контролна сума, можете да го използвате вместо това в полето At Address.
Предварителното компилиране на IERC20 за XC-20 ще се появи в списъка на внедрените контракти. Сега можете да се чувствате свободни да извикате някоя от стандартните функции на ERC-20, за да получите информация за XC-20 или да прехвърлите XC-20.
За да научите как да взаимодействате с всяка от функциите, можете да разгледате ръководството за предварително компилиране на ERC-20 и да го модифицирате за взаимодействие с предварителното компилиране на XC-20.
Anomalia#6628
Оригинален линк: https://docs.moonbeam.network/builders/xcm/xc20/overview/