SettleLab
전체 코스
LESSON 05Cross-chain and L2

Cross-chain Intents와 ERC-7683

심화45분근거 5

학습 결과

  • intent 기반 크로스체인 실행 모델을 설명한다.
  • solver, escrow, settlement, dispute 위험을 분리한다.
  • ERC-7683의 resolver-centric 표준화 모델과 draft 상태를 제품 가정에 반영한다.

선행 조건

  • CCTP와 브릿지 신뢰 모델

완료 기준

  • transaction, CCTP/bridge flow, intent/order execution의 차이를 설명했다.
  • ERC-7683의 order, solver, payload, resolver, assumption 개념을 checkout 설계에 연결했다.
  • solver 실패와 settlement dispute의 책임 분배를 표로 만들었다.

Cross-chain Intents와 ERC-7683

도입

cross-chain intent는 사용자가 "어느 bridge를 눌러야 하는가"를 직접 고르는 방식에서 벗어나, 원하는 결과를 주문으로 표현하고 solver가 여러 chain의 실행과 정산을 맡는 모델이다. 예를 들어 사용자는 "Ethereum의 USDC를 써서 Base의 merchant에게 100 USDC를 지급"이라는 결과만 승인하고, solver가 destination 지급과 source 정산을 연결할 수 있다.

이 모델은 UX를 단순하게 만들지만 위험을 없애지는 않는다. bridge 선택 위험이 solver 선택, resolver 신뢰, payment 조건, timeout/refund, settlement dispute로 이동한다. 이 강의에서는 intent를 "마법 같은 사용자 경험"이 아니라 새로운 리스크 분배 방식으로 읽는다.

학습 목표

  • transaction 직접 실행과 intent/order 기반 실행의 차이를 설명한다.
  • ERC-7683의 order, solver, payload, resolver 개념을 checkout 설계에 연결한다.
  • solver가 destination에서 지급했지만 origin settlement가 실패하는 시나리오를 다룬다.
  • resolver vetting, assumption validation, timeout/refund 정책을 만든다.

개념 설명

판단 트리가로 스크롤 · 크게 보기 지원
Cross-chain Intents와 ERC-7683 판단 트리이 시각화는 cross-chain 결제와 L2 운영에서 진행, 보류, 재설계 결정을 가르는 질문이 무엇인지를 보여주며, 'Cross-chain Intents와 ERC-7683'에서 남겨야 할 설계 증거를 좁힌다.
시작 질문

Cross-chain Intents와 ERC-7683을 제품 설계에 넣어도 되는가?

진행

finality와 attestation 조건이 명확한가

Intent order risk sheet 작성
보류

route별 trust assumption이 분리되는가

가정과 실패 상태를 보강한다.
차단

timeout/refund가 설계되는가

캡스톤 risk register에 차단 사유를 남긴다.
크게 보기
시작 질문

Cross-chain Intents와 ERC-7683을 제품 설계에 넣어도 되는가?

진행

finality와 attestation 조건이 명확한가

Intent order risk sheet 작성
보류

route별 trust assumption이 분리되는가

가정과 실패 상태를 보강한다.
차단

timeout/refund가 설계되는가

캡스톤 risk register에 차단 사유를 남긴다.

1. Intent는 실행 방법이 아니라 원하는 결과를 표현한다

표 자료가로 스크롤 · 크게 보기 지원
방식사용자가 하는 일실행 책임실패가 드러나는 위치
직접 transaction특정 chain, contract, calldata를 직접 승인사용자 wallet과 apptransaction revert, gas 부족
Bridge/CCTP flowsource transfer/burn과 destination receive를 진행bridge/CCTP integratorattestation, mint, destination tx
Intent/order원하는 결과와 조건을 서명하거나 제출solver/filler와 settlerfill 실패, settlement dispute, timeout
크게 보기
방식사용자가 하는 일실행 책임실패가 드러나는 위치
직접 transaction특정 chain, contract, calldata를 직접 승인사용자 wallet과 apptransaction revert, gas 부족
Bridge/CCTP flowsource transfer/burn과 destination receive를 진행bridge/CCTP integratorattestation, mint, destination tx
Intent/order원하는 결과와 조건을 서명하거나 제출solver/filler와 settlerfill 실패, settlement dispute, timeout

