전체 글 보기
7 분 소요

TON → Ethereum 크로스체인 스왑: 어떻게 작동하는가

원자적 HTLC 에스크로로 구현하는 TON → Ethereum 크로스체인 스왑: quote, build, track, disclose, refund. 비수탁 방식이라 키와 자금은 여러분이 그대로 보유합니다.

크로스체인 스왑TONEthereumHTLC 에스크로비수탁MCP

이런 상황을 상상해 보십시오. 여러분의 AI 에이전트는 TON에 USDT를 들고 있는데, 사용자가 "Ethereum의 ETH로 바꿔 줘"라고 요청합니다. 일반적인 경로는 이렇습니다. 중앙화 거래소로 자금을 보내고, 입금이 반영되기를 기다리고, 손으로 직접 교환하고, 원하는 네트워크로 출금합니다. 에이전트는 이렇게 하지 못합니다. 거래소 계정도 없고, KYC도 없으며, 무엇보다 단계마다 누군가가 여러분의 자금을 쥐고 있기 때문입니다. 그 사슬 중 한 고리라도 멈추면 자산은 두 네트워크 사이에 갇히고, 돌려받는다는 보장조차 없습니다.

업계의 고전적인 답은 중개자를 낀 브리지, 즉 자금을 "잠시 맡아 두는" 곳에 넘기는 방식입니다. 수억 달러 규모로 해킹당하는 것이 바로 이런 브리지들입니다. 자율 에이전트에게는 받아들일 수 없는 선택지입니다. 에이전트에게 필요한 것은 거래가 통째로 성사되거나 아니면 각자가 자기 자금을 그대로 돌려받는 교환, 그것도 신뢰할 중개자 없이 이루어지는 교환입니다. 원자적 HTLC 에스크로를 이용한 TON → Ethereum 크로스체인 스왑이 정확히 이 문제를 해결합니다. 아래에서는 MCP 서버 TONNode의 실제 도구를 가지고 그 내부 구조를 뜯어보겠습니다. 수탁도 없고, 마법도 없습니다.

TON → Ethereum 크로스체인 스왑이란 무엇이며, 왜 원자적인가

크로스체인 스왑은 한 네트워크의 자산을 다른 네트워크의 자산과 교환하는 일입니다. 문제는 두 작업을 하나의 트랜잭션으로 기록해 줄 공통 블록체인이 없다는 점입니다. TON은 Ethereum의 트랜잭션을 물리적으로 "볼" 수 없고, Ethereum도 TON의 트랜잭션을 보지 못합니다. 공통의 심판이 없습니다. 그래서 "내가 보냈으니 너도 보내"라는 순진한 방식은 곧바로 신뢰 문제에 부딪힙니다. 먼저 움직이는 쪽이 위험을 떠안습니다.

여기서 핵심 단어는 원자성입니다. 원자적 연산은 통째로 실행되거나 아예 실행되지 않으며, "절반만" 되는 중간 상태가 없습니다. 스왑에 적용하면 이는 확고한 보장이 됩니다. 양쪽이 모두 이행되어 각자가 기대한 것을 받거나, 거래가 롤백되어 각자가 원래 자금을 그대로 되찾거나 둘 중 하나입니다. "나는 줬는데 나에게는 오지 않은" 상태는 결과로서 아예 존재하지 않습니다.

이것은 중개자에 대한 신뢰가 아니라 암호학과 타임아웃으로 달성됩니다. 바로 HTLC라는 메커니즘입니다.

원자적 HTLC 에스크로를 쉬운 말로: 해시, 비밀값, 타임아웃

HTLC는 Hash Time-Locked Contract, 즉 "해시와 시간으로 잠기는 컨트랙트"의 약자입니다. 어렵게 들리지만 발상 자체는 일상적입니다. 자물쇠가 두 개 달린 은행 대여금고를 떠올려 보십시오.

  • 해시 자물쇠. 금고는 비밀값을 아는 사람에게만 열립니다. 여기서 비밀값이란 길고 무작위한 문자열 S입니다. 금고 안에 놓이는 것은 비밀값 자체가 아니라 그 "지문", 즉 해시 H = hash(S)입니다. 지문에서 비밀값을 되돌릴 수는 없지만, 비밀값을 보면 누구나 그 지문이 바로 그 값에서 나왔음을 즉시 검증할 수 있습니다. 자금은 "이 해시 아래에" 에스크로로 잠깁니다.
  • 시간 자물쇠(타임아웃). 정해진 시간 안에 비밀값이 끝내 공개되지 않으면, 금고는 자동으로 잠금이 풀려 안에 든 것이 금고를 채운 사람에게 되돌아갑니다.

