TON → Arbitrum 크로스체인 스왑: 어떻게 작동하는가
MCP로 실행하는 TON → Arbitrum 크로스체인 스왑. 원자적 HTLC 에스크로, 완전 비수탁, 키 보관 없음. 전체 흐름과 지원 네트워크를 정리했습니다.
TON → Arbitrum 크로스체인 스왑: 두 네트워크 사이에 묶여 버린 자금
전형적인 시나리오입니다. AI 에이전트는 TON 지갑에 잔액을 들고 있는데 — GRAM이든 USDT든 — 정작 결제해야 할 컨트랙트는 Arbitrum에 있습니다. 가스비가 싸고, 유동성이 있고, 필요한 프로토콜이 배포된 곳이 그쪽이기 때문입니다. 일반적인 경로는 이렇습니다. 거래소로 출금하고, 입금이 반영되기를 기다리고, ETH를 사고, 다시 Arbitrum으로 출금하고, 스프레드와 수수료로 야금야금 잃습니다. 게다가 이 모든 과정을 손으로, 그것도 자금을 "잠시 맡아 두는" 수탁 서비스를 거쳐 처리해야 합니다. 사람에게는 30분짜리 번거로움이지만, 자율 에이전트에게는 벽입니다. 거래소 계정도 없고, KYC도 없으며, 애초에 남의 서버에 개인키를 맡겨서는 안 되는 존재이기 때문입니다. 게다가 브리지 하나하나가 별도의 연동이자 별도의 단일 장애점이고, "브리지가 해킹당했다"는 뉴스도 잊을 만하면 나옵니다.
TON → Arbitrum 크로스체인 스왑은 정확히 이 문제를 해결합니다. 누구에게도 개인키를 넘기지 않고, 단 한 번의 원자적 거래로 TON에 있는 가치를 다른 네트워크로 옮기는 것입니다. 아래에서는 이것이 내부적으로 어떻게 구성되어 있는지, 그리고 TONNode의 MCP 도구 다섯 개로 에이전트에 어떻게 연결하는지 살펴보겠습니다.
TON에서 Arbitrum으로 스왑하는 이유, 그리고 그 밖에 지원되는 네트워크
Arbitrum은 Ethereum 위에서 널리 쓰이는 L2 목적지입니다. 수수료가 낮고, DeFi 인프라가 성숙했으며, TON에는 없는 프로토콜이 많습니다. 굳이 그쪽으로 넘어가는 전형적인 이유는 다음과 같습니다.
- 원하는 프로토콜이 실제로 받아 주는 생태계로 USDT를 옮기고 싶을 때
- Arbitrum 네이티브 DEX나 perp 프로토콜에서 포지션을 잡고 싶을 때
- 거래 상대방이 지원하는 네트워크로 결제해야 할 때
TONNode의 크로스체인은 여섯 개의 목적지 네트워크를 지원합니다.
- Ethereum
- Arbitrum
- Base
- BNB Chain
- Polygon
- Avalanche
머릿속에 담아 둘 중요한 제약이 하나 있습니다. TON은 언제나 출발지라는 점입니다. 흐름은 TON에서 EVM 네트워크로 향하며, 그 반대 방향은 없습니다. 그리고 TRON은 아직 지원되지 않습니다. USDT-TRC20을 곧바로 받는 경로를 기대하고 계셨다면 그런 경로는 없으니, 에이전트 로직에 미리 넣어 두지 마십시오. 여기서 Arbitrum은 여섯 목적지 중 하나일 뿐이고, 아래에서 설명하는 내용은 TON → Ethereum이나 TON → Base 전환에도 글자 그대로 똑같이 적용됩니다. 견적에서 목적지 네트워크만 바뀔 뿐입니다.
HTLC 에스크로란 무엇이며, 왜 스왑이 원자적인가
모든 크로스체인 교환의 핵심 질문은 이것입니다. 두 네트워크에 공통의 "심판"이 없는데, 어떻게 A 네트워크의 자산을 B 네트워크의 자산과 교환할 수 있을까요? 순진한 방법은 중개자를 믿는 것이고, 그것이 바로 그 수탁 리스크입니다.
TONNode는 원자적 HTLC 에스크로(Hashed TimeLock Contract — 해시 잠금과 타이머가 걸린 컨트랙트)를 사용합니다. 비유하자면 각 네트워크에 하나씩 놓인 두 개의 금고이고, 두 금고 모두 똑같은 비밀값 하나로 열립니다. 여기에는 두 가지 성질이 작동합니다.
- 해시 잠금(hash lock). 무작위 비밀값
S를 생성하고, 그로부터 해시H = hash(S)를 얻습니다. 두 금고(TON 쪽 에스크로와 Arbitrum 쪽 에스크로)는 이 해시로 잠기며, "hash(S) == H를 만족하는S를 제시하는 쪽에게 내준다"는 조건이 붙습니다. 비밀값이 공개되기 전까지는 아무도 아무것도 가져가지 못하고, 한쪽에서S가 제시되는 순간 다른 쪽에서도 그 값이 보이게 됩니다. - 타이머(time lock). 각 금고에는 기한이 있습니다. 거래가 성사되지 않으면 타임락이 만료된 뒤 자금이 원래 소유자에게 돌아갑니다.
그래서 원자적이라는 단어가 붙습니다. 거래는 두 네트워크에서 모두 성립하거나(비밀값이 공개되어 두 에스크로가 모두 집행되거나), 어디에서도 성립하지 않습니다(타임락이 만료되어 양쪽 모두 원래 주인에게 되돌아갑니다). "돈은 TON에서 나갔는데 Arbitrum에는 도착하지 않은" 중간 상태는 여기에 존재하지 않습니다. 이것은 해킹당할 수 있는 공동 풀을 가진 브리지가 아니라, 하나의 비밀값으로 동기화된 두 개의 독립적인 에스크로를 엮은 구조입니다.
TON → Arbitrum 크로스체인 스왑 흐름, 단계별로
교환 전체는 순서대로 호출되는 다섯 개의 도구로 이루어집니다. 각각은 정확히 한 가지 일만 합니다.
1. get_crosschain_quote — 견적
X GRAM(또는 TON 상의 X USDT)으로 Arbitrum에서 얼마를 받게 되는지 물어봅니다. 그러면 해당 경로에 대한 확정 견적(환율, 수수료, 파라미터)이 돌아옵니다.
2. build_crosschain_swap_tx — 서명되지 않은 HTLC 트랜잭션 + 비밀값
서버는 TON 쪽에 에스크로를 생성하는 서명되지 않은 트랜잭션을 조립해 주고, 여러분에게 비밀값 S(두 금고를 여는 바로 그 키)를 넘겨줍니다. 트랜잭션은 아직 전송되지도, 서명되지도 않았습니다. 서명은 TonConnect를 통해 사용자 지갑이 합니다. 비밀값은 여러분이 보관하며, 나중에 정산을 마무리하는 데 쓰는 것이 바로 이 값입니다.
3. track_crosschain_swap — 양쪽 네트워크의 거래 단계
TON 쪽 에스크로가 생성되면 거래 상대방이 Arbitrum에 대응 에스크로를 겁니다. 이 도구는 양쪽 네트워크의 거래 단계를 보여 줍니다. 출발지 에스크로가 생성되었는지, 목적지 에스크로가 나타났는지, 정산 준비가 끝났는지까지 한눈에 들어옵니다. 말하자면 온체인 준비 상태를 감지하는 계기판이고, 말 그대로 두 금고를 동시에 눈으로 확인할 수 있습니다.
4. disclose_crosschain_secret — 정산을 위한 비밀값 공개
보안의 핵심 순간입니다. 비밀값은 에스크로 준비 상태를 온체인에서 확인한 뒤에만 공개됩니다. 즉 Arbitrum 쪽 대응 금고가 실제로 존재하고 올바른 해시 잠금으로 채워져 있음을 도구가 확인한 다음입니다. 이 검증의 의미는 단순합니다. 대응 에스크로가 형성되기 전에는 비밀값을 공개해서는 안 됩니다. 그렇지 않으면 상대방이 자기 몫을 이행하지 않은 채 여러분의 자금만 가져갈 수 있습니다. 비밀값이 공개되는 즉시 양쪽이 각자의 몫을 받습니다.
5. build_crosschain_refund — 안전장치
거래가 멈춰 버렸다면, 타임락 만료 후 에스크로에서 자금을 되돌려 받는 트랜잭션을 조립합니다. 이에 대해서는 아래에 별도 섹션이 있습니다.
흐름 도식:
get_crosschain_quote → TON → Arbitrum 견적
build_crosschain_swap_tx → 서명되지 않은 HTLC-tx + 비밀값 (지갑이 서명)
track_crosschain_swap → TON과 Arbitrum 양쪽의 단계
disclose_crosschain_secret→ 온체인 검증 후 비밀값 공개
build_crosschain_refund → 거래가 멈췄을 때의 환불
한편 에이전트에게는 사람의 말로 된 프롬프트 하나면 충분합니다. 도구를 올바른 순서로 직접 골라 호출하니까요.
내 TON 지갑에서 50 USDT를 Arbitrum으로 스왑해 줘.
먼저 get_crosschain_quote로 견적을 보여 주고,
build_crosschain_swap_tx로 HTLC 에스크로 트랜잭션을 조립해서
내가 지갑에서 서명하게 해 줘. 그다음 양쪽 네트워크의 단계를 추적하고,
목적지 에스크로가 온체인에서 준비됐을 때만 비밀값을 공개해.
어느 단계에서도 에이전트가 여러분의 개인키를 요구하지 않습니다.
비수탁: 서버는 서명하지도, 키를 보관하지도 않습니다
이 접근의 근본적인 차별점이 바로 여기 있습니다. build_crosschain_swap_tx는 서명되지 않은 TonConnect 메시지를 반환하며, 서명은 서버가 아니라 사용자 지갑이 합니다. 서버는 결코 서명하지 않으며, 자금과 개인키를 보관하지 않습니다.
실무적으로 이것이 뜻하는 바는 이렇습니다.
- HTLC의 비밀값은
build_crosschain_swap_tx에서 여러분에게 전달되며 서버에 남지 않습니다. 공개는disclose_crosschain_secret을 통한 여러분의 의식적인 행동으로 일어납니다. - 자금은 내내 온체인 에스크로에 놓여 있으며, 제공자의 지갑에 있지 않습니다.
- 설령 서버가 돈을 "빼돌리고" 싶어도 방법이 없습니다. 키가 없고, 서명은 자기 것이 아니며, 비밀값 공개는 오직 여러분만 개시할 수 있기 때문입니다.
같은 규칙이 TONNode의 나머지 "쓰기" 도구에도 적용됩니다. 스왑과 generate_wallet은 엄격하게 비수탁입니다. 비교를 하자면, TON Foundation의 공식 @ton/mcp는 다르게 설계되어 있습니다. 그것은 split-key 방식의 수탁형 에이전트 지갑으로, operator 키를 에이전트 자신이 보유하고 서명합니다. 나름대로 굴러가는 접근이고 장점도 분명합니다(자율적인 지출, NFT, DNS, 공식 프로젝트라는 점). 다만 수탁형이며 TON 내부에서만 작동합니다. 거기에 크로스체인은 없습니다. TONNode는 의도적으로 정반대의 선택을 했습니다. 서명은 언제나 사용자 쪽입니다. 에이전트 관점에서 이 모델을 더 자세히 다룬 글은 왜 에이전트의 스왑은 비수탁이어야 하는가를 참고하십시오.
거래가 멈췄을 때 할 일: 에스크로에서 환불받기
크로스체인은 결국 서로 독립적인 두 네트워크를 다루는 일이고, 때로는 상대방이 자기 몫을 이행하지 않습니다. Arbitrum 쪽 에스크로가 나타나지 않거나, 정산이 막히는 식입니다. 이때 자금은 사라지지 않습니다. 타임락이 걸린 채 TON 쪽 여러분의 에스크로에 그대로 있습니다.
build_crosschain_refund는 서명되지 않은 환불 트랜잭션을 조립합니다. 이 역시 여러분의 지갑이 서명합니다. 타임락이 만료되면 자금이 에스크로에서 여러분의 TON 주소로 되돌아옵니다.
거래가 성사되지 않고 에스크로가 그대로 걸려 있어.
build_crosschain_refund로 환불 트랜잭션을 조립하고 서명하게 해 줘.
이것이 바로 "원자성"의 나머지 절반입니다. 거래가 양쪽 네트워크에서 성사되지 않으면 롤백됩니다. 최악의 경우 잃는 것은 약간의 시간과 가스비이지, 거래 원금이 아닙니다. "브리지에 묶인" 잔액을 몇 달간 고객지원과 씨름하며 받아 내는 일도 없습니다.
에이전트를 위한 실무 규칙 하나. track_crosschain_swap이 한참 동안 목적지 에스크로가 준비되었다고 보여 주지 않는데 타임락 만료가 가까워졌다면, 비밀값을 공개하지 말고 build_crosschain_refund를 호출하십시오.
크로스체인 도구를 AI 에이전트에 연결하는 방법
다섯 개의 크로스체인 도구는 모두 TONNode MCP 서버의 일부입니다. MCP(Model Context Protocol)는 Claude, Cursor, ChatGPT/Codex를 비롯한 모든 MCP 클라이언트가 도구를 호출하는 표준입니다. 설정 파일 하나면 연결됩니다.
로컬, 무료 (공개 설정, 읽기 도구 전체 세트):
{
"mcpServers": {
"ton": {
"command": "npx",
"args": ["-y", "@tonnode/mcp"]
}
}
}
로컬 무료 실행은 읽기 도구 전체 세트를 제공합니다. 크로스체인 및 스왑 도구(거래 조립 — build_crosschain_swap_tx, track_crosschain_swap, disclose_crosschain_secret, build_crosschain_refund)는 hosted 키로 동작하며, 무료 Hobby 키로도 쓸 수 있습니다(아래 요금제 섹션 참고).
Hosted (보장된 처리량, 전용 키):
{
"mcpServers": {
"ton": {
"type": "http",
"url": "https://mcp.tonnode.io/mcp",
"headers": { "Authorization": "Bearer tn_live_…" }
}
}
}
@tonnode/mcp 패키지는 오픈소스(MIT)로 npm과 GitHub(tonnode/mcp)에 있으며, HTTP 계층 없이 TON의 네이티브 ADNL 프로토콜로 동작합니다.
에이전트가 헷갈리지 않도록 기술적인 부분을 두 가지 짚어 두겠습니다. GRAM은 이름이 바뀐 Toncoin이며(2026년 6월 개명), 네트워크 자체는 여전히 TON이라고 불립니다. 견적에서 에이전트가 "GRAM"을 다루고 있다면 그것은 동일한 네이티브 토큰입니다. hosted 키 요금은 TonConnect를 통해 TON 네트워크의 GRAM이나 USDT로 결제하거나, Telegram의 xRocket 계정을 통해 BTC/ETH/SOL 등 다른 코인으로 결제할 수 있습니다. 결제가 끝나면 키가 자동으로 발급됩니다.
요금제와 포함 범위
크로스체인 도구 다섯 개를 포함한 TONNode의 16개 도구 전부를 모든 요금제에서 사용할 수 있습니다. 여러분이 돈을 내는 대상은 처리량이지, 기능 "잠금 해제"가 아닙니다.
- Hobby — 영구 무료, 60 요청/분
- Pro — 월 $29, 300 요청/분
- Scale — 월 $199, 1200 요청/분
무료 Hobby 키는 로그인 직후 카드 등록 없이 발급됩니다.
요약
TONNode의 TON → Arbitrum 크로스체인 스왑은 원자적 HTLC 에스크로입니다. 하나의 비밀값이 두 네트워크의 두 금고를 묶기 때문에, 거래는 통째로 성사되거나 타임락에 따라 되돌아옵니다. 다섯 개의 도구가 전체 흐름을 감당합니다. 견적, 비밀값이 포함된 서명되지 않은 HTLC 트랜잭션 조립, 양쪽 네트워크의 단계 추적, 온체인 준비 상태 확인 후의 비밀값 공개, 그리고 문제가 생겼을 때의 환불까지. 그러는 동안에도 서버는 끝까지 비수탁으로 남습니다. 서명을 대신하지도 않고, 자금도 개인키도 보관하지 않습니다. 같은 메커니즘이 다른 방향에도 그대로 적용됩니다. TON → Ethereum과 TON → Base 스왑 분석, 그리고 MCP를 통한 TON 최초의 크로스체인 가치 이전이 왜 중요한가도 함께 보십시오.
실제 에이전트에서 직접 시험해 보고 싶다면 무료 Hobby 키를 받으십시오(크로스체인을 포함한 16개 도구 전부, 60 요청/분, 카드 불필요). 도구 소개 페이지도 살펴보시기 바랍니다.