asterizm-docs/mermaid.md

1604 lines
65 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` **нет** скобок `()` и двоеточий `:` на линиях графа.
Быстрая проверка в репозитории:
```sh
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 Топология (контракты и офчейн роли)
```mermaid
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`.
```mermaid
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 перевод (без релэйера)
```mermaid
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 + уведомление о статусе отправки
```mermaid
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 режим (инициатор отправляет через внешний контракт-релэйер)
```mermaid
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
```mermaid
graph TD
DTO_AsterizmChain[AsterizmChain]
DTO_AsterizmChain --> DTO_AsterizmChain_exists[exists bool]
DTO_AsterizmChain --> DTO_AsterizmChain_chainType[chainType uint8]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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 (как формируется)
```mermaid
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
```mermaid
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
```mermaid
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
```mermaid
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
```mermaid
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
```mermaid
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
```mermaid
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
```mermaid
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
```mermaid
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` (артефакты выглядят не полностью синхронизированными с исходниками).
```mermaid
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
```
```mermaid
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 (база для приложений)
```mermaid
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`)
```mermaid
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`)
```mermaid
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)
```mermaid
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`)
```mermaid
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`)
```mermaid
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)
```mermaid
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
```
```mermaid
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` и отвечает за список доверенных «внешних релэйеров» и их комиссий.
```mermaid
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
```
```mermaid
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)
```mermaid
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
```
```mermaid
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`.
```mermaid
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`)
```mermaid
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`).
```mermaid
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`).
```mermaid
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) и добавляют:
```mermaid
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 -> инициирование газовых переводов
```mermaid
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-проверку).
```mermaid
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`)
```mermaid
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`)
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
graph TD
JW_excess[excesses op 0xd53276db]
JW_excess --> JW_ex_query[query_id uint64]
```
```mermaid
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]
```
```mermaid
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)
```mermaid
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)
```mermaid
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)
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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)
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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
```
```mermaid
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)
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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
```mermaid
graph TD
G_set[set_address op 0x15eb8d35]
G_set --> G_set_wallet[new_wallet MsgAddress]
```
```mermaid
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]
```
```mermaid
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
```mermaid
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
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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]
```
```mermaid
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)
```mermaid
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
```