asterizm-docs/mermaid.md

65 KiB
Raw Permalink Blame History

Asterizm + Jetton bridge (TON/TVM) — Mermaid схемы контрактов, сообщений и данных

Документ предназначен для аудита/ревью: в нём собраны схемы взаимодействий всех контрактов, всех сообщений и структуры данных, которые фигурируют в сообщениях/ивентах.

Build stamp: STRICT_MERMAID_NO_EDGE_LABELS_2025_12_15

Ограничения Mermaid (максимальная совместимость)

Чтобы диаграммы работали в «привередливых» интерпретаторах Mermaid, ниже используется только базовый синтаксис:

  • graph TD
  • sequenceDiagram

Не используются: subgraph, стили (classDef, style), stateDiagram, C4, gantt, journey, HTML-лейблы, многострочные лейблы.

Если Mermaid падает с parse error

Если вы видите ошибку вида got 'PS' рядом с фрагментами вида A --> edgeLabel --> B или с name:type / foo(bar) внутри подписи стрелки — это почти всегда означает, что рендерится устаревшая/закэшированная версия файла, потому что в текущей версии:

  • В graph TD нет подписей на ребрах (edge labels). Вместо этого все сообщения показаны отдельными узлами MSG_*.
  • В graph TD нет скобок () и двоеточий : на линиях графа.

Быстрая проверка в репозитории:

rg -n -- 'MSG_' MERMAID_INTERACTIONS.md

