# IBC - выход за рамки простой передачи токенов.

By [tokyos.eth](https://paragraph.com/@tokyos) · 2023-01-09

---

IBC был запущен в марте 2021 года с единым приложением, построенным поверх него — взаимозаменяемыми переводами токенов ([ICS-20](https://github.com/cosmos/ibc/blob/main/spec/app/ics-020-fungible-token-transfer/README.md)). Несколько месяцев спустя [Cosmos Hub](https://twitter.com/cosmos) и [Osmosis](https://twitter.com/osmosiszone) возглавили усилия по выводу этого приложения на рынок.

В то время как передача токенов была хлебом и маслом для взаимодействия с блокчейном, они стремятся вывести этот примитив на шаг вперёд.

Межсетевая компоновка предполагает будущее, в котором токены будут беспрепятственно передаваться не только между цепочками, но и между модулями в этих цепочках. Хотя сегодня пользователи могут отправлять токены из одной цепочки в другую, вскоре они смогут _отправлять и указывать_ , что делать с этими токенами в пункте назначения.

Это достигается за счет использования мемо-поля в пакетах передачи взаимозаменяемых токенов.

Недавние улучшения, внесенные в передачу токенов ICS-20[, вводят необязательное](https://github.com/cosmos/ibc-go/pull/2595) `memo`поле в `FungibleTokenPacketData`структуру:

Это позволяет передавать произвольные данные в виде строки вместе с передачей токенов. Например, в поле памятки может быть указана такая информация, как действие пользователя/данные о вызове, количество знаков после запятой, номинал (номинал), символ тикера и логотип.

Обратите внимание, что метаданные в поле memo не используются в самом ICS-20, но вместо этого промежуточное ПО или пользовательский контракт CosmWasm могут "обернуть" протокол передачи для анализа метаданных и выполнения пользовательской логики на их основе.

Поле memo будет в версии ibc-go v6.0.0, которая включает в себя изменение API. В версии 6.0.0 вы можете передать его в `memo` качестве аргумента `NewFungibleTokenPacketData`, как показано [здесь](https://github.com/cosmos/ibc-go/blob/release/v6.0.x/modules/apps/transfer/keeper/relay.go#L132-L134) . В версиях v2.5, v3.4, v4.2 и v5.1 вы по-прежнему можете использовать memo-поле — без нарушения API — путем присвоения значения `memo` непосредственно после инициализации, `NewFungibleTokenPacketData` , как показано [здесь](https://github.com/cosmos/ibc-go/blob/release/v2.5.x/modules/apps/transfer/keeper/relay.go#L177-L180).

**_Примечание._**\* Пакет IBC с непустым полем memo не будет доставлен к месту назначения (после распаковки пакета), если цепочка получения использует версию ibc-go, отличную от v6.0.0, v2.5, v3.4, v4.2. или v5.1.\*

Какую пользу это дает вам, как конечному пользователю?Если сегодня пользователь хочет отправить ATOM из Cosmos Hub в Osmosis, а затем предоставить ликвидность пулу (или выполнить другие действия, такие как обмен/ставка/размещение токенов в качестве залога), он должен подписать и одобрить две разные транзакции — одну. отправить ATOM на осмос, а затем еще один, чтобы добавить ликвидности.

Этот UX может быть значительно улучшен, если пользователь может отправлять токены _и_ указывать, что делать с ними в пункте назначения, и **все это одним действием**.

Недавно представленное поле memo обеспечивает инфраструктуру, позволяющую сделать это возможным. Вскоре пользователь сможет отправлять токены и выполнять некоторые действия программно (обмен, стейкинг, предоставление ликвидности и т. д.), эффективно позволяя объединять несколько транзакций в одну.

Поле memo также приносит пользу [промежуточному программному обеспечению для пересылки пакетов](https://github.com/strangelove-ventures/packet-forward-middleware) . В текущем (старом) интерфейсе будет считывать и записывать данные (адрес получателя) из структуры пакета и направлять пакеты от посредника к конечному пункту назначения. В новом интерфейсе обходной путь больше не потребуется, поскольку конечный адрес назначения можно указать в поле memo нужное действие.

Другие улучшения ICS-20

Помимо добавления поля memo в структуру пакета передачи, в ICS-20 было внесено несколько других улучшений, таких как:

*   [Возврат последовательности пакетов после](https://github.com/cosmos/ibc-go/issues/1969) `MsgTransferResponse` (улучшение Dev UX)
    
*   [Делаем](https://github.com/cosmos/ibc-go/issues/1918) `SendTransfer` метод закрытым
    
    Вывод
    

Позволяя передавать ликвидность и произвольные данные за одно действие, добавление поля memo значительно изменит способ, которым пользователи осуществляют транзакции и управляют активами между цепочками.

Компонуемость между цепочками всегда была основным принципом разработки IBC. С принятием внутрипротокольной передачи метаданных вскоре большее количество цепочек приложений сможет в большей степени компоноваться друг с другом.

---

*Originally published on [tokyos.eth](https://paragraph.com/@tokyos/ibc)*