두 네트워크를 엮을 때 이것이 어떻게 원자성을 만들어 내는지 보겠습니다.

  1. TON 쪽에서 여러분의 GRAM/USDT가 해시 H 아래 에스크로에 잠깁니다.
  2. 거래 상대방(마켓 메이커)이 그 잠금을 확인하고, 같은 H 아래 Ethereum에 에스크로를 대칭으로 겁니다. 여러분이 받을 ETH를 예약해 두는 것입니다.
  3. Ethereum에서 ETH를 가져가려면 여러분이 비밀값 S를 공개해야 합니다. 그런데 S를 공개하는 순간 그 값은 블록체인에 공개적으로 남습니다.
  4. 거래 상대방은 S를 보고, 바로 그 비밀값으로 TON 에스크로에 있는 여러분의 자금을 가져갑니다.

비밀값은 거래의 양쪽을 통틀어 단 하나뿐입니다. ETH를 받기 위해 그 값이 공개되는 순간, TON 쪽 잠금도 자동으로 풀립니다. 한쪽만 열어 가져가고 다른 쪽은 넘기지 않는 일은 불가능합니다. 반대로 무언가 잘못되어 S가 공개되지 않으면, 타임아웃이 지난 뒤 양쪽 모두 환불을 진행합니다. 여기서 "원자성"이라는 말이 나옵니다. 세 번째 결말은 없습니다. 이 구조는 설계상 중개 서버에 대한 어떠한 신뢰도 요구하지 않습니다.

다섯 개 도구로 이루어진 전체 흐름: quote → build → track → disclose/refund

TONNode에서는 HTLC 교환 전체가 다섯 개의 도구로 분해되어 있습니다. 호출 순서는 HTLC의 논리를 하나도 빠짐없이 그대로 따릅니다.

1. get_crosschain_quote — 견적

가장 먼저 조건을 확인합니다. 유동성과 수수료를 감안했을 때, TON에 있는 자금으로 Ethereum에서 ETH(또는 USDT)를 얼마나 받게 되는지 말입니다. 환율, 예상 수령액, 경로 파라미터가 반환됩니다. 이것은 읽기 작업이며, 아무것도 잠그지 않고 아무것도 서명하지 않습니다.

2. build_crosschain_swap_tx — 서명되지 않은 HTLC 에스크로 트랜잭션 + 비밀값

거래가 태어나는 지점입니다. 이 도구는 비밀값의 해시 아래 여러분의 자금을 HTLC 에스크로에 잠그는 서명되지 않은 트랜잭션과, 그와 별도로 비밀값 S 자체를 반환합니다. 결정적인 점은 이것입니다. 비밀값은 서버에 남지 않고 여러분에게 전달됩니다. 트랜잭션은 TonConnect를 통해 여러분의 지갑이 서명하며, 서버는 서명에 손도 대지 않습니다. 나중에 거래를 마무리하기 위해 공개하게 될 값이 바로 이 비밀값이고, 거래가 멈춰 버리면 비밀값을 공개하지 않아도 타임아웃에 따라 잠겼던 자금이 여러분에게 돌아옵니다.

3. track_crosschain_swap — 양쪽 네트워크의 거래 단계

에스크로 트랜잭션에 서명해서 전송하고 나면, 거래가 지금 어디쯤 와 있는지 파악해야 합니다. TON에서 자금이 잠겼는지, Ethereum 쪽에 대응 에스크로가 나타났는지, 정산 준비가 끝났는지 말입니다. track_crosschain_swap두 네트워크의 단계를 한 번에 보여 줍니다. 두 블록체인을 아우르는 통합 시야인 셈입니다. 거래가 "비밀값 공개 준비 완료" 상태에 이를 때까지 이 도구를 호출하면 됩니다.

4a. disclose_crosschain_secret — 정산을 위한 비밀값 공개

추적을 통해 상대 쪽이 준비되었고 온체인에서 잠겼음이 확인되면, 그때 비밀값을 공개합니다. 이것이 마지막 단계입니다. 공개와 동시에 정산이 시작되어 여러분은 ETH를 가져가고, 거래 상대방은 같은 비밀값으로 여러분의 GRAM/USDT를 가져갑니다. 반드시 track_crosschain_swap으로 온체인 준비 상태를 확인한 뒤에만 호출해야 합니다. 비밀값을 너무 일찍 공개하는 것은 금고의 나머지 절반이 채워지기도 전에 열쇠를 건네주는 것과 같기 때문입니다.

4b. build_crosschain_refund — 거래가 멈췄을 때 자금 회수

