Tất cả bài viết
10 phút đọc

Cross-chain swap từ TON sang Arbitrum: cơ chế hoạt động

Cross-chain swap TON → Arbitrum qua MCP: HTLC escrow nguyên tử, không lưu ký, không giữ khóa. Luồng hoạt động ra sao và những mạng nào được hỗ trợ.

cross-chainTONArbitrumHTLCkhông lưu kýMCP

Cross-chain swap TON → Arbitrum: tiền kẹt lại giữa hai mạng

Một kịch bản kinh điển: AI agent của bạn giữ số dư trên ví TON — GRAM hoặc USDT — nhưng thứ cần thanh toán lại là một contract trên Arbitrum. Ở đó gas rẻ, ở đó có thanh khoản, ở đó có đúng giao thức bạn cần. Con đường thông thường trông thế này: rút lên sàn, chờ ghi có, mua ETH, rút sang Arbitrum, chịu thiệt vì spread và phí — và tất cả đều phải làm thủ công, qua một dịch vụ lưu ký mà bạn phải giao tài sản cho họ "giữ hộ". Với con người thì đó là nửa tiếng loay hoay. Với một agent tự chủ thì đó là bức tường: nó không có tài khoản sàn, không có KYC, và về nguyên tắc nó không được phép giao khóa riêng cho server của người khác. Chưa kể mỗi cây cầu (bridge) lại là một tích hợp riêng, một điểm lỗi riêng, và đều đặn có tin "cầu vừa bị hack".

Cross-chain swap TON → Arbitrum giải quyết đúng nỗi đau đó: dịch chuyển giá trị từ TON sang mạng khác bằng một giao dịch nguyên tử duy nhất, mà không giao khóa riêng cho bất kỳ ai. Dưới đây là cơ chế bên trong và cách gắn nó vào agent qua năm MCP tool của TONNode.

Vì sao cần swap từ TON sang Arbitrum và còn những mạng nào

Arbitrum là điểm đến L2 phổ biến được xây trên Ethereum: phí thấp, hạ tầng DeFi đã trưởng thành, nhiều giao thức mà TON không có. Những lý do điển hình để đi sang đúng mạng này:

  • đưa USDT vào hệ sinh thái nơi giao thức bạn cần chấp nhận nó;
  • mở vị thế trên một DEX hoặc giao thức perp gốc Arbitrum;
  • thanh toán trong mạng mà đối tác của bạn hỗ trợ.

Ở TONNode, cross-chain hỗ trợ sáu mạng đích:

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

Một giới hạn quan trọng cần giữ trong đầu: TON luôn là nguồn. Luồng đi từ TON sang mạng EVM, chứ không ngược lại. Và TRON hiện chưa được hỗ trợ — nếu ai đó đang chờ USDT-TRC20 trực tiếp thì tuyến đó không tồn tại, đừng đưa nó vào logic của agent. Arbitrum ở đây chỉ là một trong sáu đích đến; mọi thứ mô tả bên dưới đúng nguyên văn cho cả TON → Ethereum lẫn TON → Base — chỉ đổi mạng đích trong báo giá.

HTLC escrow là gì và vì sao swap lại có tính nguyên tử

Câu hỏi cốt lõi của mọi cuộc trao đổi cross-chain: làm sao đổi tài sản ở mạng A lấy tài sản ở mạng B, khi hai mạng không có chung một "trọng tài"? Phương án ngây thơ — tin vào một bên trung gian — chính là rủi ro lưu ký mà ai cũng biết.

TONNode dùng HTLC escrow nguyên tử (Hashed TimeLock Contract — contract có khóa băm và bộ đếm thời gian). Ví von: hai ngăn két sắt, mỗi mạng một ngăn, và cả hai đều mở bằng cùng một chiếc chìa khóa bí mật. Cơ chế này dựa trên hai tính chất:

  • Khóa băm (hash lock). Sinh một secret ngẫu nhiên S, rồi lấy hash của nó H = hash(S). Cả hai ngăn — escrow trên TON và escrow trên Arbitrum — đều bị khóa bằng hash này, với điều kiện "chỉ mở cho ai xuất trình được S sao cho hash(S) == H". Chừng nào secret chưa lộ, không ai lấy được gì; ngay khi S được xuất trình ở một bên, nó cũng lộ ra ở bên kia.
  • Bộ đếm thời gian (time lock). Mỗi ngăn đều có hạn. Nếu giao dịch không thành, hết timelock thì tiền quay về chủ sở hữu ban đầu.

Từ đó mà có chữ nguyên tử: giao dịch hoặc diễn ra trên cả hai mạng (secret được tiết lộ — cả hai escrow đều được thực thi), hoặc không diễn ra ở đâu cả (timelock hết hạn — cả hai bên cùng hoàn tiền). Không tồn tại trạng thái lưng chừng kiểu "tiền đã rời TON nhưng chưa tới Arbitrum". Đây không phải một cây cầu với pool chung có thể bị hack, mà là cặp hai escrow độc lập được đồng bộ bằng một secret duy nhất.

Luồng cross-chain swap TON → Arbitrum theo từng bước

