Cơ bản
Giao ngay
Giao dịch tiền điện tử một cách tự do
Giao dịch ký quỹ
Tăng lợi nhuận của bạn với đòn bẩy
Chuyển đổi và Đầu tư định kỳ
0 Fees
Giao dịch bất kể khối lượng không mất phí không trượt giá
ETF
Sản phẩm ETF có thuộc tính đòn bẩy giao dịch giao ngay không cần vay không cháy tải khoản
Giao dịch trước giờ mở cửa
Giao dịch token mới trước niêm yết
Futures
Truy cập hàng trăm hợp đồng vĩnh cửu
CFD
Vàng
Một nền tảng cho tài sản truyền thống
Quyền chọn
Hot
Giao dịch với các quyền chọn kiểu Châu Âu
Tài khoản hợp nhất
Tối đa hóa hiệu quả sử dụng vốn của bạn
Giao dịch demo
Giới thiệu về Giao dịch hợp đồng tương lai
Nắm vững kỹ năng giao dịch hợp đồng từ đầu
Sự kiện tương lai
Tham gia sự kiện để nhận phần thưởng
Giao dịch demo
Sử dụng tiền ảo để trải nghiệm giao dịch không rủi ro
CFD
Phái sinh Hợp đồng Chênh lệch Cổ phiếu
Cổ phiếu Hoa Kỳ
Tiếp cận cổ phiếu và quỹ ETF thực của Hoa Kỳ
Cổ phiếu Hongkong
Giao dịch cổ phiếu chất lượng được niêm yết tại Hongkong
Cổ phiếu Hàn Quốc
SK Hynix
Giao dịch cổ phiếu Hàn Quốc thực và đầu tư vào các tài sản phổ biến
Futures cổ phiếu
Đòn bẩy cao, giao dịch 24/7
Cổ phiếu token hóa
Được hỗ trợ bởi tài sản cổ phiếu thực
IPO Access
Mở khóa quyền truy cập đầy đủ vào các IPO cổ phiếu toàn cầu
GUSD
3.8%
Đúc GUSD để nhận lợi suất từ RWA kho bạc
Hoạt động cổ phiếu
Giao dịch cổ phiếu phổ biến và nhận airdrop hấp dẫn
Launch
CandyDrop
Sưu tập kẹo để kiếm airdrop
Launchpool
Thế chấp nhanh, kiếm token mới tiềm năng
HODLer Airdrop
Nắm giữ GT và nhận được airdrop lớn miễn phí
IPO Access
Mở khóa quyền truy cập đầy đủ vào các IPO cổ phiếu toàn cầu
Điểm Alpha
Giao dịch trên chuỗi và nhận airdrop
Điểm Futures
Kiếm điểm futures và nhận phần thưởng airdrop
Đầu tư
Simple Earn
Kiếm lãi từ các token nhàn rỗi
Đầu tư tự động
Đầu tư tự động một cách thường xuyên.
Sản phẩm tiền kép
Kiếm lợi nhuận từ biến động thị trường
Soft Staking
Kiếm phần thưởng với staking linh hoạt
Vay Crypto
0 Fees
Thế chấp một loại tiền điện tử để vay một loại khác
Trung tâm cho vay
Trung tâm cho vay một cửa
Trung tâm tài sản VIP
Kế hoạch tăng trưởng tài sản cao cấp
Gate Wealth
Nắm quyền kiểm soát tương lai tài chính của bạn
Quỹ định lượng
Chiến lược định lượng hàng đầu
Staking
Stake tiền điện tử để kiếm tiền từ các sản phẩm PoS
Đòn bẩy thông minh
Đòn bẩy không thanh lý
GUSD
3.8%
Đúc GUSD để nhận lợi suất từ RWA kho bạc
Khuyến mãi
AI
Gate AI
Trợ lý AI đa năng đồng hành cùng bạn
Gate AI Bot
Sử dụng Gate AI trực tiếp trong ứng dụng xã hội của bạn
GateClaw
Gate Tôm hùm xanh, mở hộp là dùng ngay
Gate for AI Agent
Hạ tầng AI, Gate MCP, Skills và CLI
Gate Skills Hub
Hơn 10.000 kỹ năng
Từ văn phòng đến giao dịch, thư viện kỹ năng một cửa giúp AI tiện lợi hơn
Mình muốn chia sẻ một điều khá quan trọng mà có thể bạn vẫn chưa hiểu rõ lắm - đó là lỗ hổng reentrancy trong smart contract. Nếu bạn đang phát triển dapp hoặc làm việc với blockchain, cái này là must-know.
Vấn đề cơ bản của reentrancy là gì? Nó xảy ra khi một smart contract gọi đến contract khác, và contract đó có thể gọi ngược lại contract gốc trong khi nó vẫn đang chạy. Kẻ tấn công có thể lợi dụng khoảng thời gian này để đánh cắp tiền.
Hãy tưởng tượng ContractA có 10 Ether và ContractB đã gửi 1 Ether vào đó. Khi ContractB gọi hàm rút tiền, ContractA sẽ kiểm tra xem số dư có lớn hơn 0 không, nếu có thì gửi Ether trả lại. Nhưng ở đây là vấn đề - ContractA chỉ cập nhật số dư sau khi gửi tiền. Nên trong lúc gửi tiền, nếu ContractB có hàm fallback, nó có thể gọi lại hàm rút tiền của ContractA. Vì số dư chưa được cập nhật, kiểm tra sẽ lại thành công, và nó lại nhận thêm 1 Ether. Cái vòng lặp này tiếp tục cho đến khi ContractA hết sạch.
Mình sẽ chỉ bạn ba cách để bảo vệ contract khỏi cuộc tấn công reentrancy này.
Cách thứ nhất là sử dụng modifier nonReentrant. Ý tưởng rất đơn giản - bạn khóa contract trong khi hàm đang chạy. Nếu có ai cố gắng gọi lại hàm đó, nó sẽ bị từ chối vì contract đang bị khóa. Bạn phải chạy hết mã rồi mới mở khóa, và lúc đó kiểm tra sẽ thất bại.
Cách thứ hai là dùng mẫu Checks-Effects-Interactions. Thay vì cập nhật số dư sau khi gửi tiền, bạn cập nhật nó ngay sau kiểm tra nhưng trước khi gửi. Bằng cách này, ngay cả khi contract khác gọi ngược lại, số dư đã là 0 rồi, nên kiểm tra sẽ thất bại. Đó là lý do tại sao thứ tự rất quan trọng - kiểm tra trước, rồi cập nhật hiệu ứng, cuối cùng mới tương tác với contract khác.
Cách thứ ba là tạo một GlobalReentrancyGuard riêng biệt, đặc biệt hữu ích khi bạn có nhiều contract tương tác với nhau. Thay vì bảo vệ từng hàm, bạn tạo một hợp đồng guard dùng chung, lưu trữ trạng thái khóa ở một nơi. Khi bất kỳ contract nào cố gắng nhập một hàm được bảo vệ, nó sẽ kiểm tra với guard này. Nếu guard nói contract đang bị khóa, giao dịch sẽ bị từ chối. Cách này rất mạnh mẽ vì nó ngăn chặn reentrancy không chỉ trong một contract mà còn giữa nhiều contract.
Mình khuyên bạn nên áp dụng cả ba kỹ thuật tùy vào tình huống. Với các hàm rút tiền hoặc chuyển tài sản, luôn sử dụng nonReentrant hoặc Checks-Effects-Interactions. Và nếu dự án của bạn có hệ thống contract phức tạp, hãy xem xét GlobalReentrancyGuard như một lớp bảo vệ thêm.
Đây là một trong những lỗ hổng phổ biến nhất gây mất tiền lớn, nên hiểu rõ về reentrancy là cực kỳ quan trọng nếu bạn muốn viết smart contract an toàn.