# Avalanche Warp Messaging

## Overview

`Landslide Core` comes with built-in support for Avalanche Warp Messaging (AWM). AWM allows any Avalanche Subnet to quickly send arbitrary messages to another Subnet, without relying on a trusted relayer or bridge. This is made possible by utilizing the validators of the sending Subnet. The messages are delivered in just a few seconds, or even less. You can find more information about AWM and how it functions on this [page](https://docs.google.com/presentation/d/1eV4IGMB7qNV7Fc4hp7NplWxK_1cFycwCMhjrcnsE9mU/edit).

<figure><img src="https://2042960397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPdxSILrJhVcwwtZuvGHo%2Fuploads%2FN2BRSAjKCeeGK8HeKzel%2Fimage.png?alt=media&#x26;token=c84839e4-89f2-4027-9ecc-2af4d8037249" alt=""><figcaption></figcaption></figure>

{% @mermaid/diagram content="sequenceDiagram
Actor Sender
Note right of Sender: Create ExportTX message:<br>\*Source chain<br>\*Destination chain<br>\*Recipient address<br>\*amount
Sender->>Subnet A: sign message
Activate Subnet A\
Note right of Subnet A: Create Payload:<br>\*Source chain<br>\*Destination chain<br>\*Recipient address<br>\*amount
Subnet A->>Subnet A:\
Note right of Subnet A: Create UnsignedMessage:<br>\*Source chain<br>\*Destination chain<br>\*Payload<br>
Subnet A->>Avalanche: Calls NewUnsignedMessage <br>using WARP (Go module call)
Avalanche->>Subnet A: Returns WARP unsigned
Subnet A->>Subnet A: Save message into state
Subnet A->>Sender: Returns Tx ID
deactivate Subnet A
participant Subnet A
participant Subnet B
actor Receiver
Sender->>Receiver: Shares Tx ID
Note left of Receiver: Provides list of URIs<br>of subnet A Validators<br>and Tx ID<br>
Receiver->>Subnet B:
Activate Subnet B
Subnet B->>Subnet A: Query Unsigned Message and Signature by Tx ID
Activate Subnet A
Subnet A->>Subnet A: Get Unsigned message from state
Subnet A->>Avalanche: Query Signature of Message
activate Avalanche
Note left of Avalanche: Validator keeps BLS private key<br>it uses this key to sign the Message<br>and Tx ID<br>
Avalanche->>Subnet A: Returns Signature
deactivate Avalanche
Subnet A->>Subnet B: Returns Unsigned Message and Signature
deactivate Subnet A
Avalanche->>Subnet B: Get Validator Node Public Key
Subnet B->>Subnet B: verifies Signature against Public Key
Note left of Subnet B: \*Combines all Signatures together<br>Verifies that this signature was signed<br>by at least \[quorumNum/quorumDen]<br>of the validators of<br>\[msg.SourceChainID] at \[pChainHeight].
Subnet B->>Subnet B: Build and accept block
deactivate Subnet B

" %}