intent 모델은 사용자의 행동을 줄인다. 대신 제품은 solver가 실제로 무엇을 했는지, 어떤 조건에서 결제가 완료되는지, solver가 손실을 감수하는 구간이 어디인지 기록해야 한다.

2. ERC-7683은 solver-facing interface를 표준화하려는 draft ERC다

2026년 5월 14일 확인 기준 ERC-7683은 draft 상태다. 이 ERC는 intent protocol 자체를 하나로 통일하기보다, solver가 protocol-specific payload를 공통 order representation으로 해석할 수 있게 resolver를 중심에 둔다.

표 자료가로 스크롤 · 크게 보기 지원
용어강의에서의 의미검수 질문
Order사용자가 원하는 결과와 지급 조건어떤 token, chain, recipient, deadline을 포함하는가
Solver/Fillerorder 요구사항을 실행하고 보상을 받는 actor어떤 자본과 권한으로 destination 지급을 하는가
Payloadprotocol-specific order encodingapp이 저장하고 재현할 수 있는가
Resolverpayload를 solver가 읽을 수 있는 order로 변환/검증resolver address를 누가 검수하고 whitelist하는가
Assumptionresolver가 자체 검증하지 못해 solver가 확인해야 하는 조건chain liveness, token behavior, oracle, bridge assumption이 명시되는가
크게 보기
용어강의에서의 의미검수 질문
Order사용자가 원하는 결과와 지급 조건어떤 token, chain, recipient, deadline을 포함하는가
Solver/Fillerorder 요구사항을 실행하고 보상을 받는 actor어떤 자본과 권한으로 destination 지급을 하는가
Payloadprotocol-specific order encodingapp이 저장하고 재현할 수 있는가
Resolverpayload를 solver가 읽을 수 있는 order로 변환/검증resolver address를 누가 검수하고 whitelist하는가
Assumptionresolver가 자체 검증하지 못해 solver가 확인해야 하는 조건chain liveness, token behavior, oracle, bridge assumption이 명시되는가

draft 표준을 production SLA의 근거로 쓰면 안 된다. 표준화 방향을 이해하되, 실제 채택은 구현체, audit, resolver whitelist, solver market, monitoring을 따로 본다.

3. Intent 결제 시퀀스

흐름도가로 스크롤 · 크게 보기 지원
강의 흐름도상태, 책임, 검증 지점을 순서대로 읽기 위한 다이어그램이다.
크게 보기

제품 DB는 최소한 OrderCreated, Resolved, DestinationFilled, FillProofObserved, OriginSettled, TimedOut, Refunded, Disputed를 분리해야 한다. 사용자에게는 "결제 완료"로 보이더라도 solver settlement가 뒤에서 실패할 수 있기 때문이다.

4. CCTP, bridge, intent의 차이

표 자료가로 스크롤 · 크게 보기 지원
모델핵심좋은 경우조심할 위험
CCTPUSDC burn/mint와 attestationnative USDC 이동attestation 지연, domain support, fee/finality 선택
Bridgelock/mint 또는 liquidity route다양한 asset 이동bridge exploit, wrapped asset, liquidity route 실패
Intent결과를 order로 표현하고 solver가 실행UX 추상화, route competition, solver liquidityresolver trust, solver default, fill proof, settlement dispute
크게 보기
모델핵심좋은 경우조심할 위험
CCTPUSDC burn/mint와 attestationnative USDC 이동attestation 지연, domain support, fee/finality 선택
Bridgelock/mint 또는 liquidity route다양한 asset 이동bridge exploit, wrapped asset, liquidity route 실패
Intent결과를 order로 표현하고 solver가 실행UX 추상화, route competition, solver liquidityresolver trust, solver default, fill proof, settlement dispute