Toàn bộ cuộc trao đổi gồm năm tool, gọi lần lượt theo thứ tự. Mỗi tool làm đúng một việc.

1. get_crosschain_quote — báo giá

Bạn hỏi: nhận được bao nhiêu trên Arbitrum cho X GRAM (hoặc cho X USDT trên TON). Trả về là một báo giá chắc chắn theo tuyến đường — tỷ giá, phí, các tham số.

2. build_crosschain_swap_tx — giao dịch HTLC chưa ký + secret

Server dựng một giao dịch chưa ký để tạo escrow ở phía TON, và trả cho bạn secret S (đúng chiếc chìa khóa mở cả hai ngăn). Giao dịch chưa được gửi và chưa được ký — ví của người dùng sẽ ký nó qua TonConnect. Secret vẫn nằm ở phía bạn; chính nó là thứ bạn dùng để tất toán về sau.

3. track_crosschain_swap — các pha của giao dịch trên cả hai mạng

Sau khi escrow trên TON đã được tạo, đối tác sẽ đặt escrow đối ứng trên Arbitrum. Tool này cho thấy các pha của giao dịch trên cả hai mạng: escrow nguồn đã được tạo chưa, escrow đích đã xuất hiện chưa, mọi thứ đã sẵn sàng để tất toán chưa. Đây là bộ dò trạng thái sẵn sàng on-chain của bạn — bạn nhìn thấy cả hai ngăn theo đúng nghĩa đen.

4. disclose_crosschain_secret — tiết lộ secret để tất toán

Đây là thời khắc then chốt về mặt an toàn. Secret chỉ được tiết lộ sau khi đã kiểm tra trạng thái sẵn sàng của escrow ngay trên chain — tức là sau khi tool xác nhận rằng ngăn đối ứng trên Arbitrum thực sự tồn tại và được nạp đúng theo khóa băm. Lý do của bước kiểm tra này rất đơn giản: chừng nào escrow đối ứng chưa hình thành thì không được tiết lộ secret — nếu không, đối tác sẽ lấy tiền của bạn mà không thực hiện phần của họ. Ngay khi secret được tiết lộ, cả hai bên đều nhận phần của mình.

5. build_crosschain_refund — bảo hiểm

Nếu giao dịch bị treo, tool này dựng giao dịch hoàn tiền từ escrow sau khi timelock hết hạn. Có một mục riêng ở dưới nói về việc này.

Sơ đồ luồng:

get_crosschain_quote      → báo giá TON → Arbitrum
build_crosschain_swap_tx  → tx HTLC chưa ký + secret  (ví sẽ ký)
track_crosschain_swap     → các pha trên TON và trên Arbitrum
disclose_crosschain_secret→ tiết lộ secret sau khi kiểm tra on-chain
build_crosschain_refund   → hoàn tiền nếu giao dịch bị treo

Trong khi đó, với agent thì chỉ cần một prompt bằng ngôn ngữ tự nhiên — nó sẽ tự chọn và gọi các tool theo đúng thứ tự:

Swap 50 USDT từ ví TON của tôi sang Arbitrum.
Trước tiên hãy cho tôi xem báo giá qua get_crosschain_quote,
dựng giao dịch escrow HTLC bằng build_crosschain_swap_tx
rồi để tôi ký nó trong ví. Sau đó theo dõi các pha trên cả hai mạng
và chỉ tiết lộ secret khi escrow đích đã sẵn sàng on-chain.

Không có bước nào agent yêu cầu khóa riêng của bạn.

Không lưu ký: server không ký và không giữ khóa

Đây chính là thứ tạo ra khác biệt căn bản của cách tiếp cận này. build_crosschain_swap_tx trả về một message TonConnect chưa ký — chữ ký do ví của người dùng đặt, không phải server. Server không bao giờ ký và không bao giờ giữ tiền hay khóa riêng.

Trên thực tế điều đó nghĩa là:

  • Secret của HTLC được trao cho bạn trong build_crosschain_swap_tx, chứ không nằm lại trên server; việc tiết lộ diễn ra bằng hành động có ý thức của bạn qua disclose_crosschain_secret.
  • Tiền lúc nào cũng nằm trong escrow on-chain, chứ không nằm trên ví của nhà cung cấp.
  • Kể cả nếu server muốn "ôm" tiền bỏ chạy thì nó cũng không có cách nào: không có khóa, chữ ký không phải của nó, và việc tiết lộ secret chỉ do bạn khởi xướng.

Quy tắc đó cũng áp dụng cho các tool "ghi" còn lại của TONNode: swap và generate_wallet đều nghiêm ngặt không lưu ký. Để so sánh — @ton/mcp chính thức của TON Foundation được dựng theo kiểu khác: đó là một ví-agent lưu ký theo mô hình split-key, trong đó operator key do chính agent giữ và ký. Cách làm đó chạy được và có những điểm mạnh riêng (chi tiêu tự chủ, NFT, DNS, vị thế chính thức), nhưng nó lưu ký và chỉ hoạt động bên trong TON — ở đó không có cross-chain. TONNode chủ động chọn hướng ngược lại: chữ ký luôn thuộc về phía người dùng. Chi tiết hơn về mô hình này cho agent — trong bài phân tích vì sao swap của agent phải không lưu ký.

Nếu giao dịch bị treo thì làm gì: hoàn tiền từ escrow

Cross-chain là hai mạng độc lập, và đôi khi bên đối ứng không thực hiện phần của họ: escrow trên Arbitrum không xuất hiện, hoặc việc tất toán bị kẹt. Tiền lúc đó không mất đi — nó vẫn nằm trong escrow của bạn trên TON, được khóa bằng timelock.

build_crosschain_refund dựng giao dịch hoàn tiền chưa ký — cũng để ví của bạn ký. Sau khi timelock hết hạn, tiền rời escrow quay về địa chỉ TON của bạn:

Giao dịch không thành, escrow đang treo.
Hãy dựng lệnh hoàn tiền qua build_crosschain_refund và đưa tôi ký.

Đây chính là nửa còn lại của "tính nguyên tử": nếu giao dịch không thành thì nó được hoàn tác trên cả hai mạng. Trong trường hợp xấu nhất bạn mất một chút thời gian và tiền gas, chứ không mất số tiền của giao dịch. Không có chuyện số dư "kẹt trong cầu" rồi phải đòi qua bộ phận hỗ trợ suốt nhiều tháng.

Quy tắc thực dụng cho agent: nếu track_crosschain_swap mãi không cho thấy escrow đích đã sẵn sàng, mà timelock thì sắp hết hạn — đừng tiết lộ secret, hãy gọi build_crosschain_refund.

Cách gắn bộ tool cross-chain vào AI agent

Cả năm tool cross-chain đều là một phần của MCP server TONNode. MCP (Model Context Protocol) là chuẩn để Claude, Cursor, ChatGPT/Codex và mọi MCP client khác gọi tool. Kết nối chỉ bằng một file config.

Chạy local, miễn phí (config công khai, đầy đủ bộ tool đọc):

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

Chạy local miễn phí cho bạn đầy đủ bộ tool đọc. Các tool cross-chain và swap (dựng giao dịch — build_crosschain_swap_tx, track_crosschain_swap, disclose_crosschain_secret, build_crosschain_refund) chạy bằng hosted key — kể cả gói Hobby miễn phí (xem mục về gói cước bên dưới).

Hosted (băng thông được đảm bảo, key riêng của bạn):

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

Package @tonnode/mcp là open source (MIT), có trên npm và GitHub (tonnode/mcp), chạy trực tiếp theo giao thức ADNL gốc của TON mà không cần lớp trung gian HTTP.

Vài lưu ý kỹ thuật để agent không vấp. GRAM là Toncoin sau khi đổi tên (đổi tên vào tháng 6/2026), bản thân mạng lưới vẫn gọi là TON; nếu agent thao tác với "GRAM" trong báo giá thì đó chính là token gốc của mạng. Phí cho hosted key có thể thanh toán bằng GRAM hoặc USDT trên mạng TON qua TonConnect, hoặc bằng BTC/ETH/SOL và các đồng khác qua tài khoản xRocket trong Telegram — key được cấp tự động sau khi thanh toán xong.

Các gói cước và những gì được bao gồm

Toàn bộ 16 tool của TONNode — bao gồm năm tool cross-chain — đều dùng được trên mọi gói cước. Bạn chỉ trả tiền cho băng thông, chứ không phải để "mở khóa" tính năng:

  • Hobby — miễn phí vĩnh viễn, 60 request/phút;
  • Pro — $29/tháng, 300 request/phút;
  • Scale — $199/tháng, 1200 request/phút.

Key Hobby miễn phí được cấp ngay sau khi đăng nhập, không cần thẻ.

Tóm lại

Cross-chain swap TON → Arbitrum trong TONNode là HTLC escrow nguyên tử: một secret duy nhất liên kết hai ngăn két ở hai mạng, nhờ vậy giao dịch hoặc đi trọn vẹn, hoặc được hoàn lại theo timelock. Năm tool phủ hết toàn bộ luồng — báo giá, dựng giao dịch HTLC chưa ký kèm secret, theo dõi các pha trên cả hai mạng, tiết lộ secret sau khi kiểm tra trạng thái sẵn sàng on-chain và hoàn tiền khi có trục trặc — còn server thì vẫn không lưu ký: không ký và không giữ tiền lẫn khóa. Cùng cơ chế đó cũng hoạt động cho những hướng khác: xem bài phân tích swap TON → EthereumTON → Base, cũng như vì sao lần đầu tiên chuyển giá trị cross-chain từ TON qua MCP lại quan trọng.

Muốn thử ngay trên một agent thật — nhận key Hobby miễn phí (đủ 16 tool, bao gồm cross-chain, 60 request/phút, không cần thẻ) và ghé qua trang giới thiệu bộ tool.

Cho agent của bạn quyền truy cập TON

16 công cụ MCP: đọc, swap phi lưu ký, cross-chain và ví. Gói miễn phí — 60 req/phút, không cần thẻ.