안전장치 시나리오입니다. 상대 쪽이 끝내 이행하지 않은 경우 — 거래 상대방이 에스크로를 대칭으로 걸지 않았고 타임아웃이 지나 버린 경우 — build_crosschain_refund가 에스크로에서 여러분의 자금을 되돌려 받는 서명되지 않은 트랜잭션을 조립해 줍니다. 앞서 말한 두 번째 자물쇠, 즉 시간 자물쇠가 바로 이것입니다. 비밀값은 공개되지 않고, 잠겼던 자금은 여러분에게 돌아옵니다. 원자성의 비상 안전핀이라 할 수 있습니다. 멈춰 버린 거래가 여러분의 돈을 삼키지는 않습니다.

전체 경로를 도식으로 보면 이렇습니다.

get_crosschain_quote      → 얼마를 받게 되는가
build_crosschain_swap_tx  → 서명되지 않은 HTLC-tx + 비밀값 (비밀값은 여러분에게)
        ↓ (지갑에서 서명하고 전송)
track_crosschain_swap     → TON과 Ethereum의 단계
   ├─ 온체인 준비 완료 →  disclose_crosschain_secret   → 정산
   └─ 멈춤, 타임아웃   →  build_crosschain_refund      → 환불

서버를 연결하고 나면 사람의 말로 에이전트에게 부탁하기만 하면 됩니다. 도구 호출 사슬은 에이전트가 알아서 구성합니다.

내 TON 지갑에 있는 50 USDT를 Ethereum 네트워크의 ETH로 바꿔 줘.
먼저 견적을 보여 줘 (get_crosschain_quote).
환율이 괜찮으면 HTLC 에스크로를 조립하고 (build_crosschain_swap_tx)
내가 서명하게 해 줘. 그다음 거래를 추적하고 (track_crosschain_swap)
양쪽이 온체인에서 준비되면 정산을 위해 비밀값을 공개해.
타임아웃이 지나도 아무것도 진전되지 않으면 환불을 조립해 줘.

왜 비수탁인가: 서버는 서명하지도, 키를 보관하지도 않습니다

서두에서 이야기한 문제로 돌아가 보겠습니다. 일반적인 브리지가 위험한 이유는 자금을 중개자의 통제 아래 넘기기 때문입니다. TONNode는 다르게 설계되어 있고, 이것은 원칙에 해당하는 입장입니다. 서버는 결코 서명하지 않으며, 자금도 개인키도 보관하지 않습니다.

HTLC 에스크로에서 이것이 실무적으로 뜻하는 바는 다음과 같습니다.

  • build_crosschain_swap_tx는 서명되지 않은 트랜잭션을 내줍니다. TonConnect를 통해 여러분의 지갑으로 서명하기 전까지는 아무것도 잠기지 않습니다.
  • 비밀값 S는 서버가 아니라 여러분이 보관합니다. 여러분의 비밀값 없이는 누구도 여러분을 대신해 정산을 끝낼 수 없습니다.
  • 타임아웃에 따른 환불(build_crosschain_refund) 역시 여러분의 서명을 기다리는 서명되지 않은 트랜잭션으로 조립됩니다.
  • 생성된 지갑(generate_wallet 도구)조차 여러분에게 전달될 뿐 서버에는 남지 않습니다.

서버가 다운되거나 침해당하더라도, 여러분의 서명과 여러분의 비밀값 없이는 자금을 빼돌리는 것도 거래를 마무리하는 것도 물리적으로 불가능합니다. 다시 말해 원자적 HTLC는 거래 상대방으로부터 여러분을 지키고, 비수탁 아키텍처는 서비스 그 자체로부터 여러분을 지킵니다. 이 모델에 대한 더 자세한 설명은 수탁형 MCP와 비수탁형 MCP 비교, 그리고 TON 에이전트를 위한 비수탁 스왑 글에서 확인하실 수 있습니다.

비교하자면, TON Foundation의 공식 @ton/mcp는 operator 키를 보유하고 스스로 서명하는 수탁형 에이전트 지갑이며, 크로스체인 없이 TON 내부에서만 동작합니다. 차이는 솔직하게 말해 이렇습니다. 그쪽은 키를 맡기는 대가로 자율적인 지출을 얻고, 이쪽은 비수탁성에 더해 TON 바깥으로 나가는 길을 얻습니다.

지원 네트워크: Ethereum, Arbitrum, Base, BNB, Polygon, Avalanche

여기서 TON은 언제나 거래의 출발지이며, 목적지 네트워크는 여섯 개의 EVM 네트워크 중 하나입니다.

  • Ethereum
  • Arbitrum
  • Base
  • BNB Chain
  • Polygon
  • Avalanche

