Rough design for a trustless tipping mechanism for BEEFY relayers:
Data Types on BH:
* `Tips`: Mapping between an outbound message nonce and the beefy relayer tip.
## Flow
### Polkadot->Ethereum:
1. On AH, user signals a BEEFY relayer tip by including this xcm within `ExportMessage`:
```
DepositAsset (WETH, TipAmount) SnowbridgeBeefyTipsAddress
```
2. When the forwarded XCM is received on BH, set `Tips[Message.Nonce] = TipAmount`. Export the message for delivery to Polkadot
3. When an inbound message is processed by the Gateway contract on the Ethereum, the `InboundMessageDispatched` event includes the address of the BEEFY relayer that provided the BEEFY state used to prove the message.
### Ethereum->Polkadot:
1. When proof-of-delivery for the user message is sent back to BridgeHub, the tip is rewarded to the beefy relayer's account on AH. In Snowbridge V2, this can be handled by the `rewards` pallet.
# Frontend UX
The frontend should calculate a suitable tip based on current bridge traffic, and with awareness that there is a free BEEFY consensus update every 4 hours (the mandatory beefy commitment at the start of each session)