Files
pezkuwi-subxt/polkadot/bridges/docs/send-message.md
T

132 lines
5.6 KiB
Markdown

# How to send messages
The Substrate-to-Substrate relay comes with a command line interface (CLI) which is implemented
by the `substrate-relay` binary.
```
Substrate-to-Substrate relay
USAGE:
substrate-relay <SUBCOMMAND>
FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
SUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
init-bridge Initialize on-chain bridge pallet with current header data
relay-headers Start headers relay between two chains
relay-messages Start messages relay between two chains
send-message Send custom message over the bridge
```
The relay related commands `relay-headers` and `relay-messages` are basically continously running a
sync loop between the `Millau` and `Rialto` chains. The `init-bridge` command submitts initialization
transactions. An initialization transaction brings an initial header and authorities set from a source
chain to a target chain. The header synchronization then starts from that header.
For sending custom messages over an avialable bridge, the `send-message` command is used.
```
Send custom message over the bridge.
Allows interacting with the bridge by sending messages over `Messages` component. The message is being sent to the
source chain, delivered to the target chain and dispatched there.
USAGE:
substrate-relay send-message <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
millau-to-rialto Submit message to given Millau -> Rialto lane
rialto-to-millau Submit message to given Rialto -> Millau lane
```
Messages are send from a source chain to a target chain using a so called `message lane`. Message lanes handle
both, message transport and message dispatch. There is one command for submitting a message to each of the two
available bridges, namely `millau-to-rialto` and `rialto-to-millau`.
Submitting a message requires a number of arguments to be provided. Those arguments are essentially the same
for both submit message commands, hence only the output for `millau-to-rialto` is shown below.
```
Submit message to given Millau -> Rialto lane
USAGE:
substrate-relay send-message millau-to-rialto [OPTIONS] --lane <lane> --source-host <source-host> --source-port <source-port> --source-signer <source-signer> --origin <origin> --target-signer <target-signer> <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--fee <fee>
Delivery and dispatch fee. If not passed, determined automatically
--lane <lane> Hex-encoded lane id
--source-host <source-host> Connect to Source node at given host
--source-port <source-port> Connect to Source node websocket server at given port
--source-signer <source-signer>
The SURI of secret key to use when transactions are submitted to the Source node
--source-signer-password <source-signer-password>
The password for the SURI of secret key to use when transactions are submitted to the Source node
--origin <origin>
The origin to use when dispatching the message on the target chain [possible values: Target, Source]
--target-signer <target-signer>
The SURI of secret key to use when transactions are submitted to the Target node
--target-signer-password <target-signer-password>
The password for the SURI of secret key to use when transactions are submitted to the Target node
SUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
remark Make an on-chain remark (comment)
transfer Transfer the specified `amount` of native tokens to a particular `recipient`
```
As can be seen from the output, there are two types of messages available: `remark` and `transfer`.
A remark is some opaque message which will be placed on-chain. For basic testing, a remark is
the easiest to go with.
Usage of the arguments is best explained with an example. Below you can see, how a remark
would look like:
```
substrate-relay send-message millau-to-rialto \
--source-host=127.0.0.1 \
--source-port=10946 \
--source-signer=//Dave \
--target-signer=//Dave \
--lane=00000000 \
--origin Target \
remark
```
Messages are basically regular transactions. That means, they have to be signed. In order
to send a message, you have to control an account private key on both, the source and
the target chain. Those accounts are specified using the `--source-signer` and `--target-signer`
arguments in the example above.
Message delivery and dispatch requires a fee to be paid. In the example above, we have not
specified the `--fee` argument. Hence, the fee will be estimated automatically. Note that
in order to pay the fee, the message sender account has to have sufficient funds available.
The `--origin` argument allows to denote under which authority the message will be dispatched
on the target chain. Accepted values are `Target` and `Source`.
Although not strictly necessary, it is recommended, to use one of the well-known development
accounts (`Alice`, `Bob`, `Charlie`, `Dave`, `Eve`) for message sending. Those accounts are
endowed with funds for fee payment. In addtion, the development `Seed URI` syntax
(like `//Dave`) for the signer can be used, which will remove the need for a password.