Tại sao các dịch vụ tiền mã hóa không phải lúc nào cũng nhận thấy các chuyển khoản từ hợp đồng thông minh

Tại sao các dịch vụ tiền mã hóa không phải lúc nào cũng nhận thấy các chuyển khoản từ hợp đồng thông minh

Được dịch từ tiếng Anh

Hãy tưởng tượng điều này. Bạn có USDC nằm trong Polymarket và bạn muốn XMR để lưu trữ kín đáo, riêng tư. Bạn vào rabbit.io, tạo lệnh để đổi USDC trên Polygon lấy XMR, lấy địa chỉ gửi tiền, gửi token — và không có gì xảy ra.

Ví bạn dùng trên Polymarket đã ký giao dịch. Polygonscan hiển thị dấu tích xanh, đúng địa chỉ và đúng số lượng. Nhưng dịch vụ swap không thấy khoản nạp.

Lúc nhìn thoáng qua, điều này có vẻ kỳ lạ. Blockchain là công khai cho mọi người. Nếu trình khám phá khối hiển thị một chuyển khoản đến, tại sao dịch vụ không thể chỉ bấm nút và ghi có token?

Nhưng đây là điều bạn có thể gặp ở bất kỳ sàn hay dịch vụ swap nào. Lý do là các sàn và dịch vụ swap không đọc trình khám phá khối như cách bạn làm. Họ dùng hệ thống ghi nhận nạp tiền tự động. Và những hệ thống đó cần hiểu không chỉ rằng có thứ gì đó đã di chuyển trên-chain, mà còn rằng sự di chuyển đó đại diện cho một khoản nạp thực sự, cuối cùng, được hỗ trợ và an toàn.

Đó chính xác là nơi vấn đề tôi muốn nói tới hôm nay bắt đầu.

Hai địa chỉ trông giống nhau

Trong các mạng EVM, có hai loại địa chỉ.

  1. Địa chỉ người dùng. Chính thức gọi là EOA, hay Externally Owned Account — một địa chỉ có các giao dịch được ký ở bên ngoài máy ảo. Kiểm soát nó đòi hỏi khóa riêng (private key).
  2. Địa chỉ hợp đồng thông minh. Các chuyển khoản từ địa chỉ này được tạo ra bởi mã được thực thi trên-chain. Nói cách khác, địa chỉ được điều khiển bởi thuật toán viết trong hợp đồng thông minh đó.
Hai loại địa chỉ EVM

Cả hai loại đều có thể nhận, giữ và gửi coin và token. Với người dùng bình thường, chúng trông gần như giống hệt: chỉ là một chuỗi dài bắt đầu bằng 0x. Nhưng với bất kỳ hệ thống nào phải hạch toán những gì xảy ra bên trong giao dịch, sự khác biệt này là rất quan trọng.

Hãy để tôi minh họa điều này bằng Ethereum.

Nếu bạn gửi ETH từ ví thông thường, đó là một chuyển khoản đơn giản: địa chỉ A gửi tiền đến địa chỉ B. Hoạt động đó dễ tìm trong tab Transactions chính.

Tab giao dịch chính của Ethereum

Nhưng nếu ETH đến từ một hợp đồng thông minh, nó có thể xuất hiện như một Internal Transaction. Số dư người nhận thực sự tăng lên, nhưng chuyển khoản xảy ra như một phần của logic thực thi hợp đồng, theo các quy tắc viết trong hợp đồng đó.

Giao dịch nội bộ trên Etherscan

Tự động ghi có tiền đến thông qua những giao dịch như vậy không phải lúc nào cũng là quyết định đúng. Khó mà phản bác việc trước tiên nên kiểm tra xem tiền đến từ loại hợp đồng nào và chính xác đã xảy ra gì bên trong giao dịch.

Nhưng USDC luôn chuyển qua một hợp đồng!

Đúng — và đây là một điểm quan trọng.

Mọi token ERC-20 — USDT, USDC, WBTC, LINK, v.v. — di chuyển giữa các địa chỉ theo quy tắc của hợp đồng thông minh định nghĩa chúng. Khi bạn gửi USDC, bạn gọi hợp đồng của token đó. Hợp đồng cập nhật bảng số dư nội bộ và ghi một sự kiện Transfer lên blockchain.

Với token, đây là cơ chế bình thường. Hệ thống nạp tiền được xây dựng để xử lý những chuyển khoản này. Vậy sự khác biệt cơ bản giữa kiểu chuyển token này, vốn thường thành công không vấn đề, và một chuyển khoản khác không thể xử lý tự động là gì?

Câu trả lời nằm ở việc ai được liệt kê là người gửi trong sự kiện chuyển token.

Nếu USDC bị trừ từ địa chỉ EOA thông thường của bạn và gửi tới địa chỉ của một sàn hoặc dịch vụ swap, mọi thứ sẽ có khả năng diễn ra suôn sẻ. Vấn đề có thể phát sinh khi token bị trừ từ địa chỉ của một bridge, vault, router, smart wallet, multisig, hoặc hợp đồng của nền tảng giao dịch.

Tại sao tôi nói có thể phát sinh vấn đề? Bởi vì quy tắc xử lý khoản nạp từ hợp đồng khác nhau giữa các dịch vụ.

Coinbase, ví dụ, cho biết họ hỗ trợ nạp ETH và ERC-20 qua hợp đồng thông minh, nhưng không hỗ trợ nạp tương đương SOL và token SPL trên Solana. Bybit ghi trong FAQ rằng nạp từ hợp đồng thông minh không được hỗ trợ cho tất cả coin ngoại trừ ETH. Crypto.com cảnh báo rằng hầu hết các khoản nạp token gốc trên chuỗi EVM từ hợp đồng thông minh không được ghi có tự động.

Nói cách khác, ngành vẫn chưa có một quy tắc thống nhất về chuyển khoản dựa trên hợp đồng nào nên được coi là khoản nạp bình thường, cái nào cần xử lý thủ công, và cái nào không nên được chấp nhận.

Điều làm chuyện này tệ hơn là người dùng có thể không nhận ra token của họ đang được gửi từ một nguồn khác ngoài EOA.

Người dùng bình thường lấy hợp đồng thông minh từ đâu?

Nếu tôi không ký kết hợp đồng với ai cả, sao hợp đồng thông minh lại liên quan tới giao dịch của tôi?

Không may là một hợp đồng thông minh thực sự có thể xuất hiện trên chuỗi mà không cần hành động trực tiếp từ bạn. Dưới đây là ba kịch bản phổ biến nơi một hợp đồng xuất hiện mà bạn không hay biết.

Kịch bản đầu tiên là rút tiền từ một prediction market, DEX aggregator, giao thức cho vay, hoặc một dApp khác. Các ứng dụng này thường giữ tài sản không tại địa chỉ EOA thông thường của bạn mà nằm bên trong một hợp đồng — ngay cả khi ví Web3 của bạn không cho thấy điều này rõ ràng và bạn nghĩ tài sản luôn ở cùng bạn.

Chính xác hơn: chúng có thể được hiển thị trong số dư của bạn, nhưng chúng không hoàn toàn thuộc quyền kiểm soát trực tiếp của bạn. Di chuyển những token đó chỉ thực hiện được theo điều khoản của hợp đồng thông minh.

Vậy bạn bấm Withdraw, app gửi tiền tới địa chỉ đúng — nhưng người gửi trên-chain hóa ra không phải EOA của bạn. Đó là hợp đồng của nền tảng.

Kịch bản thứ hai liên quan tới bridge.

Bridge thường được sử dụng khi rút từ các sàn hoặc dịch vụ thanh toán chạy blockchain nội bộ riêng, chẳng hạn Hyperliquid, dYdX, Paradex, Payy Network và những dịch vụ khác. Trong cơ sở dữ liệu của blockchain nội bộ đó, token có thể đã ở tại địa chỉ của bạn, nên bạn cho rằng bạn đang gửi từ địa chỉ đó — chứ không phải từ hợp đồng thông minh.

Nhưng khi bạn chuyển chúng sang một blockchain khác, như Arbitrum, Polygon, hay Ethereum, người nhận có thể nhận token từ một địa chỉ hoàn toàn khác. Địa chỉ của bạn trên mạng đích chẳng bao giờ nắm giữ những token đó. Chúng được giữ bởi hợp đồng bridge hoặc cơ sở hạ tầng liên quan tới bridge, trong khi chuỗi nội bộ chỉ đại diện số dư của bạn ở phía bên kia.

Điều này không có nghĩa mọi chuyển khoản như vậy sẽ chắc chắn bị “mất”. Nhưng điều đó có nghĩa là với hệ thống tự động của sàn hoặc dịch vụ swap nhận, nó có thể không trông như một chuyển khoản đơn giản.

Kịch bản thứ ba liên quan tới ví trừu tượng hóa tài khoản (account abstraction wallets).

Chúng thực sự hữu ích: cho phép bạn gộp nhiều thanh toán, trả phí gas bằng stablecoin, để bên thứ ba thanh toán phí gas cho bạn, thiết lập điều kiện khôi phục ví tùy chỉnh, và sử dụng các tính năng tiện lợi khác. Nhưng sự tiện lợi đó thường đạt được bằng cách biến ví của bạn thành một hợp đồng thông minh.

Đáng chú ý: các nhà phát triển của một trong những ví loại này phổ biến nhất — OKX Wallet — nêu rõ rằng những ví như vậy là hợp đồng thông minh và không thể được nhập vào ứng dụng khác qua seed phrase hoặc private key.

Với người dùng, nó trông giống ví cá nhân của họ. Với dịch vụ nhận, người gửi có thể là một hợp đồng thông minh.

Tại sao sàn và dịch vụ swap dè chừng các chuyển khoản này

Lý do đơn giản nhất là kỹ thuật. Máy quét nạp tiền tự động có thể không theo dõi các sự kiện blockchain không chuẩn.

Hạn chế này có thể được sửa. Nhưng nó không xuất hiện ngẫu nhiên. Đằng sau đó là một mối quan ngại sâu hơn về bảo mật.

Bạn không thể tin mọi sự kiện Transfer chỉ vì nó trông ổn trên trình khám phá. Lịch sử crypto đã có những cuộc tấn công giả mạo khoản nạp, nơi kẻ tấn công tạo ra vẻ ngoài có một khoản nạp và người nhận nhầm lẫn coi đó là thật.

Nghiên cứu DEPOSafe, xuất bản sáu năm trước, phát hiện hơn 7.000 hợp đồng có khả năng bị tấn công loại này. Những hợp đồng đó vẫn tồn tại. Chúng vẫn được triển khai trên Ethereum. Và trong sáu năm qua, chắc chắn đã có thêm các hợp đồng dễ bị tổn thương mới, kể cả trên các mạng khác.

Bản chất của những cuộc tấn công này là tin vào tín hiệu sai.

Người nhận thấy một sự kiện trông như token đang đến và giả định số tiền giờ thuộc về họ. Nhưng logic hợp đồng có thể khiến kết quả thực tế khác hẳn: tiền có thể được trả lại, bị đốt, chuyển hướng chỗ khác, hoặc thực tế không bao giờ nằm dưới quyền kiểm soát của người nhận theo cách mà hệ thống nạp tiền mong đợi.

Vì vậy, sự thận trọng của các sàn và dịch vụ swap không phải là quan liêu, và cũng không phải là lười biếng khi xử lý các giao dịch khó xử. Hợp đồng thông minh phức tạp, và phân biệt một khoản nạp đáng tin cậy với một cuộc tấn công giả mạo không phải lúc nào cũng đơn giản.

Cách nhận biết bạn đang gửi từ hợp đồng thông minh hay không

Giao diện của app bạn gửi đi đôi khi không cho bạn dấu hiệu gì về loại địa chỉ thực tế mà tiền sẽ rời khỏi. Bạn thường chỉ có thể đánh giá điều này sau khi thực tế xảy ra, bằng cách kiểm tra những gì đã diễn ra trên trình khám phá.

Nếu bạn gửi tài sản gốc như ETH, AVAX, BNB, hay HYPE, kiểm tra nơi chuyển khoản đến xuất hiện. Nếu nó xuất hiện dưới mục Transactions, có lẽ bạn ổn. Nhưng nếu chuyển động nằm trong tab Internal Transactions hoặc Internal Transfers, đó đã là kịch bản dựa trên hợp đồng.

Tab chuyển khoản nội bộ