intent는 CCTP나 bridge를 대체하는 단일 기술이 아니다. solver가 내부적으로 CCTP, bridge, DEX, inventory를 조합할 수 있다. 따라서 app은 "어떤 route를 썼는가"보다 "사용자에게 약속한 결과가 증명되었는가"를 기준으로 상태를 관리해야 한다.

코드로 확인하기

위 신뢰 모델을 코드와 운영 규칙으로 확인한다. 메시지 상태, 최종성, 재시도, 관측 지점이 어디서 분리되는지 보는 것이 목적이다.

컨트랙트ERC-7683 GaslessCrossChainOrder 구조와 IOriginSettler

ERC-7683은 cross-chain order의 직렬화·서명·resolve를 표준화한다. 핵심은 사용자가 서명한 order를 resolver가 해석해 fill 가능한 형태로 풀고, settler가 사용자 자금을 escrow한 뒤 solver가 destination을 채우는 흐름이다.

CODE SURFACEsolidity
struct GaslessCrossChainOrder {    address originSettler;    address user;    uint256 nonce;    uint256 originChainId;    uint32  openDeadline;    uint32  fillDeadline;    bytes32 orderDataType;    bytes   orderData;            // resolver-specific payload}struct ResolvedCrossChainOrder {    address user;    uint256 originChainId;    uint32  openDeadline;    uint32  fillDeadline;    bytes32 orderId;    Output[] maxSpent;            // 사용자가 지출 가능한 최대    Output[] minReceived;         // 사용자가 받아야 할 최소    FillInstruction[] fillInstructions;}interface IOriginSettler {    function openFor(GaslessCrossChainOrder calldata order, bytes calldata signature, bytes calldata originFillerData) external;    function resolveFor(GaslessCrossChainOrder calldata order, bytes calldata originFillerData)        external view returns (ResolvedCrossChainOrder memory);}

백엔드Resolver vetting — order 의 minReceived 가드

resolver가 반환한 minReceived가 사용자 의도와 일치하는지 검증. 잘못된 resolver를 신뢰하면 자금이 잘못된 곳으로 흐를 수 있다.

CODE SURFACEtypescript
type UserIntent = {  fromChainId: number;  toChainId: number;  tokenIn: `0x${string}`;  amountIn: bigint;  tokenOut: `0x${string}`;  minOut: bigint;  recipient: `0x${string}`;  fillDeadline: number;};export function verifyResolvedOrder(intent: UserIntent, resolved: any): { ok: boolean; reason?: string } {  const minOnDest = resolved.minReceived.find(    (o: any) => o.chainId === intent.toChainId && o.token.toLowerCase() === intent.tokenOut.toLowerCase()  );  if (!minOnDest) return { ok: false, reason: "no output on intended destination" };  if (BigInt(minOnDest.amount) < intent.minOut) {    return { ok: false, reason: `min received ${minOnDest.amount} < user expected ${intent.minOut}` };  }  if (minOnDest.recipient.toLowerCase() !== intent.recipient.toLowerCase()) {    return { ok: false, reason: "recipient mismatch" };  }  if (resolved.fillDeadline < intent.fillDeadline) {    return { ok: false, reason: "deadline tighter than requested" };  }  return { ok: true };}

백엔드Intent payment 상태머신 — solver default 까지 표현

결제 상태는 escrow 잡힘부터 fill verification, settle 완료, 그리고 solver default 처리까지 분리한다.

CODE SURFACEtypescript
type IntentStatus =  | "Opened"            // origin settler 가 사용자 자금 escrow  | "FillPending"       // solver 가 destination 채우는 중  | "Filled"            // destination 출고 확인  | "Settled"           // origin escrow 가 solver 에게 정산  | "Expired"           // fillDeadline 경과, solver 미실행  | "Refunded"          // 사용자에게 자금 반환 완료  | "Disputed";         // fill claim 과 실제 destination 상태가 불일치const ALLOWED: Record<IntentStatus, IntentStatus[]> = {  Opened:      ["FillPending", "Expired"],  FillPending: ["Filled", "Expired", "Disputed"],  Filled:      ["Settled", "Disputed"],  Settled:     [],  Expired:     ["Refunded"],  Refunded:    [],  Disputed:    ["Settled", "Refunded"]};export function assertIntentTransition(from: IntentStatus, to: IntentStatus) {  if (!ALLOWED[from].includes(to)) throw new Error(`Forbidden ${from} -> ${to}`);}

강의 포인트

표 자료가로 스크롤 · 크게 보기 지원
관점수업 중 확인할 질문산출물
order사용자가 서명한 결과와 조건이 충분히 명확한가order schema
resolver누가 payload를 해석하고 어떤 assumption을 남기는가resolver vetting policy
solversolver 실패가 사용자, merchant, app, solver 중 누구에게 귀속되는가risk allocation table
settlementdestination fill과 origin settlement가 언제 닫히는가intent payment state machine
timeoutdeadline 이후 refund/cancel/dispute가 가능한가timeout/refund runbook
크게 보기
관점수업 중 확인할 질문산출물
order사용자가 서명한 결과와 조건이 충분히 명확한가order schema
resolver누가 payload를 해석하고 어떤 assumption을 남기는가resolver vetting policy
solversolver 실패가 사용자, merchant, app, solver 중 누구에게 귀속되는가risk allocation table
settlementdestination fill과 origin settlement가 언제 닫히는가intent payment state machine
timeoutdeadline 이후 refund/cancel/dispute가 가능한가timeout/refund runbook

실무 예시

백엔드[CONTRACT] USDC checkout intent 상태머신

표 자료가로 스크롤 · 크게 보기 지원
상태의미완료 조건실패 처리
OrderCreated사용자 intent/order 생성payload와 payment ID 저장malformed order reject
Resolvedresolver가 steps/payments/assumptions 반환resolver whitelist와 simulation 통과resolver mismatch
DestinationPaidsolver가 merchant에게 destination USDC 지급destination transfer event 확인wrong recipient dispute
OriginClaimedsolver가 source settlement 청구proof/claim tx 확인claim revert
Settledsolver 지급과 merchant ledger가 모두 닫힘source/destination ledger reconciliationnone
TimedOutdeadline 초과timeout clock과 no fill proofrefund/cancel
Disputedfill proof나 recipient가 불일치operator reviewmanual settlement/refund
크게 보기
상태의미완료 조건실패 처리
OrderCreated사용자 intent/order 생성payload와 payment ID 저장malformed order reject
Resolvedresolver가 steps/payments/assumptions 반환resolver whitelist와 simulation 통과resolver mismatch
DestinationPaidsolver가 merchant에게 destination USDC 지급destination transfer event 확인wrong recipient dispute
OriginClaimedsolver가 source settlement 청구proof/claim tx 확인claim revert
Settledsolver 지급과 merchant ledger가 모두 닫힘source/destination ledger reconciliationnone
TimedOutdeadline 초과timeout clock과 no fill proofrefund/cancel
Disputedfill proof나 recipient가 불일치operator reviewmanual settlement/refund

Solver 위험 분배표

표 자료가로 스크롤 · 크게 보기 지원
위험누가 먼저 손실을 보나제품에서 필요한 장치
destination paid, origin settlement 실패solverclaim proof, retry, dispute window
solver가 잘못된 recipient에게 지급solver 또는 apprecipient binding, payment ID, receiver validation
order price가 실행 중 불리해짐solver 또는 userslippage bound, deadline, quote expiration
resolver가 잘못된 order를 반환solver/appresolver audit, whitelist, assumption validation
chain liveness 문제user/app/solver 모두route disable, timeout, refund copy
크게 보기
위험누가 먼저 손실을 보나제품에서 필요한 장치
destination paid, origin settlement 실패solverclaim proof, retry, dispute window
solver가 잘못된 recipient에게 지급solver 또는 apprecipient binding, payment ID, receiver validation
order price가 실행 중 불리해짐solver 또는 userslippage bound, deadline, quote expiration
resolver가 잘못된 order를 반환solver/appresolver audit, whitelist, assumption validation
chain liveness 문제user/app/solver 모두route disable, timeout, refund copy

흔한 오해와 실패 시나리오

표 자료가로 스크롤 · 크게 보기 지원
오해실제 기준
intent는 bridge UX를 자동으로 안전하게 만든다route 위험이 solver/resolver/settlement 위험으로 이동한다
ERC-7683이면 구현체가 모두 호환된다draft ERC이며 resolver와 protocol-specific payload 검수가 필요하다
solver가 destination 지급을 했으면 결제가 끝난다origin settlement와 dispute window까지 닫아야 한다
resolver가 onchain이면 자동으로 신뢰 가능하다resolver는 trust point이므로 audit, whitelist, monitoring이 필요하다
timeout은 실패 처리만 있으면 된다refund, cancel, partial fill, support copy를 product state로 설계해야 한다
크게 보기
오해실제 기준
intent는 bridge UX를 자동으로 안전하게 만든다route 위험이 solver/resolver/settlement 위험으로 이동한다
ERC-7683이면 구현체가 모두 호환된다draft ERC이며 resolver와 protocol-specific payload 검수가 필요하다
solver가 destination 지급을 했으면 결제가 끝난다origin settlement와 dispute window까지 닫아야 한다
resolver가 onchain이면 자동으로 신뢰 가능하다resolver는 trust point이므로 audit, whitelist, monitoring이 필요하다
timeout은 실패 처리만 있으면 된다refund, cancel, partial fill, support copy를 product state로 설계해야 한다

실습 과제

  1. 컨트랙트Intent order risk sheet 작성: order payload, resolver, solver, payment, deadline, revert policy, assumption, refund/cancel 조건을 표로 정리한다.
  2. 백엔드USDC checkout intent 상태머신 설계: source order opened, destination paid, proof observed, origin settled, timeout, refund, dispute 상태를 포함한 USDC checkout intent 상태머신을 작성한다.
  3. 운영Resolver vetting policy 만들기: 어떤 resolver를 solver/app이 신뢰할 수 있는지 audit, address allowlist, assumption validation, simulation, monitoring 기준을 정한다.

완료 기준

  1. transaction, CCTP/bridge flow, intent/order execution의 차이를 설명했다.
  2. ERC-7683의 order, solver, payload, resolver, assumption 개념을 checkout 설계에 연결했다.
  3. solver 실패와 settlement dispute의 책임 분배를 표로 만들었다.
  4. timeout/refund/dispute 상태를 포함한 payment state machine을 작성했다.

근거 자료

Final checkpoint

읽기를 마쳤다면 여기서 기록한다

아래 버튼은 읽기 진도를 저장한다. 체크리스트, 과제, 랩 산출물은 위 Workbook에서 따로 관리한다.

  • transaction, CCTP/bridge flow, intent/order execution의 차이를 설명했다.
  • ERC-7683의 order, solver, payload, resolver, assumption 개념을 checkout 설계에 연결했다.
  • solver 실패와 settlement dispute의 책임 분배를 표로 만들었다.

학습 자료 근거

Cross chain Intents ERC7683
intent role model, payment sequence, CCTP/bridge 비교, solver failure 과제를 강의 본문으로 재구성했다.
내부 참고 문서
ERC-7683: Cross Chain Intents
https://eips.ethereum.org/EIPS/eip-7683
ERC-7683 FAQ
https://www.erc7683.org/faq
ERC-4337
https://eips.ethereum.org/EIPS/eip-4337
EIP-7702
https://eips.ethereum.org/EIPS/eip-7702