Skip to main content
Version: Endpoint V2 Docs

LayerZero Experimental Simple Config Generator

We have developed a new simple config generator which makes use of the @layerzerolabs/metadata-tools package. It is currently in the experimental stage. It allows for a more simplified Layerzero config file.

Here's how to use it:

  1. Install metadata-tools: pnpm add -D @layerzerolabs/metadata-tools

  2. Create a new LZ config file named layerzero.config.ts (or edit your existing one) in the project root and use the examples below as a starting point:

    import {ExecutorOptionType} from '@layerzerolabs/lz-v2-utilities';
    import {OAppEnforcedOption, OmniPointHardhat} from '@layerzerolabs/toolbox-hardhat';
    import {EndpointId} from '@layerzerolabs/lz-definitions';
    import {generateConnectionsConfig} from '@layerzerolabs/metadata-tools';

    const avalancheContract: OmniPointHardhat = {
    eid: EndpointId.AVALANCHE_V2_TESTNET,
    contractName: 'MyOFT',
    };

    const polygonContract: OmniPointHardhat = {
    eid: EndpointId.AMOY_V2_TESTNET,
    contractName: 'MyOFT',
    };

    const EVM_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
    {
    msgType: 1,
    optionType: ExecutorOptionType.LZ_RECEIVE,
    gas: 80000,
    value: 0,
    },
    {
    msgType: 2,
    optionType: ExecutorOptionType.LZ_RECEIVE,
    gas: 80000,
    value: 0,
    },
    {
    msgType: 2,
    optionType: ExecutorOptionType.COMPOSE,
    index: 0,
    gas: 80000,
    value: 0,
    },
    ];

    export default async function () {
    // note: pathways declared here are automatically bidirectional
    // if you declare A,B there's no need to declare B,A
    const connections = await generateConnectionsConfig([
    [
    avalancheContract, // Chain A contract
    polygonContract, // Chain B contract
    [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
    [1, 1], // [A to B confirmations, B to A confirmations]
    [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
    ],
    ]);

    return {
    contracts: [{contract: avalancheContract}, {contract: polygonContract}],
    connections,
    };
    }
    • Note that only the Solana contract object requires address to be specified. Do not specify address for non-Solana contract objects.
    • The above examples contains a minimal mesh with only one pathway (two chains) for demonstration purposes. You are able to add as many pathways as you need into the connections param, via generateConnectionsConfig.
  3. If your pathways include Solana, run the Solana init config command:

npx hardhat lz:oft:solana:init-config --oapp-config layerzero.config.ts --solana-eid <SOLANA_ENDPOINT_ID>
  1. Run the wire command:
npx hardhat lz:oapp:wire --oapp-config layerzero.config.ts

The wire command would process all the transactions required to connect all pathways specified in the LZ Config file. You need to only run this once regardless of how many pathways there are. If you change anything in the LZ Config file, then it should be run again.