> For the complete documentation index, see [llms.txt](https://docs.chiliz.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chiliz.com/ko/gaebal/goseup/omnicheun-token/solana-chiliz-beuriji.md).

# Solana에서 Chiliz Chain으로 브리지

Solana에서 Chiliz Chain으로 기존 토큰을 브릿징하려면 두 개의 별도 스마트 컨트랙트를 작성하고 배포해야 합니다: 토큰이 이미 존재하는 체인(Solana)에 OFT 어댑터를, 대상 체인(Chiliz Chain)에 네이티브 OFT를 배포합니다.

*LayerZero는 OFT 컨트랙트에 대한 자체 QuickStart를 제공합니다:*

{% embed url="<https://docs.layerzero.network/v2/developers/evm/oft/quickstart>" %}

## 사전 요구사항

{% hint style="info" %}
Solana(비EVM)에서 Chiliz Chain(EVM)으로의 브릿징은 이중 스택 개발이 필요합니다.\
두 생태계 모두에 대한 환경과 지갑이 설정되어 있어야 합니다.

따라서 다음 환경이 필요합니다:

* Solana 상호작용의 경우: [Rustup](https://rustup.rs/)(Solana 스마트 컨트랙트는 Rust 프로그래밍 언어 사용), [Solana CLI 및 Anchor 프레임워크](https://solana.com/docs/intro/installation), [LayerZero의 Solana SDK](https://docs.layerzero.network/v2/tools/sdks/solana-sdk).
* Chiliz Chain 상호작용의 경우: Node/npx 및 Hardhat.
  {% endhint %}

이 가이드에는 다음이 필요합니다:

* Chiliz Chain으로 브릿징하려는 기존 SPL 토큰의 민트 주소.
* 각 체인에 대한 Web3 지갑:
  * Solana용: [Solana Mainnet 구성](https://solana.com/docs/references/clusters)이 설정된 [Solflare](https://www.solflare.com/) 지갑. [설정 가이드는 여기](https://www.solflare.com/guides/how-to-set-up-your-first-crypto-wallet-with-solflare-step-by-step/)를 참조하세요.
  * Chiliz Chain용: [Chiliz Chain RPC 구성](/ko/gaebal/gibon/chiliz-chain-yeongyeol/rpc-yeongyeol.md)이 설정된 MetaMask 지갑.
* 컨트랙트 배포 및 메시지 전송을 위한 가스 요금을 지불할 충분한 각 체인의 가스 토큰.
  * Solana: SOL 토큰.
  * Chiliz Chain: CHZ 토큰.

## 1단계: 컨트랙트 개발

{% hint style="info" %}
**"공유 소수점" 과제**

EVM(Ethereum Virtual Machine)은 Solana와 다른 방식으로 토큰 수학을 처리하므로, 브릿지를 건너기 전에 소수점 정밀도를 맞춰야 합니다:

* Solana(소스): 네이티브 SPL 토큰은 일반적으로 9자리 소수점 정밀도를 가집니다.
* Chiliz Chain(목적지): 표준 ERC-20 토큰(및 새 목적지 OFT)은 일반적으로 18자리 소수점을 사용합니다.

변환 없이 Solana에서 Chiliz로 9자리 소수점 페이로드를 보내면, EVM 컨트랙트가 금액을 잘못 해석하여 목적지 체인에서 극히 작은 양의 토큰이 민팅됩니다.

이 수학을 정규화하기 위해, LayerZero는 `sharedDecimals` 구성을 사용합니다. 기본적으로 LayerZero V2 OFT 표준은 `sharedDecimals`를 6으로 설정합니다.

* 사용자가 Solana에서 1.00 SPL 토큰을 브릿징하면, Solana 어댑터가 숫자를 6자리 소수점으로 축소합니다(SPL 토큰의 가장 낮은 3자리 소수점은 "먼지"로 처리되어 사용자 지갑에 안전하게 남습니다).
* 6자리 소수점 메시지 페이로드가 브릿지를 통해 전송됩니다.
* Chiliz Chain 네이티브 OFT가 6자리 소수점 숫자를 받아 ERC-20 토큰을 사용자의 EVM 지갑에 민팅하기 전에 로컬 18자리 소수점으로 확장합니다.

[자세히 알아보기](https://docs.layerzero.network/v2/faq#what-is-shareddecimals-can-i-override-default-shareddecimals-in-an-oft-contract).
{% endhint %}

### Solana 프로그램 개발

토큰이 이미 Solana에 존재하므로, 새 토큰 컨트랙트를 생성할 필요가 없습니다. 대신 Rust로 작성된 Solana OFT 어댑터 프로그램을 배포합니다. 이 프로그램은 사용자가 Chiliz Chain으로 브릿징할 때 SPL 토큰을 안전하게 보관하는 탈중앙화 잠금 상자 역할을 하며, 사용자가 다시 브릿징할 때 토큰을 해제합니다.

LayerZero는 Rust 로직을 처음부터 작성하지 않아도 되도록 사전 구축된 감사된 컨트랙트가 있는 Anchor 워크스페이스를 제공합니다.

#### **1. LayerZero Solana SDK 클론**

공식 LayerZero 개발자 도구 저장소를 클론합니다. Solana OFT 어댑터 예제가 포함되어 있습니다.

터미널을 열고 다음을 실행합니다:

{% code overflow="wrap" %}

```bash
git clone https://github.com/LayerZero-Labs/devtools.git
cd devtools/examples/oft-solana
npm install
```

{% endcode %}

#### **2. Solana 어댑터 프로그램 빌드**

이 디렉토리는 네이티브 OFT와 OFT 어댑터 구현 모두를 포함하는 Anchor 워크스페이스입니다. Rust 프로그램을 빌드하여 고유한 Solana 프로그램 ID를 생성합니다.

{% code overflow="wrap" %}

```bash
anchor build
```

{% endcode %}

빌드가 완료된 후 다음을 실행하여 새 프로그램 ID를 검색합니다:

{% code overflow="wrap" %}

```bash
anchor keys list
```

{% endcode %}

{% hint style="warning" %}
배포 전에 `Anchor.toml` 파일과 `programs/oft-adapter/src/lib.rs` 파일 내의 `declare_id!` 매크로를 새 프로그램 ID로 업데이트해야 합니다.
{% endhint %}

#### **3. Solana Mainnet에 배포**

Solana CLI가 Mainnet용으로 구성되어 있고, 로컬 지갑에 배포 크기와 저장 임대료를 충당할 충분한 $SOL이 있는지 확인하세요.

{% code overflow="wrap" %}

```bash
solana config set --url mainnet-beta
anchor deploy
```

{% endcode %}

#### **4. OFT 어댑터 초기화**

네이티브 OFT(새 민트 생성 필요)와 달리, 어댑터를 초기화하면 새로 배포된 프로그램 ID가 기존 SPL 토큰 민트 주소에 연결됩니다.

LayerZero SDK는 명령줄에서 이 초기화를 처리하기 위한 Hardhat 태스크를 제공합니다. Solana LayerZero Endpoint(`30168`)가 구성되어 있는지 확인하고 실행합니다:

{% code overflow="wrap" lineNumbers="true" %}

```bash
npx hardhat lz:oft-adapter-solana:init --program-id <YOUR_NEW_PROGRAM_ID> --mint <YOUR_EXISTING_SPL_MINT_ADDRESS_BASE58> --shared-decimals 6
```

{% endcode %}

여기서 중요한 파라미터가 있습니다:

* `--mint`: 브릿징하려는 SPL 토큰의 정확한 Base58 민트 주소여야 합니다. 어댑터는 이 토큰에 특화된 에스크로 계정을 생성합니다.
* `--shared-decimals 6`: 이것은 어댑터가 EVM으로 보내기 전에 페이로드를 어떻게 축소할지 결정합니다. Solana 토큰이 9자리 소수점을 갖는 경우, 여기서 6개의 공유 소수점을 남기면 브릿지를 통해 오버플로우 없이 안전하게 변환됩니다.

이 초기화 트랜잭션이 Solana에서 확인되면, 어댑터가 활성화되어 SPL 토큰을 안전하게 잠글 준비가 됩니다!

### Chiliz 컨트랙트 개발

Solana SPL 토큰이 아직 Chiliz Chain에 존재하지 않으므로, 표준 네이티브 `OFT` 컨트랙트를 배포해야 합니다. 이 컨트랙트는 민터 역할을 합니다. Solana 어댑터로부터 검증된 메시지를 받으면 해당 ERC-20 토큰을 민팅하고, 사용자가 Solana로 다시 브릿징할 때 소각합니다.

{% hint style="info" %}
"공유 소수점 과제"에서 설명한 것처럼, Solana 어댑터는 페이로드를 전송하기 전에 6자리 소수점으로 축소합니다.

LayerZero의 EVM 구현은 사용자 지정 스케일링 로직을 작성할 필요가 없습니다. 기본적으로 `OFT.sol` 컨트랙트는 18자리 로컬 소수점과 6자리 공유 소수점을 사용합니다. Solana에서 도착하는 6자리 소수점 페이로드를 자동으로 감지하고 사용자 지갑에 ERC-20 토큰을 민팅하기 전에 표준 18자리 소수점 형식으로 확장합니다.
{% endhint %}

#### Chiliz Chain에서 OFT 배포하기

Hardhat 프로젝트의 `contracts/` 폴더에 `ChilizNativeOFT.sol` 파일을 새로 만드세요:

{% code lineNumbers="true" %}

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.22;

import { OFT } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/OFT.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";

contract ChilizNativeOFT is OFT {
    constructor(
        string memory _name,    // The name of the token (Should match your Solana SPL Token)
        string memory _symbol,  // The symbol of the token (Should match your Solana SPL Token)
        address _lzEndpoint,    // The LayerZero V2 Endpoint address on Chiliz
        address _delegate       // The address capable of making configuration changes
    ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {}
}
```

{% endcode %}

아직 배포하지 마세요! 그러나 다음을 기억하세요:

* `_name`과 `_symbol` 파라미터가 원래 Solana SPL 토큰과 정확히 일치하는지 확인하여 사용자에게 통일된 경험을 제공하세요.
* Chiliz Mainnet에 배포할 때, `_lzEndpoint`로 Chiliz Endpoint V2 주소(`0x6F475642a6e85809B1c36Fa62763669b1b48DD5B`)를 전달합니다.

## 2단계: LayerZero 구성

Solana 어댑터가 초기화되고 Chiliz 네이티브 OFT가 배포 준비가 되었다면, 이제 둘 간의 연결을 구성해야 합니다.

여기서 주요 과제는 주소 형식입니다. LayerZero의 교차 체인 메시징은 모든 피어 주소가 `bytes32`로 형식화되어야 합니다. LayerZero V2 Hardhat 도구는 Base58 Solana 어댑터 프로그램 ID를 자동으로 디코딩하고 표준 EVM 형식으로 패딩하여 이를 처리합니다.

[Simple Config Generator](https://docs.layerzero.network/v2/tools/simple-config)는 양방향 배선을 자동화하고 권장 보안 구성을 자동으로 적용하므로 권장되는 배선 구성 생성 방법입니다.

Hardhat 프로젝트 루트에서 `layerzero.config.ts` 파일을 생성하거나 업데이트하세요:

{% code lineNumbers="true" %}

```typescript
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';

// Define the Contracts
const solanaContract: OmniPointHardhat = {
    eid: EndpointId.SOLANA_V2_MAINNET,
    address: 'YourSolanaAdapterProgramIdHereInBase58', 
    // NOTE: Non-EVMs use 'address' instead of 'contractName'
};

const chilizContract: OmniPointHardhat = {
    eid: EndpointId.CHILIZ_V2_MAINNET,
    contractName: 'ChilizNativeOFT', // Your Hardhat deployment name on EVM
};

// Define Execution Options for Chiliz (EVM Gas)
const EVM_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
    {
        msgType: 1, 
        optionType: ExecutorOptionType.LZ_RECEIVE,
        gas: 200000, // Standard EVM gas units to mint tokens on Chiliz
        value: 0,
    },
];

// Define Execution Options for the return trip to Solana (Compute Units & Lamports)
const SOLANA_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
    {
        msgType: 1, 
        optionType: ExecutorOptionType.LZ_RECEIVE,
        gas: 200000,    // Solana Compute Units to execute the unlock
        value: 2500000, // Lamports to cover the ATA creation rent fee
    },
];

// Export the Generated Configuration
export default async function () {
    return {
        contracts: [
            { contract: solanaContract },
            { contract: chilizContract },
        ],
        connections: await generateConnectionsConfig([
            [
                solanaContract, 
                chilizContract,
                [['LayerZero Labs'], []], 
                [1, 1], 
                [EVM_ENFORCED_OPTIONS, SOLANA_ENFORCED_OPTIONS], // Options [To Chiliz EVM, To Solana SVM]
            ],
        ]),
    };
}
```

{% endcode %}

생성기는 Solana Base58 주소를 Chiliz 스마트 컨트랙트에 필요한 EVM `bytes32` 패딩으로 자동 변환합니다.

## 3단계: 배포 워크플로우

이 단계에서 Solana 어댑터는 이미 컴파일, 배포, 초기화되었습니다(1단계에서 완료). 이제 브릿지의 EVM 측, 즉 네이티브 OFT를 Chiliz Chain에 배포해야 합니다.

Hardhat을 사용하여 이 컨트랙트를 Chiliz Mainnet에 푸시합니다.

### **1. Chiliz 네이티브 OFT 배포 스크립트**

Hardhat 프로젝트의 `deploy/` 디렉토리에 `01_deploy_chiliz_native_oft.ts` 배포 스크립트를 생성합니다. 이 스크립트는 Chiliz에서 새 ERC-20 토큰을 초기화합니다.

{% code lineNumbers="true" %}

```typescript
import { DeployFunction } from 'hardhat-deploy/types';

const deployOFT: DeployFunction = async ({ getNamedAccounts, deployments }) => {
    const { deploy } = deployments;
    const { deployer } = await getNamedAccounts();

    // Token Details (Must strictly match your existing Solana SPL Token)
    const TOKEN_NAME = "My Solana Token";
    const TOKEN_SYMBOL = "SOLTKN";

    // The Chiliz Mainnet Endpoint V2 Address
    const CHILIZ_ENDPOINT_V2 = "0x6F475642a6e85809B1c36Fa62763669b1b48DD5B";

    console.log("Deploying Native OFT to Chiliz Mainnet...");

    await deploy('ChilizNativeOFT', {
        from: deployer,
        args: [
            TOKEN_NAME,         // _name
            TOKEN_SYMBOL,       // _symbol
            CHILIZ_ENDPOINT_V2, // _lzEndpoint
            deployer            // _delegate (Owner)
        ],
        log: true,
        waitConfirmations: 2,
    });
};

export default deployOFT;
deployOFT.tags = ['ChilizNativeOFT'];
```

{% endcode %}

### **2. Solana 프로그램 배포**

참고로, Solana 어댑터는 초기 배포에 Hardhat을 사용하지 않습니다. 이미 다음을 완료했어야 합니다:

1. `anchor build`와 `anchor deploy`를 실행하여 Rust 프로그램을 Solana Mainnet에 푸시했습니다.
2. `lz:oft-adapter-solana:init` 태스크를 실행하여 어댑터를 기존 SPL 토큰 민트에 연결했습니다.
3. 결과 Base58 프로그램 ID를 `layerzero.config.ts` 파일에 복사했습니다.

### **3. Chiliz 배포 실행**

`hardhat.config.ts` 파일에 `chiliz` 네트워크에 대한 RPC URL과 개인 키가 올바르게 구성되어 있는지 확인하세요.

터미널에서 다음 명령을 실행하여 네이티브 OFT를 배포합니다:

{% code lineNumbers="true" %}

```bash
npx hardhat deploy --network chiliz --tags ChilizNativeOFT
```

{% endcode %}

배포가 완료되면, Hardhat이 새로 생성된 Chiliz 컨트랙트 주소를 `deployments/` 폴더에 저장합니다. 이제 Solana(SVM)와 Chiliz Chain(EVM) 모두에 라이브 컨트랙트가 있지만, 아직 서로 통신할 권한이 없습니다.

## 4단계: 배선 및 피어링

이 단계에서 Solana의 Rust 어댑터 프로그램과 Chiliz Chain의 네이티브 EVM OFT가 있습니다. 이들이 안전하게 통신할 수 있도록 신뢰할 수 있는 피어로 "배선"해야 합니다.

반대 방향의 브릿징과 마찬가지로, 완전히 다른 두 가지 가상 머신(SVM 및 EVM)을 다루고 있습니다. 이 때문에 Enforced Options(가스 한도)를 올바르게 구성하는 것이 목적지 체인에서 트랜잭션이 중단되지 않도록 하는 데 매우 중요합니다.

### **Chiliz(EVM)를 위한 "Enforced Options"**

사용자가 Solana에서 Chiliz로 SPL 토큰을 브릿징할 때, LayerZero Executor는 Chiliz 컨트랙트에서 `lzReceive` 함수를 호출하여 ERC-20 토큰을 민팅하기 위한 EVM 가스가 필요합니다.

반대로, 귀환 여정(Chiliz에서 Solana로)의 경우, Executor는 SPL 토큰을 잠금 해제하고 ATA(Associated Token Account)의 임대료를 지불하기 위한 Solana 컴퓨팅 유닛과 Lamport가 필요합니다.

### **구성 업데이트**

Executor가 두 방향 모두에 충분한 가스를 갖도록 보장하려면, 배선 전에 `layerzero.config.ts` 파일에서 이러한 한도를 정의해야 합니다.

구성 파일의 `connections` 배열을 업데이트하여 다음 `enforcedOptions`를 포함시키세요:

{% code lineNumbers="true" %}

```typescript
import { EndpointId } from '@layerzerolabs/lz-definitions';
import { ExecutorOptionType } from '@layerzerolabs/lz-v2-utilities';

// ... (contracts array from Step 3)

    connections: [
        // Pathway 1: Solana -> Chiliz (The primary route)
        {
            from: 'YourSolanaAdapterProgramIdHereInBase58',
            to: 'ChilizNativeOFT',
            config: {
                enforcedOptions: [
                    {
                        msgType: 1, // Standard OFT Transfer
                        optionType: ExecutorOptionType.LZ_RECEIVE,
                        gas: 200000, // Standard EVM Gas to mint tokens on Chiliz
                        value: 0,    // No native drop needed on Chiliz EVM
                    }
                ]
            },
        },
        // Pathway 2: Chiliz -> Solana (The return trip)
        {
            from: 'ChilizNativeOFT',
            to: 'YourSolanaAdapterProgramIdHereInBase58',
            config: {
                enforcedOptions: [
                    {
                        msgType: 1, 
                        optionType: ExecutorOptionType.LZ_RECEIVE,
                        gas: 200000,    // Solana Compute Units for the unlock
                        value: 2500000, // Lamports (covers the ATA rent fee if needed)
                    }
                ]
            },
        },
    ],
// ...
```

{% endcode %}

### **배선 작업 실행**

구성이 저장되면, LayerZero V2 도구가 피어링 프로세스를 자동화합니다. Base58 Solana 주소를 디코딩하여 필요한 `bytes32` EVM 형식으로 패딩하고, 구성 트랜잭션을 Solana Mainnet과 Chiliz Mainnet 모두에 제출합니다.

터미널에서 다음 명령을 실행합니다:

{% code lineNumbers="true" %}

```bash
npx hardhat lz:oapp:wire --oapp-config layerzero.config.ts
```

{% endcode %}

{% hint style="info" %}
CLI가 트랜잭션 확인을 요청합니다. 구성된 Solana 지갑을 사용하여 소스 트랜잭션($SOL 비용)을 제출하고, Hardhat을 사용하여 Chiliz 목적지 트랜잭션($CHZ 비용)을 제출합니다.
{% endhint %}

Chiliz 측에서 LayerZero Hardhat 도구는 자동으로 6개의 필요한 구성 트랜잭션을 생성하고 실행합니다:

1. `setSendLibrary`: 메시지 전송을 위한 V2 MessageLib를 할당합니다.
2. `setReceiveLibrary`: 메시지 수신을 위한 MessageLib를 할당합니다.
3. `setConfig` (Send Library): DVN과 Executor를 구성합니다.
4. `setConfig` (Receive Library): 인바운드 검증을 위한 DVN을 구성합니다.
5. `setEnforcedOptions`: 일관된 실행 파라미터를 보장합니다(특히 귀환 여정에 충분한 Solana 컴퓨팅 유닛이 지불되도록 보장).
6. `setPeer`: Chiliz EID를 Solana 어댑터의 Base58 프로그램 ID(`bytes32`로 변환)에 암호화 방식으로 연결합니다.

Solana SDK는 내부적으로 SVM 측의 동등한 프로그래밍 방식 명령을 처리합니다.

두 트랜잭션이 확인되면, Solana-Chiliz 브릿지가 공식적으로 활성화되고 안전하게 권한 설정됩니다!

## 5단계: 운영 및 테스트

Solana 어댑터가 배포되고, Chiliz 네이티브 OFT가 초기화되고, 둘이 올바르게 배선되었다면, SPL 토큰이 공식적으로 SVM/EVM 경계를 넘을 준비가 되었습니다. 마지막 단계는 Solana에서 Chiliz Chain으로의 테스트 전송을 실행하고 추적하는 것입니다.

### **1) Solana 지갑 준비**

허용선 트랜잭션을 별도로 사전 실행해야 하는 EVM과 달리, Solana는 동일한 트랜잭션 명령 내에서 토큰 승인과 전송을 처리합니다.

그러나 로컬 Solana 지갑(프로젝트에 구성된 것)에 실제로 브릿징하려는 SPL 토큰 잔액이 있는지, 그리고 소스 트랜잭션 수수료와 LayerZero 교차 체인 메시지 수수료를 지불할 충분한 $SOL이 있는지 확인해야 합니다.

**2) Chiliz로 교차 체인 메시지 전송**

LayerZero V2 도구는 소스 체인이 Solana인 경우에도 명령줄에서 직접 OFT 전송을 전송하기 위한 Hardhat 태스크를 포함합니다.

목적지는 표준 EVM 16진수 지갑 주소(예: `0x123...`)입니다. LayerZero CLI는 페이로드의 패딩과 바이트 변환을 자동으로 처리합니다.

터미널에서 다음 명령을 실행합니다:

{% code lineNumbers="true" %}

```bash
npx hardhat lz:oft:send \
  --oapp-config layerzero.config.ts \
  --from-eid 30168 \
  --to-eid 30409 \
  --to <YOUR_CHILIZ_EVM_WALLET_ADDRESS> \
  --amount 10
```

{% endcode %}

{% hint style="info" %}
여기서 일어나는 일:

1. 스크립트가 $SOL로 교차 체인 수수료를 견적합니다.
2. 지갑에서 10개의 SPL 토큰을 Solana 어댑터의 에스크로 계정으로 전송하는 트랜잭션을 구성합니다.
3. 어댑터가 9자리 소수점 SPL 토큰 금액을 6개의 공유 소수점으로 축소합니다.
4. LayerZero Endpoint가 Chiliz Mainnet을 향해 패킷을 전송합니다.
   {% endhint %}

### **3) LayerZero Scan에서 패킷 추적**

Solana에서의 브릿징은 두 가지 완전히 다른 합의 메커니즘 간의 번역과 EVM에서 트랜잭션을 실행하기 전에 SVM 파이널리티를 기다리는 것을 포함하므로, 비동기적 지연이 정상입니다.

이 과정을 실시간으로 추적하려면, CLI 출력에 나타나는 LayerZero Scan 링크를 클릭하세요.

이 도구에 대해 자세히 알아보세요:

{% embed url="<https://docs.layerzero.network/v2/developers/evm/tooling/layerzeroscan>" %}

{% hint style="info" %}
Chiliz 네이티브 OFT는 브릿지에서 들어오는 6자리 소수점 페이로드를 EVM 표준 18자리 소수점으로 자동 확장하므로, 정확히 10개의 전체 토큰을 받습니다.
{% endhint %}

### **4) 중단된 메시지 문제 해결**

Solana에서 확인되었지만 Chiliz에서 실행에 실패한 경우, 가장 일반적인 원인은 EVM 가스 부족 오류입니다.

* `enforcedOptions`(5단계에서 구성)의 `gas` 파라미터가 Chiliz 네트워크가 `lzReceive` 민팅 함수를 처리하기에 충분히 설정되지 않은 경우, LayerZero Executor가 메시지 전달에 실패합니다.
* 해결 방법: 토큰을 잃지 않습니다. LayerZero Scan UI를 통해 중단된 메시지를 수동으로 밀어낼 수 있습니다. EVM 지갑을 Chiliz Chain에 연결하고, 블록 탐색기에서 "Force Resume" 또는 "Execute" 버튼을 클릭하여 민팅을 완료하기 위해 Chiliz 가스 수수료를 직접 지불합니다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.chiliz.com/ko/gaebal/goseup/omnicheun-token/solana-chiliz-beuriji.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
