Cross-consensus message (крос-консенсус съобщение)
Въведение
Архитектурата на Polkadot позволява на парачейните да си взаимодействат помежду си, което дава възможност за прехвърляне между блокчейн на всякакъв вид данни или активи.
За тази цел форматът Cross-Consensus Message (XCM) определя език за това как трябва да се извършва прехвърлянето на съобщения между два взаимодействащи блокчейна. XCM не е специфичен за Polkadot, тъй като има за цел да бъде общ и разширяем език между различни системи за консенсус.
Тази страница представлява кратко въведение и преглед на XCM и други свързани с него елементи. Повече информация можете да намерите в Wiki на Polkadot.
Общи дефиниции на XCM
- XCM — съкращение от cross-consensus message (крос-консенсус съобщение), това е общ начин за комуникация между системите за консенсус.
- VMP — означава вертикално предаване на съобщения, то позволява на парачейните да обменят съобщения с релейната мрежа. UMP (възходящо предаване на съобщения) позволява на парачейните да изпращат съобщения към своята релейна мрежа, докато DMP (низходящо предаване на съобщения) позволява на релейната мрежа да предава съобщения надолу към един от своите парачейни
- XCMP — означава предаване на крос-консенсус съобщение, позволява на парачейните да обменят съобщения с други парачейни от същата релейна мрежа.
- HRMP — означава хоризонтално предаване на съобщения с релейна маршрутизация, междинен протокол, докато се задейства пълна реализация на XCMP. Същият интерфейс като XCMP, но съобщенията се съхраняват в релейната мрежа
- Multilocation — начин за определяне на точка в цялата екосистема на релейната мрежа / парачейн от определен произход, относителен или абсолютен. Например, може да се използва за посочване на конкретен парачейн, актив, сметка или дори палет в парачейн. В най-общи линии мултилокацията се дефинира с
parents
иinterior
.parents
се отнася към това колко “стъпки” в родителския блокчейн трябва да направите от определен първоизточник.interior
се отнася към това колко полета са ви необходими, за да определите целевата точка. Например, за да се насочите към парачейн с ID1000
от друг парачейн, мултилокацията ще бъде{ "parents": 1, "interior": { "X1": [{ "Parachain": 1000 }]}}
Транспортни протоколи на XCM
Polkadot реализира два протокола за крос-консенсус или транспортни протоколи за опериране със съобщения XCM между съставящите го парачейни, Moonbeam е един от тях:
- Vertical Message Passing (VMP) (Вертикално предаване на съобщения) — разделя се на два вида транспортни протоколи за предаване на съобщения:
- Възходящо предаване на съобщения (UMP) — позволява на парачейните да изпращат съобщения към своята релейна мрежа, например от Moonbeam към Polkadot
- Низходящо предаване на съобщения (DMP) — позволява на релейната мрежа да предава съобщения надолу към един от своите парачейни, например от Polkadot към Moonbeam
- Прехвърляне на кросчейн съобщения (XCMP) — позволява на две мрежи да обменят съобщения, при условие че са свързани към една и съща релейна мрежа. Кросчейн транзакциите се обработват с помощта на прост механизъм за подреждане на редове, базиран върху дърво на Меркъл, за да се осигури достоверност. Колаторите обменят съобщения между парачейни, докато валидаторите на релейната мрежа ще проверяват дали предаването на съобщението се е състояло.
Забележка
Понастоящем, докато XCMP е в процес на разработка, се използва междинен протокол, наречен “ Horizontal Relay-routed Message Passing” (HRMP), при който съобщенията се съхраняват и четат от релейната верига. Този протокол ще бъде премахнат в бъдеще заради пълното внедряване на XCMP.
Освен това двете най-често срещани начина на използване на съобщенията XCM, поне в ранните етапи на реализация, са следните:
- Телепортиране на активи — представлява прехвърляне на актив от една блокчейн мрежа към друга чрез унищожаване на прехвърлената сума в изходната мрежа и създаване на клонинг (същата сума, която е била унищожена) в целевата мрежа. В такива случаи всяка мрежа държи собствения актив като резерв, подобно на механизма за изгаряне на монети. Този модел изисква определена степен на доверие, тъй като всяка от двете мрежи може злонамерено да получи повече активи.
- Дистанционни трансфери — представляват преместване на актив от един блокчейн в друг чрез междинна сметка в изходната мрежа, която принадлежи на целевата мрежа без доверие. Тази междинна сметка е известна като “суверенна” сметка. В такива случаи активът на изходната мрежа не се унищожава, а се съхранява в суверенната сметка. При стартиране на XCM в целевата мрежа се добива пакетно (наричано още “ виртуален” или “крос-чейн” актив) представяне на целевия адрес. Пакетираното представяне е взаимозаменяемо в съотношение 1:1 с изходния актив. Това е подобно на механизма за свързване “lock-mint”/”burn-unlock”.
По-подробна статия за XCM можете да намерите в Polkadot Wiki.
Първоначално Moonbeam ще поддържа само дистанционни трансфери. Всички кросчейн активи в Moonbeam ще са известни като xc + TokenName. Например представянето на Kusama KSM в Moonriver ще бъде известно като xcKSM. Прочетете повече за стандарта XC-20 тук.
Разработчиците трябва да имат предвид, че изпращането на неправилни съобщения XCM може да доведе до загуба на средства. Затова е много важно да тествате функциите на XCM в TestNet, преди да пристъпите към използването им в производствена среда.
Регистрация на канали
Преди двете мрежи да могат да комуникират, трябва да се отвори канал за съобщения. Каналите са еднопосочни, т.е. канал от мрежа А към мрежа Б ще пренася съобщения само от А към Б. Следователно предаването на активите е възможно само от верига А към В. Затова трябва да се отворят два канала, за да се изпращат съобщения (или да се прехвърлят активи) напред и назад.
Каналът за XCM между релейната мрежа и парачейна се отваря автоматично при установяване на връзката. Въпреки това, когато парачейн А иска да отвори канал към парачейн В, парачейн А трябва да изпрати заявка към своята мрежа, за да отвори канала. Това допълнително съобщение също е XCM! Получателят на това XCM е веригата на ретранслатора, а външното съобщение съдържа информация като:
- Дестинацията, в която ще бъде изпълнено съобщението (в този случай релейната верига)
- Сметката, която ще плаща таксите (плаща се с токена на релейната верига)
- Такси, които транзакцията може да изразходва при извършване
- Кодирани данни за повикване, получени чрез имитиране на външни характеристики на релейната верига. Това включва следната кодирана информация:
- Методът, който ще бъде извикан в релейната верига (отворен канал)
- Идентификатор на парачейна на целевата верига (парачейн B в този пример)
- Максимален брой съобщения в дестинационна опашка
- Максимален размер на съобщенията, които ще се изпращат
Таксата за транзакция се депозира в кросчейн (xc) представяне на актива на релейната верига (xcRelayChainAsset). Например за Kusama/Moonriver таксите за транзакциите ще се плащат в xcKSM. Следователно сметката, която плаща комисионата, трябва да има достатъчно xcRelayChainAsset. Този проблем би могъл да бъде решен в Moonbeam/Moonriver, ако таксите от входящите XCM съобщения, които се плащат с актива на изходната мрежа, се изпращат в хазната и сметката на хазната се използва за плащане на регистрацията на външен канал.
Дори ако парачейн А е изразил намерението си да открие XCM канал с парачейн Б, последният не е сигнализирал на релейната мрежа за намерението си да получава съобщения от парачейн А. Следователно, за да има установен канал, парачейн В трябва да изпрати и външно съобщение (което също е XCM) към релейната мрежа. Външното съобщение за приемане на канала е подобно на предишното. Въпреки това кодираните данни за повикването включват само новия метод (accept channel) и идентификатора на изпращащия парачейн (парачейн А в този пример). След като и двата парачейна се съгласят, каналът се отваря при следващата промяна на епохата.
Всички горепосочени действия могат да бъдат извършени чрез SUDO (ако има такъв) или чрез демокрация (технически комитет или референдум).
След като каналът бъде установен, активите трябва да бъдат регистрирани, преди да бъдат прехвърлени чрез XCM, или чрез вграждането им в средата за изпълнение като константа, или чрез палет. Процесът на регистрация на активи за Moonbeam е обяснен в следващия раздел.
Регистрация на активи в XCM
След като бъде установен каналът между парачейните (или релейна верига-парачейн), може да започне регистрацията на активите.
Най-общо, регистрацията на активи може да се извърши на ниво изпълнение, което означава, че е необходима актуализация по време на изпълнение, след което активът се регистрира и поддържа от XCM. Въпреки това Moonbeam е включила палета Substrate за регистрация на активи без необходимост от актуализиране на средата за изпълнение, което значително опростява процеса.
При регистрирането на XCM актив външната информация трябва да включва (наред с други неща):
- Парачейн идентификатор на местоположението, където се намира изходният актив
- Вид на актива. Към момента на писане на статията можете да регистрирате или собствен токен на парачейн, или актив, създаден чрез Pallet Assets, като предоставите неговия индекс.
- Име на актива, символ и десетичен номер
- Минимален баланс
След като активът XCM бъде регистриран, могат да се зададат единици за секунда на изпълнение. Това е метриката, която се използва за таксуване на изпълнението на входящо XCM съобщение в целевия парачейн, подобно на таксуването на газ в средата на Ethereum. Таксата обаче може да бъде начислена и в друг токен, например DOT. Ако количеството токени, изпратени чрез XCM, е недостатъчно, за да покрие изпълнението на XCM, транзакцията XCM се проваля и изразходваната такса не се връща.
След успешно създаване на канал, регистриране на XCM актива в целевия парачейн и задаване на единици за секунда на изпълнение, потребителите могат да пристъпят към прехвърляне на актива.
Всичко горепосочено може да бъде направено чрез SUDO (ако има такъв) или чрез демокрацията (технически комитет или референдум).
Moonbeam и XCM
Тъй като Moonbeam е парачейн в екосистемата на Polkadot, една от най-преките реализации на XCM е възможността за прехвърляне на активи от Polkadot и други парачейни от/към Moonbeam. Това ще позволи на потребителите да внасят своите токени в Moonbeam и всички негови dApps.
С разширяването на уникалните възможности за съвместимост на Moonbeam с Ethereum чуждестранните активи ще бъдат представени чрез стандартния интерфейс ERC-20 посредством предварително компилиран контракт. Активите на XCM в Moonbeam се наричат XC-20, за да се разграничат собствените активи на XCM от ERC-20, генерирани чрез EVM. Предварително компилираният контракт ще има достъп към необходимите функции на субстрата за извършване на съответните действия. От гледна точка на разработчиците обаче XC-20 са ERC-20 токени с допълнителното предимство на кросчейн XCM актив и dApps могат лесно да ги поддържат чрез познатия ERC-20 интерфейс.
Самата прекомпилация не поддържа кросчейн транзакции, за да се доближи максимално към оригиналния интерфейс на ERC-20. Следователно разработчиците ще трябва да разчитат на Substrate API и XCM, за да прехвърлят активи обратно към първоначалната мрежа, или към друг контракт за предварително компилиране, за да получат достъп към функции, базирани върху XCM от API на Ethereum.
В зависимост от целевия блокчейн прехвърлянето на активи може да се извърши чрез телепортиране или дистанционно прехвърляне, като последният метод е най-често срещан. Първоначално Moonbeam ще поддържа само дистанционни трансфери.
В следващите раздели е направен преглед на двете първоначални възможности за използване на XCM в Moonbeam: прехвърляне на активи от/към Polkadot (чрез VMP) и прехвърляне на активи от/към други парачейни (чрез XCMP). Тази страница ще бъде допълнена при появата на нови възможности за взаимодействие, като например прехвърляне на токени ERC-20 от Moonbeam към други парачейни или прехвърляне на други активи към Moonbeam като ERC-20 представяния.
Moonbeam и Polkadot
Тъй като Moonbeam е парачейн в екосистемата на Polkadot, XCM + VMP позволява прехвърляне на DOT от/към Polkadot/Moonbeam. В този раздел е представен преглед на високо ниво на всички стъпки, свързани с изпълнението на такива съобщения XCM.
След като даден проект бъде активиран като парачейн, той автоматично има двупосочен канал за връзка с релейната мрежа. Следователно не е необходимо да регистрирате мрежата. Собственият токен на релейната мрежа обаче трябва да бъде регистриран в парачейна.
Alice (Polkadot) иска да прехвърли определена сума DOTs от Polkadot в сметката си в Moonbeam, наречена Alith. Затова тя инициира XCM, в който изразява намеренията си. Moonbeam поддържа суверенна сметка в Polkadot за такива трансфери.
Следователно изпълнението на съобщението XCM в Polkadot ще прехвърли сумата на DOTs към суверенната сметка на Moonbeam в Polkadot. След като активите бъдат депозирани, втората част на съобщението ще бъде изпратена в Moonbeam.
Moonbeam локално ще извърши действието, за което е програмирано съобщението XCM. В този случай тя трябва да копае и да прехвърля същото количество xcDOTs (междуверижни DOTs) в сметка, определена от Alice, която в този случай е Alith. Таксата за изпълнение на XCM за целевия парачейн се плаща с прехвърления актив (xcDOTs в този пример).
Моля, обърнете внимание на следното:
- Сметките на Alice и Alith могат да са различни. Например сметките Polkadot са SR25519 (или ED25519), а сметките Moonbeam са ECDSA (в стил Ethereum). Възможно е те да имат и различни собственици.
- Съществува степен на доверие, при която едната мрежа разчита на другата да изпълни своята част от съобщението XCM. Това е програмирано на ниво изпълнение, така че може лесно да бъде проверено.
- В този пример кросчейн DOTs (xcDOTS) са опаковано представяне на оригиналните DOTs, държани в сметката на Moonbeam Sovereign в Polkadot. xcDOTs могат да се прехвърлят вътре в Moonbeam по всяко време, а също така могат да се разменят за DOTs на база 1:1.
Alith е инвестирала своите xcDOTs в ликвиден пул. След това Charleth придобива някои xcDOTs чрез суап срещу този пул от ликвидност и иска да прехвърли някои xcDOTs в сметката на Charlie в Polkadot. Поради това той инициира XCM, който изразява намеренията му.
Следователно изпълнението на съобщението XCM ще доведе до изгарянето на определено количество xcDOTs в Moonbeam. След като активите бъдат изгорени, втората част на съобщението ще бъде изпратена към Polkadot.
Polkadot ще изпълни локално действие, за което е програмирано съобщението XCM. В този случай това е прехвърляне на същото количество изгорели xcDOTs от сметката Moonbeam Sovereign към сметка, определена от Charleth, която в този случай е Charley.
Moonbeam и други парачейни
Тъй като Moonbeam е парачейн в екосистемата на Polkadot, XCM + XCMP ви позволява да прехвърляте активи от/към Moonbeam и други парачейни. В този раздел е представен преглед на високо ниво на основните разлики в сравнение с XCM от/към Polkadot/Moonbeam.
Първото изискване е да има канал между парачейните и прехвърляният актив да е регистриран в целевия парачейн. Само когато са изпълнени и двете условия, XCM могат да се прехвърлят между парачейни.
След това, когато Alith (Moonbeam) прехвърли определен брой GLMRs от Moonbeam към друга сметка (Alice) в целевия парачейн, токените се изпращат към суверенната сметка, притежавана от целевия парачейн в Moonbeam.
При изпълнението на съобщението XCM се очаква същият брой xcGLMR (междуверижни GLMR) да бъдат изкопани и прехвърлени от целевия парачейн към сметката, идентифицирана от Alith, която в този случай е Alice. Таксата за изпълнение на XCM в целевия парачейн се плаща с прехвърления актив (xcGLMRs в този пример).
Процесът е подобен на този на прехвърляне на xcGLMR обратно в Moonbeam, както е описано в предишния раздел. Първо, когато се изпълнява съобщението XCM, броят на xcGLMRs, които се връщат в Moonbeam, се изгаря. След изгарянето останалата част от съобщението се изпраща в Moonbeam чрез веригата от ретранслатори. Moonbeam ще изпълни локално съобщението XCM и ще прехвърли GLMRs (същия брой xcGLMRs, които са изгорени) от целевата сметка Parachain Sovereign към посочения адрес.
Anomalia#6628
Оригинален линк: https://docs.moonbeam.network/builders/xcm/overview/