메커니즘은 모두 동일합니다. 원자적 HTLC 에스크로입니다. TRON은 아직 지원되지 않습니다. 저렴한 수수료를 노리고 L2를 겨냥하고 계신다면 TON → Arbitrum 크로스체인 스왑을 다룬 별도의 글을 참고하십시오. 흐름은 같고 목적지 네트워크만 다릅니다. 애초에 에이전트에게 이것이 왜 필요한지, TON 입장에서의 가치는 어디에 있는지는 최초의 크로스체인 스왑과 네트워크에 주는 가치 글에서 다룹니다.

MCP를 연결하고 첫 크로스체인 스왑을 실행하는 방법

TONNode는 TON을 위한 hosted MCP 서버입니다. MCP(Model Context Protocol)는 AI 에이전트(Claude, Cursor, ChatGPT/Codex를 비롯한 모든 MCP 클라이언트)가 도구를 호출하는 표준입니다. 도구는 모두 16개이며, 16개 전부가 모든 요금제에서 사용 가능합니다. 여러분이 지불하는 것은 처리량뿐입니다.

로컬 실행, 무료

읽기 도구 전체 세트를 담은 공개 설정은 npx -y @tonnode/mcp 명령 한 줄로 설치됩니다.

{
  "mcpServers": {
    "ton": {
      "command": "npx",
      "args": ["-y", "@tonnode/mcp"]
    }
  }
}

이것을 여러분의 MCP 클라이언트 설정(Claude Desktop, Cursor, Codex 등 MCP 호환 클라이언트라면 무엇이든)에 추가하면 get_crosschain_quote, build_crosschain_swap_tx, track_crosschain_swap, disclose_crosschain_secret, build_crosschain_refund 도구를 에이전트가 쓸 수 있게 됩니다. @tonnode/mcp 패키지는 오픈소스(MIT)로 npm과 GitHub(tonnode/mcp)에 공개되어 있으며, HTTP 중간 계층 없이 TON의 네이티브 ADNL 프로토콜로 동작합니다.

Hosted — 전용 키로

처리량을 보장받으려면 전용 키로 hosted 엔드포인트를 연결합니다.

{
  "mcpServers": {
    "ton": {
      "type": "http",
      "url": "https://mcp.tonnode.io/mcp",
      "headers": { "Authorization": "Bearer tn_live_…" }
    }
  }
}

요금제는 요청 한도만 다릅니다. Hobby — 영구 무료, 60 요청/분. Pro — 월 $29, 300 요청/분. Scale — 월 $199, 1200 요청/분. 16개 도구 세트는 모든 요금제에서 동일합니다. 무료 Hobby 키는 로그인 직후 카드 등록 없이 발급됩니다. 참고로 화폐 이야기를 하나 덧붙이면, GRAM은 이름이 바뀐 Toncoin이고(2026년 6월 개명), 네트워크는 여전히 TON이라 불리며, 견적에서 여러분이 보게 되는 것은 바로 GRAM입니다.

1분 만에 첫 스왑

  1. 무료 Hobby 키를 받으십시오. 카드는 필요 없고, 로그인 직후 바로 발급됩니다.
  2. 설정을 작성하십시오(로컬이든 hosted든).
  3. 위 섹션의 프롬프트를 에이전트에게 주고, 에스크로 트랜잭션을 여러분의 지갑으로 서명하십시오.

요약

서로 다른 네트워크를 잇는 크로스체인이 반드시 신뢰 위에 세워질 필요는 없습니다. 원자적 HTLC 에스크로는 "전부 아니면 전무"라는 보장을 제공하고, TONNode의 비수탁 아키텍처는 자금도 키도 비밀값도 여러분의 통제를 벗어나지 않도록 지킵니다. get_crosschain_quote, build_crosschain_swap_tx, track_crosschain_swap, disclose_crosschain_secret, build_crosschain_refund 다섯 개의 도구가 비상 환불을 포함한 거래의 전체 생애 주기를 감당합니다.

실제 스왑으로 무료로 확인해 보실 수 있습니다. Hobby 키를 받고 첫 크로스체인 스왑을 실행해 보십시오 — 카드는 필요 없고, 분당 60 요청이면 여유롭게 충분합니다. 16개 도구 전체 소개는 MCP 페이지에서 보실 수 있습니다.

에이전트에게 TON 접근 권한을 주세요

16가지 MCP 도구: 읽기, 논커스터디얼 스왑, 크로스체인, 지갑. 무료 요금제 60 요청/분, 카드 불필요.