UA Custom Configuration Overview
User Application contracts may set their own configuration for block confirmation, send version, relayer, oracle, etc.
When a UA wishes to configure their own block confirmations both the outboundBlockConfirmations of the source and the inboundBlockConfirmations of the destination must be configured and match.
How to Configure
A User Application (UA) can use non-default protocol settings, and to do so it must implement the interface ILayerZeroUserApplicationConfig. The UA may then manually update its ApplicationConfig . See examples below as well as the CONFIG_TYPES.
This function would be implemented in your UA. This is included in LZapp.sol if you inherit from it.
function setConfig(
uint16 _version,
uint16 _chainId,
uint _configType,
bytes calldata _config
) external override onlyOwner {
lzEndpoint.setConfig(_version, _chainId, _configType, _config);
}
Config Types
| Type | Value |
|---|---|
CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION | 1 |
CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS | 2 |
CONFIG_TYPE_RELAYER | 3 |
CONFIG_TYPE_OUTBOUND_PROOF_TYPE | 4 |
CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS | 5 |
CONFIG_TYPE_ORACLE | 6 |
info
The config should be abi encoded.
ethers.utils.defaultAbiCoder.encode([configValueType], [newValue]);
Set: Inbound Proof Library
| Config | Definition |
|---|---|
1 | MPT |
2 | Feather Proof |
let config = ethers.utils.defaultAbiCoder.encode(['uint16'], [inboundProofLibraryVersion]);
await UA.setConfig(0, dstChainId, CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION, config);
info
CONFIG_TYPE_INBOUND_PROOF_LIBRARY_VERSION is 1 in this casse
Set: Inbound Block Confirmations
| Config | Definition |
|---|---|
42 | How many block confirmations is needed for inbound block confirmations |
let config = ethers.utils.defaultAbiCoder.encode(['uint16'], [42]);
await UA.setConfig(0, dstChainId, CONFIG_TYPE_INBOUND_BLOCK_CONFIRMATIONS, config);
Set: Relayer
| Config | Definition |
|---|---|
relayerAddr | Which relayer you want to use |
let config = ethers.utils.solidityPack(['address'], [relayerAddr]);
await UA.setConfig(0, dstChainId, CONFIG_TYPE_RELAYER, config);
Set: Outbound Proof Type/LibraryVersion
| Config | Definition |
|---|---|
1 | MPT |
2 | Feather Proof |
let config = ethers.utils.defaultAbiCoder.encode(['uint16'], [outboundProofType]);
await UA.setConfig(0, dstChainId, CONFIG_TYPE_OUTBOUND_PROOF_TYPE, config);
Set: Outbound Block Confirmations
| Config | Definition |
|---|---|
42 | How many block confirmations is needed for outbound block confirmations |
let config = ethers.utils.defaultAbiCoder.encode(
['uint16'],
[17], // outbound block confirmations
);
await UA.setConfig(0, dstChainId, CONFIG_TYPE_OUTBOUND_BLOCK_CONFIRMATIONS, config);