핵심 요약
Chainlink CCIP(Cross-Chain Interoperability Protocol)는 체인 간 토큰 전송과 메시지 전달을 표준화한 프로토콜입니다. 2026년 현재 20개 이상의 체인을 지원하며, 탈중앙화 오라클 네트워크를 통해 브릿지 해킹의 주요 취약점인 검증자 집중화 문제를 해결합니다.
Chainlink CCIP(Cross-Chain Interoperability Protocol)는 체인 간 토큰 전송과 메시지 전달을 표준화한 프로토콜입니다. 2026년 현재 20개 이상의 체인을 지원하며, 탈중앙화 오라클 네트워크를 통해 브릿지 해킹의 주요 취약점인 검증자 집중화 문제를 해결합니다.
CCIP 아키텍처 핵심 컴포넌트
Router — 개발자 진입점 컨트랙트
OnRamp / OffRamp — 소스 체인 수신 / 목적지 체인 실행
Committing DON — 소스 이벤트 모니터링 후 목적지에 루트 커밋
Executing DON — 목적지 체인 메시지 실행 트리거
Risk Mgmt Network — 독립 이중 검증, 비정상 패턴 감지
OnRamp / OffRamp — 소스 체인 수신 / 목적지 체인 실행
Committing DON — 소스 이벤트 모니터링 후 목적지에 루트 커밋
Executing DON — 목적지 체인 메시지 실행 트리거
Risk Mgmt Network — 독립 이중 검증, 비정상 패턴 감지
메시지 전송 핵심 코드 (소스 체인)
// EVM2AnyMessage 구성 후 전송
Client.EVM2AnyMessage memory msg = Client.EVM2AnyMessage({
receiver: abi.encode(receiver),
data: abi.encode(text),
tokenAmounts: new Client.EVMTokenAmount[](0),
feeToken: address(linkToken),
extraArgs: Client._argsToBytes(EVMExtraArgsV1({gasLimit: 200_000}))
});
uint256 fee = router.getFee(destChainSelector, msg);
linkToken.approve(address(router), fee);
bytes32 msgId = router.ccipSend(destChainSelector, msg);
Client.EVM2AnyMessage memory msg = Client.EVM2AnyMessage({
receiver: abi.encode(receiver),
data: abi.encode(text),
tokenAmounts: new Client.EVMTokenAmount[](0),
feeToken: address(linkToken),
extraArgs: Client._argsToBytes(EVMExtraArgsV1({gasLimit: 200_000}))
});
uint256 fee = router.getFee(destChainSelector, msg);
linkToken.approve(address(router), fee);
bytes32 msgId = router.ccipSend(destChainSelector, msg);
수신 컨트랙트 핵심 패턴
function _ccipReceive(Client.Any2EVMMessage memory m) internal override {
require(allowedSources[m.sourceChainSelector], “blocked”);
address sender = abi.decode(m.sender, (address));
require(allowedSenders[sender], “unauthorized”);
// 비즈니스 로직 처리
}
require(allowedSources[m.sourceChainSelector], “blocked”);
address sender = abi.decode(m.sender, (address));
require(allowedSenders[sender], “unauthorized”);
// 비즈니스 로직 처리
}
토큰 전송 방식 비교
| 방식 | Lock & Mint | Burn & Mint |
|---|---|---|
| 소스/목적지 | 잠금 → 래핑 발행 | 소각 → 원본 발행 |
| 유동성 풀 | 소스 체인 집중 | 불필요 |
| 적합 대상 | 기존 토큰 (수정불가) | 신규 크로스체인 토큰 |
보안 주의사항
– _ccipReceive에서 소스 체인 셀렉터와 발신자 주소 화이트리스트 검증 필수
– 재진입 공격 방어 (nonReentrant) 적용
– gasLimit 부족 시 목적지 실행 실패 후 메시지 손실 가능
– 지원 체인(2026-04): Ethereum, Arbitrum, Base, Polygon, Avalanche, BNB, zkSync Era, Linea 등 20개 이상
– _ccipReceive에서 소스 체인 셀렉터와 발신자 주소 화이트리스트 검증 필수
– 재진입 공격 방어 (nonReentrant) 적용
– gasLimit 부족 시 목적지 실행 실패 후 메시지 손실 가능
– 지원 체인(2026-04): Ethereum, Arbitrum, Base, Polygon, Avalanche, BNB, zkSync Era, Linea 등 20개 이상