Từ ERC-20 đến ERC-3525: Các trường hợp sử dụng và phát triển hợp đồng mã thông báo tiêu chuẩn

CoinExVietNam

Vip Member
Bài viết
409
Điểm tương tác
22
Điểm
18
Giới thiệu
Tất cả chúng ta đều quen thuộc với mã thông báo, NFT và các tiêu chuẩn mã thông báo cổ điển, chẳng hạn như ERC-20 và ERC-721, dựa trên chúng. Cụ thể, ERC-20 được thiết kế cho các mã thông báo có thể thay thế được, trong khi ERC-721 đại diện cho một tiêu chuẩn cho các mã thông báo không thể thay thế và phù hợp với các tác phẩm nghệ thuật hoặc tài sản quý hiếm. Điều đó cho thấy, những mã thông báo này được triển khai như thế nào? Làm thế nào chúng có thể được áp dụng cho các ứng dụng liên quan?
Hôm nay, chúng ta sẽ xem xét các nguyên tắc, phạm vi áp dụng và xu hướng tương lai của các hợp đồng mã thông báo này, bao gồm các tiêu chuẩn mã thông báo bao gồm ERC-20, ERC-721, ERC-1155 và ERC-3525 được hoàn thiện gần đây.
(Các mã liên quan đến ERC-20, ERC-721 và ERC-1155 là từ OpenZeppelin và mã thông báo ERC-3525 là từ Solv Protocol)
Hash Table
Trước khi đi vào nguyên tắc của hợp đồng mã thông báo, trước tiên chúng ta phải giải quyết một khái niệm quan trọng: hash table. Nói một cách đơn giản, hash table là một cấu trúc dữ liệu để cho phép chúng ta nhanh chóng tìm ra các giá trị dựa trên các khóa. Hợp đồng mã thông báo sử dụng hash table để lưu trữ thông tin về tài sản và người được ủy quyền. Để biết thêm thông tin cụ thể về hash table, vui lòng tham khảo tại: https://en.wikipedia.org/wiki/Hash_table
Băm dữ liệu & Chức năng
Token tiến hành băm dữ liệu theo nhiều cách khác nhau. Phương pháp băm dữ liệu xác định các chức năng của mã thông báo và có thể được coi là cách nội dung được cấu trúc và ghi lại. Tùy thuộc vào mục đích cụ thể, băm dữ liệu có thể được chia thành tài khoản chung và tài khoản cá nhân. Tài khoản chung ghi lại trạng thái tài sản tổng thể của mã thông báo (loại, số lượng và ủy quyền) và cũng chứa cài đặt của những người/quản trị viên được ủy quyền (những người được ủy quyền có thể tự do chuyển nhượng/ủy quyền lại tài sản của chủ sở hữu tài sản).
Trong ngữ cảnh này, các chức năng đề cập đến thiết kế dựa trên mã thông báo của băm dữ liệu và các chức năng có thể đạt được của mã thông báo (tức là các chức năng công khai), bao gồm truy vấn & truyền, đúc và ghi nội dung.
Trong các đoạn dưới đây, chúng tôi sẽ xem xét các tiêu chuẩn mã thông báo khác nhau về chức năng và hàm băm dữ liệu của chúng.
ERC-20
1. Băm dữ liệu

Tài khoản chung: ERC-20 quản lý và ghi lại tài sản mã thông báo tổng thể thông qua bảng băm: Sắp xếp (địa chỉ => uint256). Cụ thể, Khóa là địa chỉ người dùng và Giá trị được sắp xếp là một số nguyên dương được sử dụng để ghi lại số lượng mã thông báo thuộc sở hữu của mỗi địa chỉ.

Sắp xếp (địa chỉ=> uint256)
Địa chỉ
Số lượng
0x1...​
100​
0x2...​
200​
...​