Nếu bạn gửi token ERC-20, mở Token Transfers và nhìn vào trường From. Truy cập địa chỉ được liệt kê ở đó. Trên Etherscan và các trình khám phá tương tự, hợp đồng thông minh thường có tab Contract, mã đã được xác minh, tên hợp đồng, hoặc nhãn. Địa chỉ có thể được gắn nhãn là Contract, Bridge, Router, Proxy, Safe, Vault, EntryPoint, Settlement, v.v.

Nhãn hợp đồng trên trình khám phá khối

Tất cả những điều này chỉ thấy được khi giao dịch đã tồn tại. Vậy nên trước khi gửi số lượng đáng kể từ một nền tảng mới, hãy thực hiện một chuyển khoản thử nhỏ tới chính bạn trước và kiểm tra xem nó có đến từ địa chỉ hợp đồng thông minh hay không. Nếu không, các chuyển khoản tiếp theo từ nền tảng đó rất có thể sẽ đi qua như các giao dịch thông thường hoặc chuyển token.

Cũng có những trường hợp bạn có thể phát hiện việc gửi từ hợp đồng thông minh trước. Dấu hiệu rõ nhất là khi ví cho phép bạn trả gas bằng stablecoin. Nếu không có logic hợp đồng thông minh, điều đó không thể thực hiện được.

Một dấu hiệu cảnh báo hữu ích nữa: nếu bạn rút tiền từ một app thông qua bridge, người gửi trên mạng đích có thể là hợp đồng bridge hoặc cơ sở hạ tầng liên quan tới bridge, chứ không phải EOA của bạn.

Chuyện gì có thể xảy ra nếu bạn gửi từ hợp đồng thông minh

Khả năng thứ nhất: chuyển khoản được xử lý tự động. Chuyển khoản đến từ hợp đồng thông minh không nhất thiết là vấn đề. Nhiều hợp đồng uy tín, được biết đến được đưa vào danh sách trắng bởi các sàn và dịch vụ swap, và máy quét nạp tiền tự động có thể xử lý đúng những chuyển khoản này.

Khả năng thứ hai: khoản nạp không được xử lý tự động, nhưng có thể được tìm thấy và xử lý thủ công. Dù vậy, việc ghi có có thể không đến nhanh như bạn mong, vì xử lý thủ công an toàn đòi hỏi xem xét cẩn thận hợp đồng thông minh và cấu trúc nội bộ của giao dịch.

Một người dùng trên Bitcointalk gần đây chia sẻ rằng HTX cho họ thời hạn 40 ngày làm việc để ghi có thủ công 15.759 USDT gửi từ Polymarket.

Khả năng thứ ba: sau khi xem xét giao dịch, bên nhận quyết định rủi ro quá cao và từ chối ghi có token. Trong trường hợp đó, họ có thể trả lại số tiền cho bạn.

Cuối cùng, còn khả năng thứ tư: tiền đến tay người nhận, nhưng hợp đồng thông minh ngăn cản người nhận sử dụng hoặc di chuyển token theo cách mong đợi. Khi đó, ngay cả việc hoàn trả cũng có thể là không thể — không phải vì người nhận không trung thực, mà vì cách hợp đồng của người gửi được cấu trúc.

Đó chính là lý do trước khi chuyển lần đầu tới một sàn hoặc dịch vụ swap, đáng để dành chút thời gian tìm hiểu ai mới là người gửi thực tế trên-chain.

Nếu bạn không chắc liệu giao dịch có phải là chuyển khoản đơn thuần từ địa chỉ của bạn hay không, hãy tìm một giao dịch đi trước đó trong lịch sử và xác nhận trên trình khám phá khối rằng nó không phát sinh từ hợp đồng thông minh. Nếu không có lịch sử giao dịch để kiểm tra, hãy gửi thử một khoản nhỏ trước để đảm bảo mọi thứ diễn ra suôn sẻ.

Tại rabbit.io, ngay cả khi bạn vô ý gửi cho chúng tôi tài sản crypto từ một hợp đồng thông minh, hãy yên tâm rằng chúng tôi sẽ làm mọi điều có thể để xử lý chuyển khoản nhanh nhất — hoặc trong trường hợp xấu nhất, trả lại tiền cho bạn.