Tháng 8 năm 2011, trong khi cả thế giới crypto còn đang mơ hồ về khái niệm 'token', một dự án Việt Nam mang tên 'BitVN' đã thu hút sự chú ý của tôi với một lời hứa táo bạo: 'Phân phối token Bitcoin đầu tiên cho cộng đồng Việt Nam'. Họ tuyên bố sẽ airdrop 10.000 token BVT cho bất kỳ ai có ví Bitcoin, với lý do 'xây dựng cộng đồng phi tập trung'. Tôi, một kỹ sư phần mềm 28 tuổi lúc đó, đã không tin vào lời hứa. Tôi kiểm tra mã nguồn. Và tôi tìm thấy một lỗ hổng reentrancy trong smart contract phân phối mà họ gọi là 'bảo mật tối ưu'. Mỗi giao dịch đều để lại dấu vết.

BitVN không phải là một dự án lớn. Vào năm 2011, Bitcoin còn chưa được biết đến rộng rãi ở Việt Nam. Cộng đồng chỉ gồm vài trăm người, chủ yếu là các lập trình viên tò mò và một số nhà đầu tư mạo hiểm. Nhưng 'thị trường càng nhỏ, càng dễ thao túng'. BitVN đã huy động được 50 BTC từ các thành viên trong suốt một tháng, tương đương khoảng 1.500 USD thời đó – một số tiền lớn cho một cộng đồng nhỏ. Họ hứa hẹn token BVT sẽ có giá trị khi sàn giao dịch 'BitVN Exchange' ra mắt. Tôi không bị cuốn theo câu chuyện đó. Tôi nhìn vào cấu trúc.

Lỗ hổng nằm ở hàm withdraw() của contract. Dưới đây là mã nguồn tôi đã phân tích, được viết bằng một ngôn ngữ Solidity sơ khai (trước cả Ethereum mainnet, họ dùng một phiên bản thử nghiệm trên Testnet):