Sắp xếp(địa chỉ => (sắp xếp(địa chỉ => uint256))
Địa chỉ cá nhân
Địa chỉ quản trị viên
Số tiền có thể quản lý
0x1​
0x2​
100​
0x3​
200​
....​
0x123​
....​
....​
....​
0x455​
....​
...​
2. Chức năng (cơ bản)
ERC20
Hàm
Chức năng
Đọc
name(), decimals(), symbol()​
Xem tên, ký hiệu và số thập phân của mã thông báo​
totalSupply()​
Xem nguồn cung cấp mã thông báo​
balanceOf(address)​
Xem các mã thông báo do một địa chỉ nắm giữ​
allowance(address, address)​
Xem hạn mức mã thông báo tối đa được nắm giữ bởi một địa chỉ có thể được quản lý bởi một địa chỉ khác​
Viết
Chuyển
transfer(address, uint256), transferFrom(address, address, uint256)​
Chuyển bất kỳ số lượng mã thông báo nào (được thực hiện bởi người được ủy quyền/chủ sở hữu)​
Ủy quyền
approve(address, uint256)​
Cấp ủy quyền mã thông báo cho một địa chỉ và đặt hạn mức​
increaseAllowance(address, uint256), decreaseAllowance(address, uint256)​
Tăng/giảm số tiền mà một địa chỉ có thể quản lý​
ERC-20 cung cấp gần như tất cả các điều kiện cần thiết để lưu thông và để mã thông báo được sử dụng làm vốn chủ sở hữu và hàng hóa. Thêm vào đó, tiêu chuẩn này cũng cho phép dễ sử dụng.
ERC-721
1. Băm dữ liệu

Tài khoản chung:

Sắp xếp(uint256 => địa chỉ)
id
Địa chỉ
1​
0x1...​
2​
0x2...​
...​


Sắp xếp(địa chỉ => uint256)
Địa chỉ
Số lượng
0x1...​
3​
0x2...​
5​
...​


Sắp xếp(uint256 => địa chỉ)
id
Địa chỉ quản trị viên
1​
0x1...​
2​
0x2...​
...​

ERC-1155
1. Băm dữ liệu

Trong ERC-1155, cả tài khoản tổng thể và tài khoản cá nhân đều được triển khai đồng thời. Với ERC-1155, mã thông báo được ghi lại bằng cách sử dụng Sắp xếp có địa chỉ trỏ đến Sắp xếp.

Sắp xếp(uint256 => Sắp xếp(địa chỉ => uint256))
id
Địa chỉ
Số lượng
1​
0x1​
200​
0x2​
100​
....​
2​
....​
....​
....​

2. Chức năng
ERC1155
Hàm
Chức năng
Đọc
uri(uint256)​
Lấy URI của ID​
totalSupply()​
Xem tổng cung mã thông báo​
balanceOf(address, uint256), balanceOfBatch(address[], uint256[])​
Xem số dư của một địa chỉ dưới ID, với truy vấn hàng loạt được hỗ trợ​
supportsInterface(bytes4)​
Kiểm tra xem việc nhận mã thông báo có hỗ trợ ERC-1155 hay không​
isApprovedForAll(address, address)​
Kiểm tra xem một địa chỉ có phải là người được ủy quyền của địa chỉ đó hay không​
Viết
Chuyển
safeTransferFrom(address, address, uint256, uint256, bytes)​
Chuyển một số ID nhất định đến một địa chỉ​
safeTransferFrom(address, address, uint256[], uint256[], bytes)​
Một địa chỉ chuyển các mã thông báo tương ứng với nhiều ID đến một địa chỉ khác hàng loạt​
Uỷ quyền
setApprovalForAll(address, bool)​
Cấp toàn quyền cho việc quản lý một địa chỉ cá nhân​


ERC-3525

Mặc dù ERC-3525 là một hợp đồng tương đối phức tạp hơn, nhưng nó cung cấp một loạt các chức năng và hồ sơ hoàn chỉnh, cũng như khả năng tùy chỉnh cao.
1. Data Hashing
Tài khoản chung: ERC-3525 đã xây dựng một cấu trúc đổi mới được gọi là TokenData, được sử dụng để mô tả một ID. Đối với những bạn không quen thuộc với mã, cấu trúc này có thể được coi là thẻ mô tả của ID có chứa ID, Slot (một đổi mới lớn của ERC-3525), số lượng mã thông báo, mọi người, người được ủy quyền (có thể chỉ là một người được ủy quyền) và địa chỉ được ủy quyền có thể chi tiêu số dư của ID.
1665504796012.png
Với thẻ này, chúng ta có thể ghi lại thông tin của từng ID, sau đó đặt các thẻ đó vào một danh sách gọi là _allTokens để lưu chúng.

_allTokens: [ TokenData, TokenData, TokenData............ ]​

Điều đó nói lên rằng một thẻ được định vị như thế nào khi chúng ta muốn kiểm tra nó? ERC-3525 sắp xếp một ID đến vị trí cấu trúc của nó trong danh sách. Ví dụ: nếu vị trí của ID 214 là 1, thì _allTokens [1] sẽ dẫn chúng ta đến thẻ mục tiêu trong danh sách. Danh sách _allTokens ghi lại trạng thái của tất cả nội dung ERC-3525.

Sắp xếp(uint256 => địa chỉ)
id
Vị trí
123​
0​
214​
1​
...​
2​
Về ủy quyền ID, ERC-3525 bổ sung thêm mục tiêu là các giá trị số. Có nghĩa là, nó đánh dấu hạn ngạch tối đa theo các địa chỉ khác nhau bằng cách sử dụng ID làm khóa.

Sắp xếp(uint256 => Sắp xếp(địa chỉ => uint256))
id
Địa chỉ quản trị viên
Chuyển tối đa được phép
123​
0x1​
200​
0x2​
300​
....​
214​
....​
....​
....​
Tài khoản cá nhân: ERC-3525 xây dựng thẻ AddressData và bảng băm để quản lý các tài khoản cá nhân. Thẻ bao gồm danh sách các ID của các Mã được sở hữu, bảng băm về vị trí của các ID được sở hữu trong danh sách tài khoản tổng thể và bảng băm của những người được ủy quyền của tài khoản. Nói cách khác, thẻ ghi lại ID được nắm giữ bởi các tài khoản cá nhân (tất cả các ID đều được ghi lại) và những người được ủy quyền của tài khoản.
1665504826398.png
Sau đó, sắp xếp được sử dụng để ghi lại thông tin thẻ tương ứng (AddressData) bằng cách sử dụng địa chỉ cá nhân làm khóa.

Sắp xếp(địa chỉ => Địa chỉ dữ liệu)
Address
Individual card
0x1​
AddressData​
0x2​
AddressData​

Slot

Nói chung, bản ghi dữ liệu của ERC 3525 là toàn diện và được tổ chức tốt. Mặc dù vậy, cho đến nay, ngoài các bản ghi được tài liệu tốt hơn, tiêu chuẩn không khác nhiều so với ERC-1155. Điều này đưa chúng ta đến Slot, một biến được thêm vào thẻ ID. Đó là Slot làm cho ERC-3525 có khả năng tùy biến cao và cho phép các chức năng không có trong ERC-1155.
Slot cũng là một cấu trúc. Tuy nhiên, trong ERC-3525, Slots có thể tùy chỉnh. Nói cách khác, các nhà phát triển có thể thêm bất kỳ số nào và bất kỳ loại biến nào vào Slot theo nhu cầu sản phẩm cụ thể. Ví dụ: trong trường hợp trái phiếu chuyển đổi trên Solv Protocol, thông tin mà Slots có thể chứa bao gồm Ngày đáo hạn, Giá chuyển đổi và Có thể chuyển đổi. Vị trí này, kết hợp với các biến như ID (# 6800) và Số dư (2.400 USDC), cho phép các nhà phát triển tạo NFT trái phiếu chuyển đổi.
1665504880548.png
2. Chức năng
Từ khi ERC-3525 bao gồm các hồ sơ kế toán toàn diện, nó cung cấp một loạt các chức năng và giúp chúng ta có nhiều không gian hơn cho trí tưởng tượng. Đặc biệt, một tính năng chính của ERC-3525 là nó nhận ra việc chuyển các giá trị ID và chuyển giá trị giữa các ID thuộc sở hữu của các địa chỉ riêng lẻ, điều này mở ra nhiều khả năng hơn cho NFT.

ERC721
Hàm
Chức năng
Đọc
name(), valueDecimals(), symbol()​
Đọc tên, ký hiệu và số thập phân giá trị của bộ sưu tập​
slotURI(uint256), tokenURI(uint256), contractURI()​
Đọc URI của vị trí, URI của ID và URI của hợp đồng​
totalSupply()​
Xem số lượng ID trong toàn bộ bộ sưu tập​
balanceOf(address)​
Xem số lượng ID thuộc sở hữu của địa chỉ​
ownerOf(uint256)​
Xem chủ sở hữu của ID​
approve(uint256, address, uint256)​
Cấp quyền cho một số lượng ID nhất định cho một địa chỉ​
supportsInterface(bytes4)​
Kiểm tra xem việc nhận mã thông báo có hỗ trợ ERC-3525 hay không​
getApproved(uint256), isApprovedForAll(address, address)​
Xem địa chỉ của người được ủy quyền liên quan đến ID và kiểm tra xem một địa chỉ có phải là người được ủy quyền của địa chỉ đó hay không​
slotOf(uint256)​
Xem thông tin vị trí của một ID​
allowance(address, address)​
Kiểm tra xem một địa chỉ có thể quản lý một địa chỉ khác hay không​
tokenByIndex(uint256)​
Xem ID theo vị trí trong mảng lưu trữ ID đó​
tokenOfOwnerByIndex(address, uint256)​
Xem ID của một địa chỉ và tìm vị trí của mảng tương ứng với ID​
Viết
Chuyển
transferFrom(address, address, uint256)​
Chuyển toàn bộ ID đến một địa chỉ (giống như chuyển theo ERC-721)​
transferFrom(uint256, address, uint256)
Chuyển một giá trị nhất định của ID sang ID mới, vị trí của ID mới giống với vị trí của ID hiện có
transferFrom(uint256, uint256, uint256)
Chuyển một giá trị nhất định của một ID sang một ID khác (chuyển giá trị giữa các ID)
Uỷ quyền
setApprovalForAll(address, bool)​
Cấp toàn quyền cho việc quản lý một địa chỉ cá nhân​
approve(uint256, address, uint256)​
Cấp quyền quản lý một số lượng ID nhất định​

Kết luận
Tóm lại, ERC-20, ERC-721, ERC-1155 và ERC-3525 đều có các trường hợp sử dụng duy nhất và các dự án nên chọn tiêu chuẩn mã thông báo phù hợp nhất theo nhu cầu cụ thể về mã thông báo của họ. Mặc dù vậy, cần lưu ý rằng ERC-3525 mới phức tạp hơn nhiều so với cả ba hợp đồng khác. Nó không chỉ kế thừa các tính năng của các tiêu chuẩn trước mà còn giới thiệu cấu trúc dữ liệu Slot độc đáo, cho phép nó thực hiện các tác vụ mới. Ngoài ra, mặc dù ERC-3525 cung cấp nhiều chức năng hơn, nó vẫn duy trì tính trật tự của hồ sơ, điều này đánh giá chúng tôi là một sự đổi mới đáng chú ý. Điều đó nói rằng, xem xét các thông tin và hồ sơ đa dạng hơn, có thể thấy trước rằng phí khí đốt của ERC-3525 sẽ đắt và tiêu chuẩn sẽ phải chịu các cuộc tấn công lỗ hổng không xác định (sau tất cả, nó đã đứng trước thử thách của thời gian).
 
Bên trên