# 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 — как TL‑B поля + опкод (`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 ```