Также можно сделать поиск по подписи ребра в виде A --> edgeLabel --> B — в актуальной версии внутри ```mermaid блоков такого быть не должно.

Нотация

  • Actor_* — внешняя роль (EOA/кошелёк/сервер/релэйер).
  • C_* — контракт.
  • В лейблах сообщений:
    • Для ton-solidity параметры показаны как name:type.
    • Для FunC/Jetton — как TLB поля + опкод (op:uint32).
  • cell/TvmCell — TVM cell.
  • MsgAddress / address — адрес (тип зависит от среды: FunC vs ton-solidity ABI).

1) Asterizm Core — энд-ту-энд взаимодействие

1.1 Топология (контракты и офчейн роли)

graph TD
  Actor_User[User External caller]
  Actor_Owner[Owner admin]
  Actor_ClientServer[Client Server Offchain processor]
  Actor_Relayer[Relayer authorized by Translator]
  Actor_ExternalRelay[External relay contract ITranslator]

  C_Client[AsterizmClient base deploy as derived]
  C_Initializer[AsterizmInitializer]
  C_Translator[AsterizmTranslator]
  C_ClientTransfer[AsterizmClientTransfer per transferHash inbound outbound]
  C_InitTransfer[AsterizmInitializerTransfer per transferHash]

  MSG_1_1[calls app methods]
  Actor_User --> MSG_1_1
  MSG_1_1 --> C_Client
  MSG_1_2[admin config calls]
  Actor_Owner --> MSG_1_2
  MSG_1_2 --> C_Initializer
  MSG_1_3[admin config calls]
  Actor_Owner --> MSG_1_3
  MSG_1_3 --> C_Translator

  MSG_1_4[initTransfer dto IzIninTransferRequestDto]
  C_Client --> MSG_1_4
  MSG_1_4 --> C_Initializer
  MSG_1_5[sendMessage dto TrSendMessageRequestDto]
  C_Initializer --> MSG_1_5
  MSG_1_5 --> C_Translator

  MSG_1_6[event SendMessageEvent feeValue uint128 payload cell]
  C_Translator --> MSG_1_6
  MSG_1_6 --> Actor_Relayer
  MSG_1_7[transferMessage gasLimit uint payload cell]
  Actor_Relayer --> MSG_1_7
  MSG_1_7 --> C_Translator
  MSG_1_8[receivePayload dto IzReceivePayloadRequestDto]
  C_Translator --> MSG_1_8
  MSG_1_8 --> C_Initializer
  MSG_1_9[asterizmIzReceive dto IzAsterizmReceiveRequestDto]
  C_Initializer --> MSG_1_9
  MSG_1_9 --> C_Client

  MSG_1_10[deploy initialize]
  C_Initializer --> MSG_1_10
  MSG_1_10 --> C_InitTransfer
  MSG_1_11[deploy initialize]
  C_Client --> MSG_1_11
  MSG_1_11 --> C_ClientTransfer

  MSG_1_12[event InitiateTransferEvent _dstChainId uint64 _dstAddress uint256 _txId uint256 _transferHash uint256 _payload cell]
  C_Client --> MSG_1_12
  MSG_1_12 --> Actor_ClientServer
  MSG_1_13[event PayloadReceivedEvent _srcChainId uint64 _srcAddress uint256 _txId uint256 _transferHash uint256]
  C_Client --> MSG_1_13
  MSG_1_13 --> Actor_ClientServer
  MSG_1_14[initAsterizmTransfer dstChainId txId transferHash fee]
  Actor_ClientServer --> MSG_1_14
  MSG_1_14 --> C_Client
  MSG_1_15[asterizmClReceive srcChainId srcAddress txId transferHash payload]
  Actor_ClientServer --> MSG_1_15
  MSG_1_15 --> C_Client

  MSG_1_16[logExternalMessage externalRelay dto]
  C_Initializer --> MSG_1_16
  MSG_1_16 --> C_Translator
  MSG_1_17[sendMessage dto]
  C_Initializer --> MSG_1_17
  MSG_1_17 --> Actor_ExternalRelay

1.2 Кроссчейн перевод (payload переносится офчейн, на чейне — только transferHash и «шапка»)

Ключевой момент архитектуры: пользовательский payload не пересылается через Translator/Initializer между сетями. Межсетевой перенос делает офчейн‑сервер по событиям, а целевой контракт верифицирует payload по transferHash.

sequenceDiagram
  participant User as User
  participant ClientSrc as Client src
  participant InitSrc as Initializer src
  participant TrSrc as Translator src
  participant Relayer as Relayer/Server
  participant TrDst as Translator dst
  participant InitDst as Initializer dst
  participant ClientDst as Client dst

  User->>ClientSrc: app method example calls _initAsterizmTransferEvent dstChainId uint64 payload cell
  ClientSrc->>ClientSrc: txId txId 1
  ClientSrc->>ClientSrc: transferHash hash srcChainId srcAddress dstChainId dstAddress txId payload
  ClientSrc->>ClientSrc: deploy AsterizmClientTransfer hash transferHash type false initialize
  ClientSrc->>Relayer: event InitiateTransferEvent dstChainId uint64 dstAddress uint txId uint transferHash uint payload cell

  Relayer->>ClientSrc: initAsterizmTransfer _dstChainId uint64 _txId uint256 _transferHash uint256 _transferFeeValue uint128
  ClientSrc->>ClientSrc: check outbound transfer exists executed via AsterizmClientTransfer.isExists isExecuted
  ClientSrc->>InitSrc: initTransfer _dto dstChainId uint64 dstAddress uint256 transferHash uint256 txId uint256 dstFeeAmount uint128 relay address transferResultNotifyFlag bool

  InitSrc->>TrSrc: sendMessage _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool
  TrSrc->>Relayer: event SendMessageEvent feeValue uint128 payload cell srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferResultNotifyFlag bool transferHash uint256

  Relayer->>TrDst: transferMessage _gasLimit uint256 _payload cell srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferResultNotifyFlag bool transferHash uint256
  TrDst->>InitDst: receivePayload _dto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 gasLimit uint256 txId uint256 transferHash uint256 payload cell
  InitDst->>InitDst: deploy AsterizmInitializerTransfer hash transferHash initialize
  InitDst->>ClientDst: asterizmIzReceive _dto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256
  ClientDst->>ClientDst: deploy AsterizmClientTransfer hash transferHash type true initialize
  ClientDst->>Relayer: event PayloadReceivedEvent srcChainId uint64 srcAddress uint256 txId uint256 transferHash uint256

  Relayer->>ClientDst: asterizmClReceive _srcChainId uint64 _srcAddress uint256 _txId uint256 _transferHash uint256 _payload cell
  ClientDst->>ClientDst: verify transferHash hash srcChainId srcAddress dstChainId dstAddress txId payload
  ClientDst->>ClientDst: check inbound via ClientTransfer.isExists isExecuted InitializerTransfer.isExists
  ClientDst->>ClientDst: _asterizmReceive dto ClAsterizmReceiveRequestDto app-specific
  ClientDst->>ClientDst: mark executed via ClientTransfer.executeTransfer smallTransferHash uint128

1.3 Same-chain перевод (без релэйера)

sequenceDiagram
  participant Client as Client
  participant Init as Initializer
  participant Tr as Translator

  Client->>Init: initTransfer _dto dstChainId uint64 dstAddress uint256 transferHash uint256 txId uint256 dstFeeAmount uint128 relay address transferResultNotifyFlag bool
  Init->>Tr: sendMessage _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool
  Tr->>Tr: if dstChainId localChainId - _baseTransferMessage dto gasLimit uint payload cell
  Tr->>Init: receivePayload _dto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 gasLimit uint256 txId uint256 transferHash uint256 payload cell
  Init->>Client: asterizmIzReceive _dto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256

1.4 Resend + уведомление о статусе отправки

sequenceDiagram
  participant Client as Client
  participant Init as Initializer
  participant Tr as Translator
  participant Relayer as Relayer/Owner

  Client->>Init: resendTransfer _transferHash uint256 _feeAmount uint128 _relay address
  Init->>Tr: resendMessage _transferHash uint256 _senderAddress uint256 _feeAmount uint128
  Tr->>Relayer: event ResendFailedTransferEvent _transferHash uint256 _senderAddress uint256 _feeAmount uint128

  Relayer->>Tr: transferSendingResultNotification _targetAddress address _transferHash uint256 _statusCode uint8
  Tr->>Init: transferSendingResultNotification _targetAddress address _transferHash uint256 _statusCode uint8
  Init->>Client: transferSendingResultNotification _transferHash uint256 _statusCode uint8
  Client->>Client: optional emit TransferSendingResultNotification if notifyTransferSendingResult_ true

1.5 External relay режим (инициатор отправляет через внешний контракт-релэйер)

sequenceDiagram
  participant Client as Client
  participant Init as Initializer
  participant Tr as Translator
  participant ExtRelay as ExternalRelay ITranslator
  participant Offchain as Offchain/Watcher

  Client->>Init: initTransfer _dto dstChainId uint64 dstAddress uint256 transferHash uint256 txId uint256 dstFeeAmount uint128 relay address ExtRelay transferResultNotifyFlag bool
  Init->>Init: config getRelayData ExtRelay - ConfigDataResponseDto externalRelayExists externalRelayFee systemFee
  Init->>Tr: logExternalMessage _externalRelayAddress address ExtRelay _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool
  Tr->>Offchain: event LogExternalMessageEvent _feeValue uint _externalRelayAddress address _payload cell
  Init->>ExtRelay: sendMessage _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool

2) Asterizm — структуры данных (DTO / payload)

2.1 DTO: IAsterizmStructs / IAsterizmReceiveStructs

graph TD
  DTO_AsterizmChain[AsterizmChain]
  DTO_AsterizmChain --> DTO_AsterizmChain_exists[exists bool]
  DTO_AsterizmChain --> DTO_AsterizmChain_chainType[chainType uint8]
graph TD
  DTO_TrSendMessageRequestDto[TrSendMessageRequestDto]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_srcAddress[srcAddress uint256]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_dstChainId[dstChainId uint64]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_dstAddress[dstAddress uint256]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_txId[txId uint256]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_transferHash[transferHash uint256]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_dstFeeAmount[dstFeeAmount uint128]
  DTO_TrSendMessageRequestDto --> DTO_TrSendMessageRequestDto_transferResultNotifyFlag[transferResultNotifyFlag bool]
graph TD
  DTO_IzIninTransferRequestDto[IzIninTransferRequestDto]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_dstChainId[dstChainId uint64]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_dstAddress[dstAddress uint256]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_transferHash[transferHash uint256]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_txId[txId uint256]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_dstFeeAmount[dstFeeAmount uint128]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_relay[relay address]
  DTO_IzIninTransferRequestDto --> DTO_IzIninTransferRequestDto_transferResultNotifyFlag[transferResultNotifyFlag bool]
graph TD
  DTO_IzReceivePayloadRequestDto[IzReceivePayloadRequestDto]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_srcChainId[srcChainId uint64]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_srcAddress[srcAddress uint256]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_dstChainId[dstChainId uint64]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_dstAddress[dstAddress uint256]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_gasLimit[gasLimit uint256]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_txId[txId uint256]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_transferHash[transferHash uint256]
  DTO_IzReceivePayloadRequestDto --> DTO_IzReceivePayloadRequestDto_payload[payload cell]
graph TD
  DTO_IzAsterizmReceiveRequestDto[IzAsterizmReceiveRequestDto]
  DTO_IzAsterizmReceiveRequestDto --> DTO_IzAsterizmReceiveRequestDto_srcChainId[srcChainId uint64]
  DTO_IzAsterizmReceiveRequestDto --> DTO_IzAsterizmReceiveRequestDto_srcAddress[srcAddress uint256]
  DTO_IzAsterizmReceiveRequestDto --> DTO_IzAsterizmReceiveRequestDto_dstChainId[dstChainId uint64]
  DTO_IzAsterizmReceiveRequestDto --> DTO_IzAsterizmReceiveRequestDto_dstAddress[dstAddress uint256]
  DTO_IzAsterizmReceiveRequestDto --> DTO_IzAsterizmReceiveRequestDto_txId[txId uint256]
  DTO_IzAsterizmReceiveRequestDto --> DTO_IzAsterizmReceiveRequestDto_transferHash[transferHash uint256]
graph TD
  DTO_ClAsterizmReceiveRequestDto[ClAsterizmReceiveRequestDto]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_srcChainId[srcChainId uint64]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_srcAddress[srcAddress uint256]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_dstChainId[dstChainId uint64]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_dstAddress[dstAddress uint256]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_txId[txId uint256]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_transferHash[transferHash uint256]
  DTO_ClAsterizmReceiveRequestDto --> DTO_ClAsterizmReceiveRequestDto_payload[payload cell]
graph TD
  DTO_ConfigDataResponseDto[ConfigDataResponseDto]
  DTO_ConfigDataResponseDto --> DTO_ConfigDataResponseDto_externalRelayExists[externalRelayExists bool]
  DTO_ConfigDataResponseDto --> DTO_ConfigDataResponseDto_externalRelayFee[externalRelayFee uint128]
  DTO_ConfigDataResponseDto --> DTO_ConfigDataResponseDto_systemFee[systemFee uint128]

2.2 TransferHash (как формируется)

graph TD
  H[transferHash uint256]
  H --> H_srcChainId[srcChainId uint64]
  H --> H_srcAddress[srcAddress uint256]
  H --> H_dstChainId[dstChainId uint64]
  H --> H_dstAddress[dstAddress uint256]
  H --> H_txId[txId uint256]
  H --> H_payload[payload cell bytes payload.toSlice]

3) Asterizm — ABI карты сообщений (артефакты contracts/artifacts/*.abi.json)

Ниже — «полные» карты ABI для контрактов, которые имеют артефакты в репозитории. Эти схемы показывают все функции и все события вместе с типами аргументов.

ABI: AsterizmClientTransfer

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmClientTransfer[AsterizmClientTransfer]

  MSG_10_1[constructor]
  Actor_Any --> MSG_10_1
  MSG_10_1 --> C_AsterizmClientTransfer
  MSG_10_2[initialize]
  Actor_Any --> MSG_10_2
  MSG_10_2 --> C_AsterizmClientTransfer
  MSG_10_3[isExists answerId uint32 _smallTransferHash uint128 - value0 uint256 value1 bool value2 uint8]
  Actor_Any --> MSG_10_3
  MSG_10_3 --> C_AsterizmClientTransfer
  MSG_10_4[isExecuted answerId uint32 _smallTransferHash uint128 - value0 uint256 value1 bool value2 uint8]
  Actor_Any --> MSG_10_4
  MSG_10_4 --> C_AsterizmClientTransfer
  MSG_10_5[executeTransfer _smallTransferHash uint128]
  Actor_Any --> MSG_10_5
  MSG_10_5 --> C_AsterizmClientTransfer
  MSG_10_6[event DeployClientTransferContractEvent _selfAddress address]
  C_AsterizmClientTransfer --> MSG_10_6
  MSG_10_6 --> Actor_Any
  MSG_10_7[event ExecuteTransferEvent]
  C_AsterizmClientTransfer --> MSG_10_7
  MSG_10_7 --> Actor_Any

ABI: AsterizmInitializer

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmInitializer[AsterizmInitializer]

  MSG_11_1[constructor]
  Actor_Any --> MSG_11_1
  MSG_11_1 --> C_AsterizmInitializer
  MSG_11_2[addBlockAddress _chainId uint64 _address address]
  Actor_Any --> MSG_11_2
  MSG_11_2 --> C_AsterizmInitializer
  MSG_11_3[removeBlockAddress _chainId uint64 _address address]
  Actor_Any --> MSG_11_3
  MSG_11_3 --> C_AsterizmInitializer
  MSG_11_4[updateChainsList]
  Actor_Any --> MSG_11_4
  MSG_11_4 --> C_AsterizmInitializer
  MSG_11_5[onUpdateChainsListCallback _chains map uint64 tuple exists bool chainType uint8]
  Actor_Any --> MSG_11_5
  MSG_11_5 --> C_AsterizmInitializer
  MSG_11_6[updateLocalChainId]
  Actor_Any --> MSG_11_6
  MSG_11_6 --> C_AsterizmInitializer
  MSG_11_7[onUpdateLocalChainIdCallback _localChainId uint64]
  Actor_Any --> MSG_11_7
  MSG_11_7 --> C_AsterizmInitializer
  MSG_11_8[getLocalChainId answerId uint32 - value0 uint64]
  Actor_Any --> MSG_11_8
  MSG_11_8 --> C_AsterizmInitializer
  MSG_11_9[getInitializerTransferCode answerId uint32 - value0 cell]
  Actor_Any --> MSG_11_9
  MSG_11_9 --> C_AsterizmInitializer
  MSG_11_10[getClientTransferCode answerId uint32 - value0 cell]
  Actor_Any --> MSG_11_10
  MSG_11_10 --> C_AsterizmInitializer
  MSG_11_11[getChainsList answerId uint32 - value0 map uint64 tuple]
  Actor_Any --> MSG_11_11
  MSG_11_11 --> C_AsterizmInitializer
  MSG_11_12[initTransfer _dto dstChainId uint64 dstAddress uint256 transferHash uint256 txId uint256 dstFeeAmount uint128 relay address transferResultNotifyFlag bool]
  Actor_Any --> MSG_11_12
  MSG_11_12 --> C_AsterizmInitializer
  MSG_11_13[resendTransfer _transferHash uint256 _feeAmount uint128 _relay address]
  Actor_Any --> MSG_11_13
  MSG_11_13 --> C_AsterizmInitializer
  MSG_11_14[transferSendingResultNotification _targetAddress address _transferHash uint256 _statusCode uint8]
  Actor_Any --> MSG_11_14
  MSG_11_14 --> C_AsterizmInitializer
  MSG_11_15[receivePayload _dto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 gasLimit uint256 txId uint256 transferHash uint256 payload cell]
  Actor_Any --> MSG_11_15
  MSG_11_15 --> C_AsterizmInitializer
  MSG_11_16[manageTrustedRelay _relayAddress address _fee uint128 _systemFee uint128]
  Actor_Any --> MSG_11_16
  MSG_11_16 --> C_AsterizmInitializer
  MSG_11_17[updateTrustedRelayFee _fee uint128]
  Actor_Any --> MSG_11_17
  MSG_11_17 --> C_AsterizmInitializer
  MSG_11_18[removeTrustedRelay _relayAddress address]
  Actor_Any --> MSG_11_18
  MSG_11_18 --> C_AsterizmInitializer
  MSG_11_19[getRelayData _relayAddress address - value0 tuple]
  Actor_Any --> MSG_11_19
  MSG_11_19 --> C_AsterizmInitializer
  MSG_11_20[blockAddresses - blockAddresses map uint64 map uint256 bool]
  Actor_Any --> MSG_11_20
  MSG_11_20 --> C_AsterizmInitializer
  MSG_11_21[event SetTranslatorEvent _translatorAddress address]
  C_AsterizmInitializer --> MSG_11_21
  MSG_11_21 --> Actor_Any
  MSG_11_22[event AddBlockAddressEvent _chainId uint64 _address uint256]
  C_AsterizmInitializer --> MSG_11_22
  MSG_11_22 --> Actor_Any
  MSG_11_23[event RemoveBlockAddressEvent _chainId uint64 _address uint256]
  C_AsterizmInitializer --> MSG_11_23
  MSG_11_23 --> Actor_Any
  MSG_11_24[event TransferHashContractDeployEvent _transferHash uint256 _address address]
  C_AsterizmInitializer --> MSG_11_24
  MSG_11_24 --> Actor_Any
  MSG_11_25[event InitTransferSuccessfullyEvent _transferHash uint256]
  C_AsterizmInitializer --> MSG_11_25
  MSG_11_25 --> Actor_Any
  MSG_11_26[event UpdateChainsListEvent]
  C_AsterizmInitializer --> MSG_11_26
  MSG_11_26 --> Actor_Any
  MSG_11_27[event SentPayloadEvent _transferHash uint256 _dstAddress address]
  C_AsterizmInitializer --> MSG_11_27
  MSG_11_27 --> Actor_Any
  MSG_11_28[event TransferErrorEvent _errorCode uint16]
  C_AsterizmInitializer --> MSG_11_28
  MSG_11_28 --> Actor_Any
  MSG_11_29[event SetInitializerEvent _address address]
  C_AsterizmInitializer --> MSG_11_29
  MSG_11_29 --> Actor_Any
  MSG_11_30[event TrustedRelayEvent _initializer address _relayAddress address _fee uint128 _systemFee uint128]
  C_AsterizmInitializer --> MSG_11_30
  MSG_11_30 --> Actor_Any
  MSG_11_31[event RemoveTrustedRelayEvent _relayAddress address]
  C_AsterizmInitializer --> MSG_11_31
  MSG_11_31 --> Actor_Any

ABI: AsterizmInitializerTransfer

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmInitializerTransfer[AsterizmInitializerTransfer]

  MSG_12_1[constructor]
  Actor_Any --> MSG_12_1
  MSG_12_1 --> C_AsterizmInitializerTransfer
  MSG_12_2[initialize]
  Actor_Any --> MSG_12_2
  MSG_12_2 --> C_AsterizmInitializerTransfer
  MSG_12_3[isExists answerId uint32 _smallTransferHash uint128 - value0 uint256 value1 bool value2 uint8]
  Actor_Any --> MSG_12_3
  MSG_12_3 --> C_AsterizmInitializerTransfer
  MSG_12_4[event DeployInitializerTransferContractEvent _selfAddress address]
  C_AsterizmInitializerTransfer --> MSG_12_4
  MSG_12_4 --> Actor_Any

ABI: AsterizmRefundTransfer

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmRefundTransfer[AsterizmRefundTransfer]

  MSG_13_1[constructor]
  Actor_Any --> MSG_13_1
  MSG_13_1 --> C_AsterizmRefundTransfer
  MSG_13_2[setData _userAddress address _amount uint256 _tokenAddress address]
  Actor_Any --> MSG_13_2
  MSG_13_2 --> C_AsterizmRefundTransfer
  MSG_13_3[getData answerId uint32 _sender address - value0 uint256 value1 address value2 uint256 value3 address value4 address]
  Actor_Any --> MSG_13_3
  MSG_13_3 --> C_AsterizmRefundTransfer
  MSG_13_4[event DeployRefundTransferContractEvent _selfAddress address]
  C_AsterizmRefundTransfer --> MSG_13_4
  MSG_13_4 --> Actor_Any
  MSG_13_5[event SetRefundDataEvent _userAddress address _amount uint256 _tokenAddress address]
  C_AsterizmRefundTransfer --> MSG_13_5
  MSG_13_5 --> Actor_Any

ABI: AsterizmRefundRequest

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmRefundRequest[AsterizmRefundRequest]

  MSG_14_1[constructor]
  Actor_Any --> MSG_14_1
  MSG_14_1 --> C_AsterizmRefundRequest
  MSG_14_2[setData _userAddress address _amount uint256 _tokenAddress address]
  Actor_Any --> MSG_14_2
  MSG_14_2 --> C_AsterizmRefundRequest
  MSG_14_3[getData answerId uint32 _status bool - value0 uint256 value1 address value2 uint256 value3 address value4 bool value5 bool value6 bool value7 bool]
  Actor_Any --> MSG_14_3
  MSG_14_3 --> C_AsterizmRefundRequest
  MSG_14_4[executeRequest answerId uint32 _status bool - value0 uint256 value1 address value2 uint256 value3 address value4 bool value5 bool value6 bool value7 bool]
  Actor_Any --> MSG_14_4
  MSG_14_4 --> C_AsterizmRefundRequest
  MSG_14_5[event DeployRefundRequestContractEvent _selfAddress address]
  C_AsterizmRefundRequest --> MSG_14_5
  MSG_14_5 --> Actor_Any
  MSG_14_6[event SetRefundDataEvent _userAddress address _amount uint256 _tokenAddress address]
  C_AsterizmRefundRequest --> MSG_14_6
  MSG_14_6 --> Actor_Any
  MSG_14_7[event ExecuteRefundRequestEvent _transferHash uint256 _status bool]
  C_AsterizmRefundRequest --> MSG_14_7
  MSG_14_7 --> Actor_Any

ABI: AsterizmRefundConfirmation

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmRefundConfirmation[AsterizmRefundConfirmation]

  MSG_15_1[constructor]
  Actor_Any --> MSG_15_1
  MSG_15_1 --> C_AsterizmRefundConfirmation
  MSG_15_2[isExists answerId uint32 _transferHash uint128 - value0 uint256 value1 bool]
  Actor_Any --> MSG_15_2
  MSG_15_2 --> C_AsterizmRefundConfirmation
  MSG_15_3[event DeployRefundConfirmationContractEvent _selfAddress address]
  C_AsterizmRefundConfirmation --> MSG_15_3
  MSG_15_3 --> Actor_Any

ABI: AsterizmTranslator

graph TD
  Actor_Any[Any caller Any listener]
  C_AsterizmTranslator[AsterizmTranslator]

  MSG_16_1[constructor]
  Actor_Any --> MSG_16_1
  MSG_16_1 --> C_AsterizmTranslator
  MSG_16_2[addRelayer _relayer address]
  Actor_Any --> MSG_16_2
  MSG_16_2 --> C_AsterizmTranslator
  MSG_16_3[removeRelayer _relayer address]
  Actor_Any --> MSG_16_3
  MSG_16_3 --> C_AsterizmTranslator
  MSG_16_4[setInitializer _initializerReceiver address]
  Actor_Any --> MSG_16_4
  MSG_16_4 --> C_AsterizmTranslator
  MSG_16_5[addChain _chainId uint64 _chainType uint8]
  Actor_Any --> MSG_16_5
  MSG_16_5 --> C_AsterizmTranslator
  MSG_16_6[addChains chainIds uint64 array chainTypes uint8 array]
  Actor_Any --> MSG_16_6
  MSG_16_6 --> C_AsterizmTranslator
  MSG_16_7[removeChainById _chainId uint64]
  Actor_Any --> MSG_16_7
  MSG_16_7 --> C_AsterizmTranslator
  MSG_16_8[updateTrustedRelayFee _fee uint128]
  Actor_Any --> MSG_16_8
  MSG_16_8 --> C_AsterizmTranslator
  MSG_16_9[getLocalChainId answerId uint32 - value0 uint64]
  Actor_Any --> MSG_16_9
  MSG_16_9 --> C_AsterizmTranslator
  MSG_16_10[getChainsList answerId uint32 - value0 map uint64 tuple]
  Actor_Any --> MSG_16_10
  MSG_16_10 --> C_AsterizmTranslator
  MSG_16_11[sendMessage _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool]
  Actor_Any --> MSG_16_11
  MSG_16_11 --> C_AsterizmTranslator
  MSG_16_12[logExternalMessage _externalRelayAddress address _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool]
  Actor_Any --> MSG_16_12
  MSG_16_12 --> C_AsterizmTranslator
  MSG_16_13[resendMessage _transferHash uint256 _senderAddress uint256 _feeAmount uint128]
  Actor_Any --> MSG_16_13
  MSG_16_13 --> C_AsterizmTranslator
  MSG_16_14[transferSendingResultNotification _targetAddress address _transferHash uint256 _statusCode uint8]
  Actor_Any --> MSG_16_14
  MSG_16_14 --> C_AsterizmTranslator
  MSG_16_15[transferMessage _gasLimit uint256 _payload cell]
  Actor_Any --> MSG_16_15
  MSG_16_15 --> C_AsterizmTranslator
  MSG_16_16[chains - chains map uint64 tuple]
  Actor_Any --> MSG_16_16
  MSG_16_16 --> C_AsterizmTranslator
  MSG_16_17[event SetInitializerEvent _initializerAddress address]
  C_AsterizmTranslator --> MSG_16_17
  MSG_16_17 --> Actor_Any
  MSG_16_18[event AddRelayerEvent _relayerAddress address]
  C_AsterizmTranslator --> MSG_16_18
  MSG_16_18 --> Actor_Any
  MSG_16_19[event RemoveRelayerEvent _relayerAddress address]
  C_AsterizmTranslator --> MSG_16_19
  MSG_16_19 --> Actor_Any
  MSG_16_20[event AddChainEvent _chainId uint64]
  C_AsterizmTranslator --> MSG_16_20
  MSG_16_20 --> Actor_Any
  MSG_16_21[event RemoveChainEvent _chainId uint64]
  C_AsterizmTranslator --> MSG_16_21
  MSG_16_21 --> Actor_Any
  MSG_16_22[event SetLocalChainEvent _chainId uint64 _chainType uint8]
  C_AsterizmTranslator --> MSG_16_22
  MSG_16_22 --> Actor_Any
  MSG_16_23[event SendMessageEvent _feeValue uint128 _payload cell]
  C_AsterizmTranslator --> MSG_16_23
  MSG_16_23 --> Actor_Any
  MSG_16_24[event SuccessTransferEvent _transferHash uint256]
  C_AsterizmTranslator --> MSG_16_24
  MSG_16_24 --> Actor_Any
  MSG_16_25[event LogExternalMessageEvent _feeValue uint256 _externalRelayAddress address _payload cell]
  C_AsterizmTranslator --> MSG_16_25
  MSG_16_25 --> Actor_Any
  MSG_16_26[event TransferSendEvent _srcChainId uint64 _srcAddress uint256 _dstAddress uint256 _transferHash uint256]
  C_AsterizmTranslator --> MSG_16_26
  MSG_16_26 --> Actor_Any
  MSG_16_27[event ResendFailedTransferEvent _transferHash uint256 _senderAddress uint256 _feeAmount uint128]
  C_AsterizmTranslator --> MSG_16_27
  MSG_16_27 --> Actor_Any

ABI: ChainMock

graph TD
  Actor_Any[Any caller Any listener]
  C_ChainMock[ChainMock]

  MSG_17_1[buildTransferHash _srcChainId uint64 _srcAddress uint256 _dstChainId uint64 _dstAddress uint256 _txId uint256 _payload cell - value0 uint256]
  Actor_Any --> MSG_17_1
  MSG_17_1 --> C_ChainMock
  MSG_17_2[buildPayload dstAddress uint256 value uint256]
  Actor_Any --> MSG_17_2
  MSG_17_2 --> C_ChainMock
  MSG_17_3[buildTrTransferMessageRequestDto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 b bool transferHash uint256]
  Actor_Any --> MSG_17_3
  MSG_17_3 --> C_ChainMock
  MSG_17_4[setVersion _version uint8]
  Actor_Any --> MSG_17_4
  MSG_17_4 --> C_ChainMock
  MSG_17_5[constructor]
  Actor_Any --> MSG_17_5
  MSG_17_5 --> C_ChainMock
  MSG_17_6[version - version uint8]
  Actor_Any --> MSG_17_6
  MSG_17_6 --> C_ChainMock
  MSG_17_7[h - h uint256]
  Actor_Any --> MSG_17_7
  MSG_17_7 --> C_ChainMock
  MSG_17_8[payload - payload cell]
  Actor_Any --> MSG_17_8
  MSG_17_8 --> C_ChainMock

Дополнения из исходников (не отражены в текущих ABI артефактах)

В репозитории есть функции/хендлеры, присутствующие в .tsol, но отсутствующие в contracts/artifacts/*.abi.json (артефакты выглядят не полностью синхронизированными с исходниками).

graph TD
  Actor_Owner[Owner]
  C_AsterizmInitializer_src[AsterizmInitializer source]
  C_AsterizmTranslator_src[AsterizmTranslator source]

  MSG_18_1[withdrawCoins]
  Actor_Owner --> MSG_18_1
  MSG_18_1 --> C_AsterizmInitializer_src
  MSG_18_2[withdrawCoins]
  Actor_Owner --> MSG_18_2
  MSG_18_2 --> C_AsterizmTranslator_src
graph TD
  Actor_Any[Any sender bounce source]
  C_AsterizmInitializer_bounce[AsterizmInitializer source]
  MSG_19_1[onBounce TvmSlice _slice functionId uint32 remaining params]
  Actor_Any --> MSG_19_1
  MSG_19_1 --> C_AsterizmInitializer_bounce

4) Asterizm — базовые контракты (source-derived, без ABI артефактов)

4.1 AsterizmClient (база для приложений)

graph TD
  Actor_Owner[Owner]
  Actor_Sender[Sender authorized in AsterizmSender]
  Actor_Init[Initializer contract]
  Actor_Offchain[Client server Offchain]
  C_Client[AsterizmClient abstract]

  MSG_20_1[initialize]
  Actor_Owner --> MSG_20_1
  MSG_20_1 --> C_Client
  MSG_20_2[setExternalRelay _externalRelay address]
  Actor_Owner --> MSG_20_2
  MSG_20_2 --> C_Client
  MSG_20_3[addTrustedAddress _chainId uint64 _trustedAddress uint256]
  Actor_Owner --> MSG_20_3
  MSG_20_3 --> C_Client
  MSG_20_4[addTrustedAddresses chainIds uint64 array trustedAddresses uint256 array]
  Actor_Owner --> MSG_20_4
  MSG_20_4 --> C_Client
  MSG_20_5[removeTrustedSourceAddress _chainId uint64]
  Actor_Owner --> MSG_20_5
  MSG_20_5 --> C_Client
  MSG_20_6[updateChainsList]
  Actor_Owner --> MSG_20_6
  MSG_20_6 --> C_Client

  MSG_20_7[initAsterizmTransfer _dstChainId uint64 _txId uint256 _transferHash uint256 _transferFeeValue uint128]
  Actor_Sender --> MSG_20_7
  MSG_20_7 --> C_Client
  MSG_20_8[resendAsterizmTransfer _transferHash uint256 _feeAmount uint128]
  Actor_Sender --> MSG_20_8
  MSG_20_8 --> C_Client
  MSG_20_9[asterizmClReceive _srcChainId uint64 _srcAddress uint256 _txId uint256 _transferHash uint256 _payload cell]
  Actor_Sender --> MSG_20_9
  MSG_20_9 --> C_Client

  MSG_20_10[asterizmIzReceive _dto srcChainId uint64 srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256]
  Actor_Init --> MSG_20_10
  MSG_20_10 --> C_Client
  MSG_20_11[transferSendingResultNotification _transferHash uint256 _statusCode uint8]
  Actor_Init --> MSG_20_11
  MSG_20_11 --> C_Client

  MSG_20_12[event InitiateTransferEvent dstChainId dstAddress txId transferHash payload]
  C_Client --> MSG_20_12
  MSG_20_12 --> Actor_Offchain
  MSG_20_13[event PayloadReceivedEvent srcChainId srcAddress txId transferHash]
  C_Client --> MSG_20_13
  MSG_20_13 --> Actor_Offchain

AsterizmClient — полный список входящих сообщений/коллбеков (по contracts/base/AsterizmClient.tsol)

graph TD
  Actor_Owner[Owner]
  Actor_Sender[Sender onlySender]
  Actor_Initializer[Initializer]
  Actor_Any[Any external caller getter caller]
  C_ClientTransferCaller[AsterizmClientTransfer caller]
  C_InitTransferCaller[AsterizmInitializerTransfer caller]
  C_Client[AsterizmClient]

  MSG_21_1[constructor deploy]
  Actor_Owner --> MSG_21_1
  MSG_21_1 --> C_Client
  MSG_21_2[onBounce _slice TvmSlice]
  Actor_Any --> MSG_21_2
  MSG_21_2 --> C_Client

  MSG_21_3[initialize]
  Actor_Owner --> MSG_21_3
  MSG_21_3 --> C_Client
  MSG_21_4[onUpdateLocalChainIdCallback _localChainId uint64]
  Actor_Initializer --> MSG_21_4
  MSG_21_4 --> C_Client
  MSG_21_5[onUpdateInitializerTransferCodeCallback _code cell]
  Actor_Initializer --> MSG_21_5
  MSG_21_5 --> C_Client
  MSG_21_6[onUpdateClientTransferCodeCallback _code cell]
  Actor_Initializer --> MSG_21_6
  MSG_21_6 --> C_Client
  MSG_21_7[onUpdateChainsListCallback _chains map uint64 tuple exists bool chainType uint8]
  Actor_Initializer --> MSG_21_7
  MSG_21_7 --> C_Client

  MSG_21_8[setExternalRelay _externalRelay address]
  Actor_Owner --> MSG_21_8
  MSG_21_8 --> C_Client
  MSG_21_9[getExternalRelay - address]
  Actor_Any --> MSG_21_9
  MSG_21_9 --> C_Client

  MSG_21_10[addTrustedAddress _chainId uint64 _trustedAddress uint256]
  Actor_Owner --> MSG_21_10
  MSG_21_10 --> C_Client
  MSG_21_11[addTrustedAddresses chainIds uint64 array trustedAddresses uint256 array]
  Actor_Owner --> MSG_21_11
  MSG_21_11 --> C_Client
  MSG_21_12[removeTrustedSourceAddress _chainId uint64]
  Actor_Owner --> MSG_21_12
  MSG_21_12 --> C_Client
  MSG_21_13[updateChainsList]
  Actor_Owner --> MSG_21_13
  MSG_21_13 --> C_Client

  MSG_21_14[getInitializerAddress - address]
  Actor_Any --> MSG_21_14
  MSG_21_14 --> C_Client
  MSG_21_15[getTrustedAddresses _chainId uint64 - uint256]
  Actor_Any --> MSG_21_15
  MSG_21_15 --> C_Client
  MSG_21_16[getDisableHashValidation - bool]
  Actor_Any --> MSG_21_16
  MSG_21_16 --> C_Client
  MSG_21_17[getNotifyTransferSendingResult - bool]
  Actor_Any --> MSG_21_17
  MSG_21_17 --> C_Client
  MSG_21_18[withdrawCoins]
  Actor_Owner --> MSG_21_18
  MSG_21_18 --> C_Client

  MSG_21_19[initAsterizmTransfer _dstChainId uint64 _txId uint256 _transferHash uint256 _transferFeeValue uint128]
  Actor_Sender --> MSG_21_19
  MSG_21_19 --> C_Client
  MSG_21_20[onInitAsterizmTransferCallback _transferHash uint256 _flag bool _method uint8]
  C_ClientTransferCaller --> MSG_21_20
  MSG_21_20 --> C_Client

  MSG_21_21[resendAsterizmTransfer _transferHash uint256 _feeAmount uint128]
  Actor_Sender --> MSG_21_21
  MSG_21_21 --> C_Client

  MSG_21_22[transferSendingResultNotification _transferHash uint256 _statusCode uint8]
  Actor_Initializer --> MSG_21_22
  MSG_21_22 --> C_Client
  MSG_21_23[asterizmIzReceive _dto IzAsterizmReceiveRequestDto]
  Actor_Initializer --> MSG_21_23
  MSG_21_23 --> C_Client

  MSG_21_24[asterizmClReceive _srcChainId uint64 _srcAddress uint256 _txId uint256 _transferHash uint256 _payload cell]
  Actor_Sender --> MSG_21_24
  MSG_21_24 --> C_Client
  MSG_21_25[onAsterizmReceiveCallback _transferHash uint256 _flag bool _method uint8]
  C_ClientTransferCaller --> MSG_21_25
  MSG_21_25 --> C_Client
  MSG_21_26[onAsterizmReceiveCallback _transferHash uint256 _flag bool _method uint8]
  C_InitTransferCaller --> MSG_21_26
  MSG_21_26 --> C_Client

AsterizmClient — события (по contracts/base/AsterizmClient.tsol)

graph TD
  Actor_Any[Any listener]
  C_Client[AsterizmClient]

  MSG_22_1[event SetInitializerEvent _initializerAddress address]
  C_Client --> MSG_22_1
  MSG_22_1 --> Actor_Any
  MSG_22_2[event SetExternalRelayEvent _externalRelayAddress address]
  C_Client --> MSG_22_2
  MSG_22_2 --> Actor_Any
  MSG_22_3[event SetLocalChainIdEvent _localChainId uint64]
  C_Client --> MSG_22_3
  MSG_22_3 --> Actor_Any
  MSG_22_4[event InitiateTransferEvent _dstChainId uint64 _dstAddress uint256 _txId uint256 _transferHash uint256 _payload cell]
  C_Client --> MSG_22_4
  MSG_22_4 --> Actor_Any
  MSG_22_5[event PayloadReceivedEvent _srcChainId uint64 _srcAddress uint256 _txId uint256 _transferHash uint256]
  C_Client --> MSG_22_5
  MSG_22_5 --> Actor_Any
  MSG_22_6[event AddTrustedSourceAddressEvent _chainId uint64 _address uint256]
  C_Client --> MSG_22_6
  MSG_22_6 --> Actor_Any
  MSG_22_7[event RemoveTrustedSourceAddressEvent _chainId uint64 _address uint256]
  C_Client --> MSG_22_7
  MSG_22_7 --> Actor_Any
  MSG_22_8[event SetUseEncryptionEvent _flag bool]
  C_Client --> MSG_22_8
  MSG_22_8 --> Actor_Any
  MSG_22_9[event SetNotifyTransferSendingResultEvent _flag bool]
  C_Client --> MSG_22_9
  MSG_22_9 --> Actor_Any
  MSG_22_10[event SetDisableHashValidationEvent _flag bool]
  C_Client --> MSG_22_10
  MSG_22_10 --> Actor_Any
  MSG_22_11[event TransferContractDeployEvent _address address]
  C_Client --> MSG_22_11
  MSG_22_11 --> Actor_Any
  MSG_22_12[event TransferErrorEvent _transferHash uint256 _errorCode uint16]
  C_Client --> MSG_22_12
  MSG_22_12 --> Actor_Any
  MSG_22_13[event UpdateChainsListEvent]
  C_Client --> MSG_22_13
  MSG_22_13 --> Actor_Any
  MSG_22_14[event SuccessTransferExecutedEvent _transferHash uint256]
  C_Client --> MSG_22_14
  MSG_22_14 --> Actor_Any
  MSG_22_15[event ErrorTransferExecutedEvent _transferHash uint256 _errorCode uint16]
  C_Client --> MSG_22_15
  MSG_22_15 --> Actor_Any
  MSG_22_16[event ResendAsterizmTransferEvent _transferHash uint256 _feeAmount uint128]
  C_Client --> MSG_22_16
  MSG_22_16 --> Actor_Any
  MSG_22_17[event TransferSendingResultNotification _transferHash uint256 _statusCode uint8]
  C_Client --> MSG_22_17
  MSG_22_17 --> Actor_Any

4.2 AsterizmRefund (refund-модуль, используется в MultichainToken)

graph TD
  Actor_User[User]
  Actor_OwnerOrSender[Owner or Sender]
  C_RefundLogic[AsterizmRefund mixin]
  C_RefundTransfer[AsterizmRefundTransfer per transferHash]
  C_RefundRequest[AsterizmRefundRequest per transferHash]
  C_RefundConfirm[AsterizmRefundConfirmation per transferHash]

  MSG_23_1[addRefundRequest _transferHash uint256]
  Actor_User --> MSG_23_1
  MSG_23_1 --> C_RefundLogic
  MSG_23_2[getData _sender address - transferHash userAddress amount tokenAddress sender]
  C_RefundLogic --> MSG_23_2
  MSG_23_2 --> C_RefundTransfer
  MSG_23_3[setData userAddress amount tokenAddress]
  C_RefundLogic --> MSG_23_3
  MSG_23_3 --> C_RefundRequest

  MSG_23_4[processRefundRequest _transferHash uint256 _status bool]
  Actor_OwnerOrSender --> MSG_23_4
  MSG_23_4 --> C_RefundLogic
  MSG_23_5[getData _status bool - transferHash userAddress amount tokenAddress isExecuted isSuccess isReject status]
  C_RefundLogic --> MSG_23_5
  MSG_23_5 --> C_RefundRequest
  MSG_23_6[executeRequest _status bool - transferHash uint256 userAddress address amount uint256 tokenAddress address isExecutedFlag bool isSuccessProcessFlag bool isRejectProcessFlag bool status bool]
  C_RefundLogic --> MSG_23_6
  MSG_23_6 --> C_RefundRequest

  MSG_23_7[confirmRefund _transferHash uint256]
  Actor_OwnerOrSender --> MSG_23_7
  MSG_23_7 --> C_RefundLogic
  MSG_23_8[deploy]
  C_RefundLogic --> MSG_23_8
  MSG_23_8 --> C_RefundConfirm

AsterizmRefund — полный список сообщений/коллбеков (по contracts/base/AsterizmRefund.tsol)

graph TD
  Actor_User[User]
  Actor_OwnerOrSender[Owner or Sender]
  C_RefundTransferCaller[AsterizmRefundTransfer caller]
  C_RefundRequestCaller[AsterizmRefundRequest caller]
  C_RefundConfirmCaller[AsterizmRefundConfirmation caller]
  C_Refund[AsterizmRefund]

  MSG_24_1[addRefundRequest _transferHash uint256]
  Actor_User --> MSG_24_1
  MSG_24_1 --> C_Refund
  MSG_24_2[onAddRefundRequestCallback _transferHash uint256 _userAddress address _amount uint256 _tokenAddress address _sender address]
  C_RefundTransferCaller --> MSG_24_2
  MSG_24_2 --> C_Refund

  MSG_24_3[processRefundRequest _transferHash uint256 _status bool]
  Actor_OwnerOrSender --> MSG_24_3
  MSG_24_3 --> C_Refund
  MSG_24_4[onProcessRefundRequestCallback _transferHash uint256 _userAddress address _amount uint256 _tokenAddress address _isExecutedFlag bool _isSuccessProcessFlag bool _isRejectProcessFlag bool _status bool]
  C_RefundRequestCaller --> MSG_24_4
  MSG_24_4 --> C_Refund
  MSG_24_5[onExecuteRequestCallback _transferHash uint256 _userAddress address _amount uint256 _tokenAddress address _isExecutedFlag bool _isSuccessProcessFlag bool _isRejectProcessFlag bool _status bool]
  C_RefundRequestCaller --> MSG_24_5
  MSG_24_5 --> C_Refund

  MSG_24_6[confirmRefund _transferHash uint256]
  Actor_OwnerOrSender --> MSG_24_6
  MSG_24_6 --> C_Refund
  MSG_24_7[onCheckRefundConfirmationCallback _transferHash uint256 _exists bool]
  C_RefundConfirmCaller --> MSG_24_7
  MSG_24_7 --> C_Refund

AsterizmRefund — события (по contracts/base/AsterizmRefund.tsol)

graph TD
  Actor_Any[Any listener]
  C_Refund[AsterizmRefund]

  MSG_25_1[event AddRefundTransferEvent _transferHash uint256 _userAddress address _amount uint256 _tokenAddress address]
  C_Refund --> MSG_25_1
  MSG_25_1 --> Actor_Any
  MSG_25_2[event RefundTransferContractDeployEvent _transferHash uint256 _contractAddress address]
  C_Refund --> MSG_25_2
  MSG_25_2 --> Actor_Any
  MSG_25_3[event RefundRequestContractDeployEvent _transferHash uint256 _contractAddress address]
  C_Refund --> MSG_25_3
  MSG_25_3 --> Actor_Any
  MSG_25_4[event RefundConfirmationContractDeployEvent _transferHash uint256 _contractAddress address]
  C_Refund --> MSG_25_4
  MSG_25_4 --> Actor_Any
  MSG_25_5[event AddRefundRequestEvent _transferHash uint256 _userAddress address _amount uint256 _tokenAddress address]
  C_Refund --> MSG_25_5
  MSG_25_5 --> Actor_Any
  MSG_25_6[event ProcessRefundRequestEvent _transferHash uint256 _status bool _userAddress address _amount uint256 _tokenAddress address]
  C_Refund --> MSG_25_6
  MSG_25_6 --> Actor_Any
  MSG_25_7[event ConfirmRefundEvent _transferHash uint256 _confirmContractAddress address]
  C_Refund --> MSG_25_7
  MSG_25_7 --> Actor_Any
  MSG_25_8[event TransferWasRefundedEvent _transferHash uint256]
  C_Refund --> MSG_25_8
  MSG_25_8 --> Actor_Any

4.3 AsterizmSender (роль Sender)

graph TD
  Actor_Owner[Owner]
  C_Sender[AsterizmSender mixin]
  MSG_26_1[addSender _sender address]
  Actor_Owner --> MSG_26_1
  MSG_26_1 --> C_Sender
  MSG_26_2[removeSender _sender address]
  Actor_Owner --> MSG_26_2
  MSG_26_2 --> C_Sender
graph TD
  Actor_Any[Any listener]
  C_Sender[AsterizmSender mixin]
  MSG_27_1[event AddSenderEvent _sender address]
  C_Sender --> MSG_27_1
  MSG_27_1 --> Actor_Any
  MSG_27_2[event RemoveSenderEvent _sender address]
  C_Sender --> MSG_27_2
  MSG_27_2 --> Actor_Any

4.4 AsterizmConfig (trusted relays registry)

AsterizmConfig используется внутри AsterizmInitializer и отвечает за список доверенных «внешних релэйеров» и их комиссий.

graph TD
  Actor_Owner[Owner]
  Actor_TrustedRelay[Trusted relay onlyTrustedRelay]
  Actor_Any[Any caller]
  C_Config[AsterizmConfig mixin]

  MSG_28_1[manageTrustedRelay _relayAddress address _fee uint128 _systemFee uint128]
  Actor_Owner --> MSG_28_1
  MSG_28_1 --> C_Config
  MSG_28_2[updateTrustedRelayFee _fee uint128]
  Actor_TrustedRelay --> MSG_28_2
  MSG_28_2 --> C_Config
  MSG_28_3[removeTrustedRelay _relayAddress address]
  Actor_Owner --> MSG_28_3
  MSG_28_3 --> C_Config
  MSG_28_4[getRelayData _relayAddress address - ConfigDataResponseDto]
  Actor_Any --> MSG_28_4
  MSG_28_4 --> C_Config
graph TD
  Actor_Any[Any listener]
  C_Config[AsterizmConfig mixin]
  MSG_29_1[event TrustedRelayEvent _initializer address _relayAddress address _fee uint128 _systemFee uint128]
  C_Config --> MSG_29_1
  MSG_29_1 --> Actor_Any
  MSG_29_2[event RemoveTrustedRelayEvent _relayAddress address]
  C_Config --> MSG_29_2
  MSG_29_2 --> Actor_Any

4.5 AsterizmNonce (отдельный контракт, не используется в текущих вызовах core)

graph TD
  Actor_Owner[Owner of Nonce contract]
  C_Nonce[AsterizmNonce]
  MSG_30_1[getNonce answerId uint32 - nonce uint]
  Actor_Owner --> MSG_30_1
  MSG_30_1 --> C_Nonce
  MSG_30_2[increaseNonce answerId uint32 _transferHash uint256 - transferHash uint256 nonce uint]
  Actor_Owner --> MSG_30_2
  MSG_30_2 --> C_Nonce
  MSG_30_3[increaseNonceWithValidation answerId uint32 _transferHash uint256 _nonce uint256 - transferHash uint256 nonce uint]
  Actor_Owner --> MSG_30_3
  MSG_30_3 --> C_Nonce
graph TD
  Actor_Any[Any listener]
  C_Nonce[AsterizmNonce]
  MSG_31_1[event DeployContractEvent]
  C_Nonce --> MSG_31_1
  MSG_31_1 --> Actor_Any
  MSG_31_2[event NonceIncreacementEvent _nonce uint]
  C_Nonce --> MSG_31_2
  MSG_31_2 --> Actor_Any

4.5 Demo контракты (примеры интеграции)

AsterizmDemo (contracts/demo/AsterizmDemo.tsol)

AsterizmDemo наследует AsterizmClient и добавляет только «прикладной» метод sendMessage.

graph TD
  Actor_User[User]
  Actor_Any[Any listener]
  C_AsterizmDemo[AsterizmDemo]

  MSG_32_1[sendMessage _dstChainId uint64 _message string]
  Actor_User --> MSG_32_1
  MSG_32_1 --> C_AsterizmDemo
  MSG_32_2[event InitiateTransferEvent dstChainId dstAddress txId transferHash payload abi.encode _message]
  C_AsterizmDemo --> MSG_32_2
  MSG_32_2 --> Actor_Any
  MSG_32_3[event SetChainMessageEvent _message string]
  C_AsterizmDemo --> MSG_32_3
  MSG_32_3 --> Actor_Any

AsterizmTest (contracts/demo/AsterizmTest.tsol)

graph TD
  Actor_User[User]
  Actor_Any[Any listener]
  C_AsterizmTest[AsterizmTest]

  MSG_33_1[sendMessage _dstChainId uint64 _uint24Data uint24 _uint72Data uint72 _int24Data int24 _int72Data int72]
  Actor_User --> MSG_33_1
  MSG_33_1 --> C_AsterizmTest
  MSG_33_2[event InitiateTransferEvent dstChainId dstAddress txId transferHash payload abi.encode uint24 uint72 int24 int72]
  C_AsterizmTest --> MSG_33_2
  MSG_33_2 --> Actor_Any
  MSG_33_3[event SetChainMessageEvent uint24Data uint24 uint72Data uint72 int24Data int24 int72Data int72]
  C_AsterizmTest --> MSG_33_3
  MSG_33_3 --> Actor_Any

5) Projects — MultichainToken / MultichainTokenWR (Jetton <-> Asterizm)

5.1 Jetton transfer_notification -> кроссчейн (fallback в MultichainToken)

MultichainToken ожидает входящее сообщение от baseTokenWallet с op=0x7362d09c (Jetton transfer_notification).

sequenceDiagram
  participant JettonWallet as JettonWallet baseTokenWallet
  participant MCT as MultichainToken
  participant Relayer as Offchain
  participant Init as Initializer
  participant Tr as Translator

  JettonWallet->>MCT: transfer_notification op 0x7362d09c query_id uint64 amount VarUInteger from MsgAddress forward_payload Either Cell Cell
  MCT->>MCT: if forward_payload is ref with 320 bits chainId uint64 target uint256
  MCT->>MCT: crossChainTransfer dstChainId uint64 from address to uint256 amount uint
  MCT->>Relayer: event InitiateTransferEvent dstChainId dstAddress txId transferHash payload abi.encode to amount txId
  Relayer->>MCT: initAsterizmTransfer dstChainId txId transferHash fee
  MCT->>Init: initTransfer _dto dstChainId uint64 dstAddress uint256 transferHash uint256 txId uint256 dstFeeAmount uint128 relay address transferResultNotifyFlag bool
  Init->>Tr: sendMessage _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool

5.2 Исходящее Jetton transfer (как собирается body)

В MultichainToken.sendBaseToken() формируется тело Jetton transfer вручную (op=0xf8a7ea5).

graph TD
  Msg_JettonTransfer[Jetton transfer op 0xf8a7ea5]
  Msg_JettonTransfer --> F_query_id[query_id uint64 0]
  Msg_JettonTransfer --> F_amount[amount VarUInteger16 stored as 120-bit in code]
  Msg_JettonTransfer --> F_destination[destination MsgAddress _to]
  Msg_JettonTransfer --> F_response_destination[response_destination MsgAddress addr_none 2 zero bits]
  Msg_JettonTransfer --> F_custom_payload[custom_payload Maybe Cell null]
  Msg_JettonTransfer --> F_forward_ton_amount[forward_ton_amount VarUInteger16 0]
  Msg_JettonTransfer --> F_forward_payload[forward_payload Either Cell Cell empty single 0 bit]

5.3 Сообщения MultichainToken (уникальная часть поверх AsterizmClient)

MultichainToken и MultichainTokenWR наследуют весь публичный API AsterizmClient (см. раздел 4.1) и добавляют:

graph TD
  Actor_Owner[Owner]
  Actor_JettonWallet[JettonWallet baseTokenWallet]
  Actor_Any[Any listener]
  C_MultichainToken[MultichainToken MultichainTokenWR]

  MSG_35_1[setBaseTokenWallet _baseTokenAddress address]
  Actor_Owner --> MSG_35_1
  MSG_35_1 --> C_MultichainToken
  MSG_35_2[transfer_notification op 0x7362d09c query_id uint64 amount Coins from MsgAddress forward_payload Either]
  Actor_JettonWallet --> MSG_35_2
  MSG_35_2 --> C_MultichainToken
  MSG_35_3[event InitiateTransferEvent _dstChainId uint64 _dstAddress uint256 _txId uint256 _transferHash uint256 _payload cell from AsterizmClient]
  C_MultichainToken --> MSG_35_3
  MSG_35_3 --> Actor_Any

6) Projects — GasStation (TIP-3 stablecoin -> gas via Asterizm)

6.1 Стаблкоин transfer callback -> инициирование газовых переводов

sequenceDiagram
  participant StableWallet as TIP3 TokenWallet stable coin
  participant Gas as GasStation
  participant Offchain as Offchain
  participant Init as Initializer
  participant Tr as Translator

  StableWallet->>Gas: onAcceptTokensTransfer tokenRoot address amount uint128 sender address senderWallet address remainingGasTo address payload cell
  Gas->>Gas: payload decode - chainIds uint64 amounts uint receivers uint
  Gas->>StableWallet: transfer amount sum to owner deployWalletValue 0 remainingGasTo Gas notifyReceiver false payload empty
  Gas->>Gas: for each i payload_i abi.encode receivers i amounts i txId tokenRootUint decimals
  Gas->>Offchain: event InitiateTransferEvent dstChainId dstAddress txId transferHash payload_i repeated per i
  Gas->>Offchain: event GasSendEvent dstChainId txId payload_i repeated per i
  Offchain->>Gas: initAsterizmTransfer dstChainId txId transferHash fee repeated per i
  Gas->>Init: initTransfer _dto dstChainId uint64 dstAddress uint256 transferHash uint256 txId uint256 dstFeeAmount uint128 relay address transferResultNotifyFlag bool repeated per i
  Init->>Tr: sendMessage _dto srcAddress uint256 dstChainId uint64 dstAddress uint256 txId uint256 transferHash uint256 dstFeeAmount uint128 transferResultNotifyFlag bool repeated per i

6.2 Payload для GasStation (получение на целевой сети)

В GasStation._asterizmReceive() ожидается payload с дополнительным stableRate (не входит в hash-проверку).

graph TD
  GasPayload[GasStation payload ClAsterizmReceiveRequestDto.payload]
  GasPayload --> GP_dstAddressUint[dstAddressUint uint]
  GasPayload --> GP_amount[amount uint]
  GasPayload --> GP_txId[txId uint]
  GasPayload --> GP_tokenAddressUint[tokenAddressUint uint token root]
  GasPayload --> GP_decimals[decimals uint8]
  GasPayload --> GP_stableRate[stableRate uint used for amountToSend amount stableRate 10 decimals]

6.3 Сообщения и события GasStation (по исходнику contracts/projects/gas/GasStation.tsol)

graph TD
  Actor_Owner[Owner]
  Actor_Any[Any listener]
  Actor_Tip3Wallet[TIP-3 TokenWallet stable coin wallet]
  C_GasStation[GasStation]

  MSG_37_1[withdrawCoins _target address _amount uint128]
  Actor_Owner --> MSG_37_1
  MSG_37_1 --> C_GasStation
  MSG_37_2[withdrawTokens _tokenRoot ITokenRoot _target address _amount uint128]
  Actor_Owner --> MSG_37_2
  MSG_37_2 --> C_GasStation
  MSG_37_3[setMinUsdAmount _amount uint]
  Actor_Owner --> MSG_37_3
  MSG_37_3 --> C_GasStation
  MSG_37_4[setMaxUsdAmount _amount uint]
  Actor_Owner --> MSG_37_4
  MSG_37_4 --> C_GasStation
  MSG_37_5[setMinUsdAmountPerChain _amount uint]
  Actor_Owner --> MSG_37_5
  MSG_37_5 --> C_GasStation
  MSG_37_6[setMaxUsdAmountPerChain _amount uint]
  Actor_Owner --> MSG_37_6
  MSG_37_6 --> C_GasStation
  MSG_37_7[addStableCoin _tokenRoot ITokenRoot _decimals uint8]
  Actor_Owner --> MSG_37_7
  MSG_37_7 --> C_GasStation
  MSG_37_8[removeStableCoin _tokenAddress address]
  Actor_Owner --> MSG_37_8
  MSG_37_8 --> C_GasStation

  MSG_37_9[buildGasPayload chainIds uint64 array amounts uint array receivers uint array]
  Actor_Any --> MSG_37_9
  MSG_37_9 --> C_GasStation
  MSG_37_10[onAcceptTokensTransfer _tokenRoot address _amount uint128 _sender address _senderWallet address _remainingGasTo address _payload cell]
  Actor_Tip3Wallet --> MSG_37_10
  MSG_37_10 --> C_GasStation

  MSG_37_11[event CoinsReceivedEvent _amount uint _transactionId uint _dstAddress address]
  C_GasStation --> MSG_37_11
  MSG_37_11 --> Actor_Any
  MSG_37_12[event GasSendEvent _dstChainId uint64 _transactionId uint _payload cell]
  C_GasStation --> MSG_37_12
  MSG_37_12 --> Actor_Any
  MSG_37_13[event AddStableCoinEvent _rootAddress address _walletAddress address]
  C_GasStation --> MSG_37_13
  MSG_37_13 --> Actor_Any
  MSG_37_14[event RemoveStableCoinEvent _address address]
  C_GasStation --> MSG_37_14
  MSG_37_14 --> Actor_Any
  MSG_37_15[event SetMinUsdAmountEvent _amount uint]
  C_GasStation --> MSG_37_15
  MSG_37_15 --> Actor_Any
  MSG_37_16[event SetMaxUsdAmountEvent _amount uint]
  C_GasStation --> MSG_37_16
  MSG_37_16 --> Actor_Any
  MSG_37_17[event SetMinUsdAmountPerChainEvent _amount uint]
  C_GasStation --> MSG_37_17
  MSG_37_17 --> Actor_Any
  MSG_37_18[event SetMaxUsdAmountPerChainEvent _amount uint]
  C_GasStation --> MSG_37_18
  MSG_37_18 --> Actor_Any
  MSG_37_19[event WithdrawCoinsEvent _target address _amount uint128]
  C_GasStation --> MSG_37_19
  MSG_37_19 --> Actor_Any
  MSG_37_20[event WithdrawTokensEvent _token address _target address _amount uint]
  C_GasStation --> MSG_37_20
  MSG_37_20 --> Actor_Any
  MSG_37_21[event WithdrawNotExistsTokensEvent _token address _target address _amount uint]
  C_GasStation --> MSG_37_21
  MSG_37_21 --> Actor_Any
  MSG_37_22[event BuildGasPayloadEvent _payload cell]
  C_GasStation --> MSG_37_22
  MSG_37_22 --> Actor_Any

7) FunC / Jetton стандарт (contracts-fc/*)

7.1 Jetton wallet message bodies (op-codes из contracts-fc/op-codes.fc)

graph TD
  JW_transfer[transfer op 0xf8a7ea5]
  JW_transfer --> JW_t_query[query_id uint64]
  JW_transfer --> JW_t_amount[amount Coins VarUInteger 16]
  JW_transfer --> JW_t_destination[destination MsgAddress]
  JW_transfer --> JW_t_response[response_destination MsgAddress]
  JW_transfer --> JW_t_custom[custom_payload Maybe Cell]
  JW_transfer --> JW_t_fwdTon[forward_ton_amount Coins VarUInteger 16]
  JW_transfer --> JW_t_fwdPayload[forward_payload Either Cell Cell]
graph TD
  JW_internal[internal_transfer op 0x178d4519]
  JW_internal --> JW_i_query[query_id uint64]
  JW_internal --> JW_i_amount[amount Coins VarUInteger 16]
  JW_internal --> JW_i_from[from MsgAddress]
  JW_internal --> JW_i_response[response_address MsgAddress]
  JW_internal --> JW_i_fwdTon[forward_ton_amount Coins VarUInteger 16]
  JW_internal --> JW_i_fwdPayload[forward_payload Either Cell Cell]
graph TD
  JW_notify[transfer_notification op 0x7362d09c]
  JW_notify --> JW_n_query[query_id uint64]
  JW_notify --> JW_n_amount[amount Coins VarUInteger 16]
  JW_notify --> JW_n_from[from MsgAddress]
  JW_notify --> JW_n_payload[forward_payload Either Cell Cell copied from internal_transfer]
graph TD
  JW_excess[excesses op 0xd53276db]
  JW_excess --> JW_ex_query[query_id uint64]
graph TD
  JW_burn[burn op 0x595f07bc]
  JW_burn --> JW_b_query[query_id uint64]
  JW_burn --> JW_b_amount[amount Coins VarUInteger 16]
  JW_burn --> JW_b_resp[response_destination MsgAddress]
  JW_burn --> JW_b_custom[custom_payload Maybe Cell]
graph TD
  JW_burn_notif[burn_notification op 0x7bdd97de]
  JW_burn_notif --> JW_bn_query[query_id uint64]
  JW_burn_notif --> JW_bn_amount[amount Coins VarUInteger 16]
  JW_burn_notif --> JW_bn_owner[owner_address MsgAddress]
  JW_burn_notif --> JW_bn_resp[response_address MsgAddress]

7.2 Jetton transfer flow (wallet -> wallet)

sequenceDiagram
  participant OwnerA as Owner A
  participant WalletA as JettonWallet A
  participant WalletB as JettonWallet B
  participant OwnerB as Owner B
  participant Resp as response_destination

  OwnerA->>WalletA: transfer op 0xf8a7ea5 query_id amount destination response_destination custom_payload forward_ton_amount forward_payload
  WalletA->>WalletB: internal_transfer op 0x178d4519 query_id amount from OwnerA response_address response_destination forward_ton_amount forward_payload
  WalletB->>OwnerB: transfer_notification op 0x7362d09c query_id amount from OwnerA forward_payload
  WalletB->>Resp: excesses op 0xd53276db query_id

7.3 Jetton burn flow (wallet -> minter)

sequenceDiagram
  participant Owner as Owner
  participant Wallet as JettonWallet
  participant Minter as JettonMinter
  participant Resp as response_destination

  Owner->>Wallet: burn op 0x595f07bc query_id amount response_destination custom_payload
  Wallet->>Minter: burn_notification op 0x7bdd97de query_id amount owner_address response_address response_destination
  Minter->>Resp: excesses op 0xd53276db query_id

7.4 Jetton discovery (provide_wallet_address / take_wallet_address)

graph TD
  Disc_provide[provide_wallet_address op 0x2c76b973]
  Disc_provide --> Disc_p_query[query_id uint64]
  Disc_provide --> Disc_p_owner[owner_address MsgAddress]
  Disc_provide --> Disc_p_include[include_address Bool]
graph TD
  Disc_take[take_wallet_address op 0xd1735400]
  Disc_take --> Disc_t_query[query_id uint64]
  Disc_take --> Disc_t_wallet[wallet_address MsgAddress or addr_none]
  Disc_take --> Disc_t_included[included_address Maybe Cell containing owner_address if requested]
sequenceDiagram
  participant Caller as Caller
  participant Discovery as JettonDiscovery

  Caller->>Discovery: provide_wallet_address op 0x2c76b973 query_id owner_address include_address
  Discovery->>Caller: take_wallet_address op 0xd1735400 query_id wallet_address maybe_included_owner_address

7.5 Jetton mint (admin mint) и ICO-покупка (empty body)

graph TD
  JM_mint[mint op 21]
  JM_mint --> JM_m_query[query_id uint64]
  JM_mint --> JM_m_to[to_address MsgAddress]
  JM_mint --> JM_m_amount[amount Coins TON value for deploy msg]
  JM_mint --> JM_m_master[master_msg Cell internal_transfer op 0x178d4519 query_id uint64 amount Coins from MsgAddress response_address MsgAddress forward_ton_amount Coins forward_payload Either]
graph TD
  JM_change_admin[change_admin op 3]
  JM_change_admin --> JM_ca_query[query_id uint64]
  JM_change_admin --> JM_ca_new[new_admin_address MsgAddress]
graph TD
  JM_change_content[change_content op 4]
  JM_change_content --> JM_cc_query[query_id uint64]
  JM_change_content --> JM_cc_content[content Cell]
sequenceDiagram
  participant Admin as Admin
  participant Minter as JettonMinter
  participant Wallet as JettonWallet to

  Admin->>Minter: mint op 21 query_id uint64 to_address MsgAddress amount Coins master_msg Cell internal_transfer op 0x178d4519 query_id uint64 amount Coins from MsgAddress response_address MsgAddress forward_ton_amount Coins forward_payload Either
  Minter->>Wallet: deploy internal msg state_init master_msg
sequenceDiagram
  participant Buyer as Buyer
  participant IcoMinter as JettonMinter_ICO
  participant BuyerWallet as JettonWallet Buyer

  Buyer->>IcoMinter: empty body buy with msg_value
  IcoMinter->>BuyerWallet: deploy internal msg internal_transfer master_msg

7.6 Jetton get-методы (offchain read)

graph TD
  JW_get[JettonWallet.get_wallet_data method_id]
  JW_get --> JW_get_balance[returns balance Coins]
  JW_get --> JW_get_owner[returns owner_address MsgAddress]
  JW_get --> JW_get_master[returns jetton_master_address MsgAddress]
  JW_get --> JW_get_code[returns jetton_wallet_code Cell]
graph TD
  JM_get_data[JettonMinter.get_jetton_data method_id]
  JM_get_data --> JM_gd_supply[returns total_supply Coins]
  JM_get_data --> JM_gd_mintable[returns mintable int -1 in reference impl]
  JM_get_data --> JM_gd_admin[returns admin_address MsgAddress]
  JM_get_data --> JM_gd_content[returns content Cell]
  JM_get_data --> JM_gd_wallet_code[returns jetton_wallet_code Cell]
graph TD
  JM_get_wallet[JettonMinter.get_wallet_address owner_address MsgAddress method_id]
  JM_get_wallet --> JM_gw_wallet[returns wallet_address MsgAddress]

8) FunC — Granter (contracts/granter/granter.fc)

8.1 Сообщения Granter

graph TD
  G_set[set_address op 0x15eb8d35]
  G_set --> G_set_wallet[new_wallet MsgAddress]
graph TD
  G_grant[grant op 0x30c3eaa8]
  G_grant --> G_grant_to[recipient msg.sender]
  G_grant --> G_grant_amount[jetton_amount Coins 100000000000]
  G_grant --> G_grant_body[sends Jetton transfer op 0xf8a7ea5 query_id 0 amount 100000000000 destination recipient response_destination recipient custom_payload null forward_ton_amount 0 forward_payload empty to g_wallet]
graph TD
  G_get[get_state_variables method_id]
  G_get --> G_get_owner[returns g_owner MsgAddress]
  G_get --> G_get_wallet[returns g_wallet MsgAddress]

8.2 Grant flow

sequenceDiagram
  participant User as User
  participant Granter as Granter
  participant JettonWallet as JettonWallet g_wallet

  User->>Granter: grant op 0x30c3eaa8
  Granter->>JettonWallet: transfer op 0xf8a7ea5 query_id 0 amount 100000000000 destination User response_destination User custom_payload null forward_ton_amount 0 forward_payload empty

9) FunC — Notifier (contracts-fc/notifier.fc)

9.1 Сообщения Notifier

graph TD
  N_increase[increase op 0x7e8764ef]
  N_increase --> N_inc_by[increase_by uint32 parsed immediately after op]
  N_increase --> N_inc_note[NOTE notifier.fc does NOT load query_id uint64 for increase]
graph TD
  N_transfer[transfer op 0xf8a7ea5]
  N_transfer --> N_tr_query[query_id uint64]
  N_transfer --> N_tr_amount[amount Coins VarUInteger 16]
  N_transfer --> N_tr_destination[destination MsgAddress]
  N_transfer --> N_tr_response[response_destination MsgAddress]
  N_transfer --> N_tr_custom[custom_payload Maybe Cell]
  N_transfer --> N_tr_fwdTon[forward_ton_amount Coins VarUInteger 16]
  N_transfer --> N_tr_fwdPayload[forward_payload Either Cell Cell]
  N_transfer --> N_tr_effect[effect ctx_counter jetton_amount]
graph TD
  N_notify[notify op 0xbb620d9c]
  N_notify --> N_notify_target[owner_address MsgAddress target]
  N_notify --> N_notify_from[from_address MsgAddress]
  N_notify --> N_notify_payload[forward_payload remaining slice example chainId uint64 dst MsgAddress]
graph TD
  N_get_counter[get_counter method_id]
  N_get_counter --> N_get_counter_ret[returns int ctx_counter]
  N_get_id[get_id method_id]
  N_get_id --> N_get_id_ret[returns int ctx_id]

9.2 notify -> transfer_notification (outgoing)

sequenceDiagram
  participant Caller as Caller
  participant Notifier as Notifier
  participant Target as Target owner_address

  Caller->>Notifier: notify op 0xbb620d9c owner_address MsgAddress from_address MsgAddress chainId uint64 dst MsgAddress
  Notifier->>Target: transfer_notification op 0x7362d09c query_id 1 amount 756 from from_address forward_payload_slice chainId uint64 dst MsgAddress