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 về Solidity theo chủ nghĩa tối giản|Bài giảng 14: Hợp đồng và giao diện trừu tượng

Đọc bài viết này mất 10 phút
Lấy hợp đồng giao diện ERC721 làm ví dụ để giới thiệu các hợp đồng và giao diện trừu tượng một cách vững chắc, nhằm hiểu rõ hơn về tiêu chuẩn ERC721.
Tiêu đề gốc: " Giới thiệu tối giản về Solidity: 14. Hợp đồng và giao diện trừu tượng 》
Tác giả gốc: 0xAA   


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


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


Ở đây Trong bài giảng đầu tiên, chúng tôi lấy hợp đồng giao diện ERC721 làm ví dụ để giới thiệu hợp đồng trừu tượng (abstract) và giao diện (giao diện) một cách vững chắc nhằm giúp mọi người hiểu rõ hơn về tiêu chuẩn ERC721.


Hợp đồng trừu tượng


Nếu có ít nhất một chức năng chưa được thực hiện trong hợp đồng thông minh, thì đó là Nếu một hàm thiếu nội dung trong {} thì hợp đồng phải được đánh dấu là trừu tượng, nếu không quá trình biên dịch sẽ báo lỗi; ngoài ra, các hàm chưa thực hiện cần phải thêm ảo để có thể viết lại hợp đồng phụ. Lấy hợp đồng sắp xếp chèn trước của chúng tôi làm ví dụ, nếu chúng tôi chưa tìm ra cách triển khai chức năng sắp xếp chèn, chúng tôi có thể đánh dấu hợp đồng là trừu tượng và để người khác viết nó sau.



Giao diện


Giao diện tương tự như một hợp đồng trừu tượng, nhưng nó không thực hiện bất kỳ chức năng nào. Quy tắc cho giao diện:


- Không được chứa biến trạng thái

- Không được chứa hàm tạo

- Không được kế thừa ngoài giao diện Các hợp đồng khác ngoại trừ br>

Mặc dù giao diện không thực hiện bất kỳ chức năng nào nhưng nó rất quan trọng. Giao diện là xương sống của hợp đồng thông minh, xác định chức năng của nó và cách kích hoạt chúng: nếu hợp đồng thông minh triển khai một giao diện nhất định (chẳng hạn như ERC20 hoặc ERC721), các Dapp và hợp đồng thông minh khác sẽ biết cách tương tác với nó. Bởi vì giao diện cung cấp hai thông tin quan trọng:


- Bộ chọn byte4 cho từng hàm trong hợp đồng và tên hàm chữ ký hàm dựa trên chúng (theo loại tham số).

-Id giao diện (xem EIP165 để biết thêm thông tin)


Ngoài ra, giao diện tương đương với hợp đồng ABI (Giao diện nhị phân ứng dụng) và có thể loại trừ lẫn nhau.Chuyển đổi: Biên dịch giao diện có thể lấy ABI của hợp đồng và sử dụng công cụ abi-to-sol, bạn cũng có thể chuyển đổi tệp json ABI thành tệp sol giao diện.


Chúng tôi lấy hợp đồng giao diện ERC721 IERC721 làm ví dụ, nó xác định 3 sự kiện và 9 chức năng. Tất cả các NFT tiêu chuẩn ERC721 đều thực hiện các chức năng này. Chúng ta có thể thấy rằng sự khác biệt giữa giao diện và hợp đồng thông thường là mỗi hàm kết thúc bằng ; thay vì phần thân hàm { }.



Sự kiện IERC721


IERC721 chứa 3 sự kiện, trong đó sự kiện Chuyển giao và Phê duyệt cũng có trong ERC20 .


- Sự kiện chuyển: được phát hành trong quá trình chuyển, ghi lại địa chỉ gửi Token từ, địa chỉ nhận tới và tokenid.


- Sự kiện phê duyệt: được phát hành trong quá trình ủy quyền, ghi lại chủ sở hữu địa chỉ ủy quyền, địa chỉ được ủy quyền được phê duyệt và tokenid`.


- Sự kiện ApprovalForAll: phát hành trong quá trình cấp phép lô, ghi nhận địa chỉ cấp phép lô, địa chỉ chủ sở hữu, người điều hành địa chỉ được ủy quyền và phê duyệt hay không.


Hàm IERC721 


balanceOf: Trả về số dư nắm giữ NFT của một địa chỉ.


ownerOf: Trả về chủ sở hữu của một tokenId nhất định.


transferFrom: chuyển khoản thông thường, các tham số là địa chỉ chuyển từ, địa chỉ nhận đến và tokenId.


safeTransferFrom: chuyển an toàn (nếu người nhận là địa chỉ hợp đồng thì giao diện ERC721Receiver sẽ được yêu cầu triển khai). Các tham số là địa chỉ truyền từ, địa chỉ nhận tới và tokenId.


phê duyệt: Cho phép một địa chỉ khác sử dụng NFT của bạn. Các tham số là địa chỉ được ủy quyền phê duyệt và tokenId.


getApproved: Truy vấn địa chỉ mà tokenId đã được phê duyệt.


setApprovalForAll: Ủy quyền hàng loạt NFT mà bạn nắm giữ theo đợt cho nhà điều hành địa chỉ.


isApprovedForAll: Truy vấn xem NFT của một địa chỉ nhất định đã được cấp phép theo lô cho một địa chỉ nhà điều hành khác hay chưa.


safeTransferFrom: Chức năng nạp chồng để truyền an toàn, các tham số bao gồm dữ liệu.


Khi nào nên sử dụng giao diện?


Nếu chúng tôi biết rằng một hợp đồng triển khai giao diện IERC721, chúng tôi có thể tương tác với hợp đồng đó mà không cần biết cách triển khai mã cụ thể của hợp đồng đó.


Ape nhàm chán BAYC thuộc về ERC721 Mã thông báo , thực hiện các chức năng của giao diện IERC721. Chúng ta không cần biết mã nguồn của nó, chúng ta chỉ cần biết địa chỉ hợp đồng của nó và có thể tương tác với nó bằng giao diện IERC721. Ví dụ: sử dụng BalanceOf() để truy vấn số dư BAYC của một địa chỉ nhất định và sử dụng safeTransferFrom() để chuyển BAYC.



Tóm tắt


Trong bài giảng này, tôi đã giới thiệu về hợp đồng trừu tượng ở dạng `solidity` (`abstract ` ) và giao diện (`giao diện`), chúng vừa có thể viết mẫu vừa giảm bớt sự dư thừa mã. Chúng ta cũng đã nói về hợp đồng giao diện ERC721 IERC721 và cách sử dụng nó để tương tác với hợp đồng BAYC.


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