/*
* +---------------------------------------------+ +---------------------------------------------+
* | | | |
* | Darwinia | | Ethereum |
* | | | |
* | +-----------------+ | | +-----------------+ |
* | | | | | | | |
* | | App Layer | | | | App Layer | |
* | | | | | | | |
* | +-----^----+------+ | | +----^----+-------+ |
* | | | | | | | |
* | | | | | | | |
* | +------------------+ +-----+----v------+ | | +-----+----v-------+ +-----------------+ |
* | | <---+ Message Layer | | | | Message Layer +----> | |
* | | Truth Layer | +-----------------+ | | +------------------+ | Truth Layer | |
* | | | | inbound channel <--+--------------------+-+ outbound channel | | | |
* | | Ethereum Verifier| +-----------------+ | | +------------------+ |Darwinia Verifier| |
* | | | |outbound channel +--+--------------------+-> inbound channel | | | |
* | +------------------+ +-----------------+ | | +------------------+ +-----------------+ |
* | | | |
* | | | |
* | | | |
* +---------------------------------------------+ +---------------------------------------------+
*/
消息由源链应用层发出, 源链消息层 outbound channel
收到消息后将消息发送到目标链 inbound channel
, 最后交付给目标链应用层。
消息层用于将消息从源链发送到目标链。
通道促进了单一方向的信息传递。通道由一个源链的发送方 outbound
和一个目标链的接收方 inbound
组成。任何想在桥上发送消息的用户或系统都必须将其提交给通道。消息层支持多个消息通道,为消息提供不同的可传递性保证,如消息的重放保护, 消息的有序或无序保证等。
通过通道发送的消息被分配为唯一(对于此通道)严格递增的 nonce 的整数值。保证通过同一通道发送的消息以从源链发送的相同顺序发送到目标链。换句话说,带有nonce N
的消息将在 nonce N+1
之前交付。
单个消息通道可以被视为单个应用程序(链上、链外或混合)的传输通道。
源链是指消息发出的链。
目标链是消息交付的链。
源链上的应用程序使用消息来调用目标链上带有参数的函数。类似于远程过程调用或RPC。一个消息包含识别源程序、目标程序和目标程序期望理解的有效 encoded
的数据。
消息的数据结构如下: