Selector Hàm Solidity
Tạo selector hàm Solidity và hash Topic0 sự kiện từ chữ ký. Encode selector 4 byte, tra cứu chữ ký ERC20, DeFi phổ biến sẵn có trong CSDL.
Giới Thiệu Selector Hàm Solidity
Công cụ Selector Hàm Solidity giúp các nhà phát triển làm việc với selector hàm hợp đồng thông minh Ethereum và chữ ký sự kiện. Selector hàm là 4 byte đầu tiên của hash Keccak256 của chữ ký hàm và được sử dụng để xác định hàm nào sẽ gọi trong hợp đồng thông minh. Chữ ký sự kiện (Topic0) là hash Keccak256 đầy đủ 32 byte của chữ ký sự kiện. Công cụ này tạo selector từ chữ ký và tra cứu selector phổ biến trong cơ sở dữ liệu tích hợp.
Selector hàm là gì?
Selector hàm là một mã định danh 4 byte được sử dụng trong Ethereum để chỉ định hàm nào sẽ gọi trong hợp đồng thông minh. Nó được tính toán là 4 byte đầu tiên của hash Keccak256 của chữ ký hàm. Ví dụ, chữ ký hàm 'transfer(address,uint256)' tạo ra selector '0xa9059cbb'.
Selector hàm được tính toán như thế nào?
Selector hàm được tính toán bằng cách:
1. Tạo chữ ký hàm (vd: 'transfer(address,uint256)')
2. Tính toán hash Keccak256 của chữ ký
3. Lấy 4 byte đầu tiên (8 ký tự hex) của hash
4. Thêm tiền tố '0x' để tạo selector
Chữ ký sự kiện (Topic0) là gì?
Chữ ký sự kiện, còn được gọi là Topic0, là hash Keccak256 đầy đủ 32 byte của chữ ký sự kiện. Không giống như selector hàm chỉ sử dụng 4 byte, chữ ký sự kiện sử dụng toàn bộ hash. Điều này được sử dụng để xác định các sự kiện trong log giao dịch. Ví dụ, 'Transfer(address,address,uint256)' tạo ra một Topic0 duy nhất 32 byte.
Tại sao cần tra cứu selector hàm?
Khi phân tích hợp đồng thông minh hoặc giao dịch, bạn thường gặp các selector hàm thô (như 0xa9059cbb) mà không biết chúng đại diện cho hàm nào. Tra cứu selector giúp bạn hiểu hàm nào đang được gọi. Điều này đặc biệt hữu ích cho debug, audit hoặc hiểu các hợp đồng không quen thuộc.
Sự khác biệt giữa selector hàm và sự kiện là gì?
Selector hàm là 4 byte (8 ký tự hex) và xác định lời gọi hàm, trong khi chữ ký sự kiện là 32 byte (64 ký tự hex) và xác định sự kiện trong log. Selector hàm được sử dụng trong dữ liệu đầu vào giao dịch, trong khi chữ ký sự kiện xuất hiện dưới dạng Topic0 trong log giao dịch.

Selector hàm khác Topic0 sự kiện ở chỗ nào?
Selector hàm là 4 BYTE ĐẦU của Keccak256(funcName(types)) dùng trong calldata giao dịch. Topic0 sự kiện là 32 BYTE đầy đủ của Keccak256(EventName(types)) dùng làm topic đầu tiên trong log. Hàm gọn (4 byte) vì calldata tốn gas; sự kiện dùng hash đầy đủ vì log là index off-chain để search.
Tại sao phải dùng Keccak-256 thay vì SHA3-256 cho Ethereum?
Ethereum chuẩn hóa trên phiên bản Keccak-256 trước NIST — TRƯỚC khi NIST tinh chỉnh thành SHA3 cuối (thêm padding). Nhiều thư viện gọi biến thể Ethereum là keccak256 để phân biệt. SHA3-256 và Keccak-256 ra hash KHÁC nhau cho cùng đầu vào — dùng SHA3 sẽ ra selector sai.
Hai hàm khác nhau có thể vô tình trùng selector 4 byte không?
Có, gọi là va chạm selector. Xác suất xấp xỉ 1/4.3 tỷ cho mỗi cặp hàm (2^32). Va chạm nổi tiếng Solidity 0x42966c68: burn(uint256) và burn_uint256_(uint256). Trình biên dịch hiện đại cảnh báo va chạm trong một contract. Rủi ro chủ yếu ở proxy pattern nơi bạn kiểm soát delegatecall.
Tra cứu một selector 4 byte lạ trên Etherscan thế nào?
Dán vào CSDL chữ ký như 4byte.directory hoặc Openchain.xyz — chứa hàng triệu chữ ký chuẩn hóa crowdsource từ contract đã xác thực. Công cụ này link tới cả hai. Nếu selector không có trong CSDL, hàm có thể từ contract chưa verify hoặc chiến lược DEX riêng; đôi khi có thể ghép theo mẫu calldata.
Tính Năng Chính
- Tạo selector hàm (4 byte) từ chữ ký
- Tạo chữ ký sự kiện (Topic0, 32 byte)
- Hiển thị hash Keccak256 đầy đủ
- Tra cứu selector hàm phổ biến trong cơ sở dữ liệu tích hợp
- Xác thực định dạng chữ ký và selector
- Tải ví dụ ngẫu nhiên để thử nghiệm
- Liên kết đến cơ sở dữ liệu chữ ký bên ngoài (4byte.directory, Openchain)
- Bao gồm hơn 30 selector phổ biến của ERC20, DeFi và quản trị
- Tính toán phía client để bảo mật
