BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Trang chủ
AI AI
Tin nhanh
Bài viết
Sự kiện
BlockBeats Pro
Thêm
Thông tin tài chính
Chuyên đề
Hệ sinh thái chuỗi khối
Mục nhập
Podcast
Data
OPRR
Partnered With:

Giới thiệu đơn giản về Solidity|Bài 29: Bộ chọn hàm Selector

Đọc bài viết này mất 6 phút
Bài viết này giới thiệu bộ chọn hàm là gì, mối quan hệ của nó với msg.data, chữ ký hàm và cách sử dụng nó để gọi hàm đích.
Tiêu đề gốc: " Giới thiệu tối giản về Solidity: 29. Bộ chọn chức năng Selector 》 
Tác giả gốc: 0xAA 


Gần đây tôi lại- Tìm hiểu sự vững chắc, củng cố các chi tiết và cũng viết "Giới thiệu tối giản về sự vững chắc" cho người mới sử dụng (các chuyên gia lập trình có thể tìm một hướng dẫn khác) và cập nhật 1-3 bài giảng mỗi tuần.


Tất cả các mã và hướng dẫn đều là nguồn mở trên github: github.com/AmazingAng/WTFSolidity


bộ chọn


Khi chúng ta gọi hàm của hợp đồng thông minh, 4 byte đầu tiên của mã byte được gửi là bộ chọn (bộ chọn hàm). Trong bài giảng này, chúng tôi sẽ giới thiệu bộ chọn là gì và cách sử dụng nó.


msg.data


msg.data là một biến toàn cục ở dạng rắn với giá trị là Hoàn thành calldata (bytecode của hàm gọi).


Trong đoạn mã sau, chúng ta có thể sử dụng sự kiện Nhật ký để xuất dữ liệu lệnh gọi của hàm mint:



Khi tham số là 0x2c44b726ADF1963cA47Af88B284C06f30380fC78, dữ liệu cuộc gọi đầu ra là  



Đây là một mớ byte lộn xộn mã có thể được chia thành hai phần:  



Trên thực tế, calldata cho hợp đồng thông minh biết tôi muốn gọi chức năng nào và tham số là gì.


Chữ ký hàm và bộ chọn


bộ chọn được định nghĩa là 4 giá trị băm đầu tiên của chữ ký hàm Byte, vậy chữ ký hàm là gì?


Thực ra, trong Bài giảng 21, chúng tôi đã giới thiệu ngắn gọn về chữ ký hàm, đó là “tên hàm (các kiểu tham số được phân tách bằng dấu phẩy)”. Ví dụ: chữ ký hàm của mint trong đoạn mã trên là "mint(địa chỉ)". Trong hợp đồng thông minh, các hàm khác nhau có chữ ký hàm khác nhau, vì vậy chúng ta có thể xác định hàm nào sẽ gọi thông qua chữ ký hàm.


Lưu ý rằng trong chữ ký hàm, uint và int được viết là uint256 và int256.


Chúng ta viết một hàm để xác minh xem bộ chọn của hàm mint có phải là 0x6a627842 hay không. Bạn có thể chạy hàm sau và xem kết quả.



Sử dụng bộ chọn


Chúng ta có thể sử dụng bộ chọn để gọi hàm đích. Ví dụ mình muốn gọi hàm mint thì chỉ cần sử dụng abi.encodeWithSelector để đóng gói và mã hóa selector cũng như các tham số của hàm mint và chuyển chúng cho hàm call:



Trong nhật ký, chúng tôi có thể thấy rằng hàm mint được gọi thành công và xuất ra sự kiện Nhật ký.


Tóm tắt


Trong bài giảng này chúng tôi đã giới thiệu hàm selector (bộ chọn) là gì, mối quan hệ của nó với msg.data, chữ ký hàm và cách sử dụng nó để gọi hàm đích.


Liên kết gốc


Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:

Nhóm Telegram đăng ký: https://t.me/theblockbeats

Nhóm Telegram thảo luận: https://t.me/BlockBeats_App

Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia

举报 Báo lỗi/Báo cáo
Chọn thư viện
Thêm mới thư viện
Hủy
Hoàn thành
Thêm mới thư viện
Chỉ mình tôi có thể nhìn thấy
Công khai
Lưu
Báo lỗi/Báo cáo
Gửi