Tất cả các bạn đều quen thuộc với các mã thông báo ERC20 vì bạn có thể sở hữu một vài, được phân phối bởi một số hình thức bán mã thông báo. Nhưng bạn có biết ngoài ERC20 còn tồn tại nhiều tiêu chuẩn khác không? Ethereum có một lịch sử lâu đời về các tiêu chuẩn được phát triển.
Để bạn hiểu rõ hơn về ý nghĩa của ERC, nó là viết tắt của “Ethereum Request for Comment”. Đây là một đề xuất được gửi để thảo luận và đề xuất cho tiêu chuẩn thực tế. Con số (như 20) đề cập đến một số phát hành trên nền tảng chia sẻ mã Github. Đầu tiên, chúng ta hãy xem xét tiêu chuẩn ERC20.
Tiêu chuẩn ERC20
Chính xác thì tiêu chuẩn ERC20 là gì?
Sự ra đời của mã thông báo ERC20 đã cách mạng hóa thị trường tiền điện tử và mở ra cánh cửa cho rất nhiều ICO tiền điện tử dự án mà thế giới đã chứng kiến trong năm 2017. Được giới thiệu vào năm 2015, mã ERC20 phác thảo một danh sách cụ thể các quy tắc mà một mã thông báo dựa trên Ethereum nhất định phải triển khai, đơn giản hóa quá trình lập trình các chức năng của mã thông báo trên chuỗi khối của Ethereum. Về cơ bản, mã thông báo ERC20 là dạng hợp đồng thông minh đặc biệt sử dụng chuỗi khối của Ethereum.
Các ví dụ nổi bật nhất về mã thông báo ERC20 bao gồm Bancor, EOS, Tronix, BNB, VeChain và Bankex.
Trước khi có sự đổi mới của tiêu chuẩn ERC20 cho mã thông báo Ethereum, các nhà mã hóa phải tạo ra các tiêu chuẩn triển khai cụ thể để phát triển mã thông báo và khởi chạy nó trên mạng Ethereum. Tuy nhiên, mã thông báo ERC20 đã đơn giản hóa quá trình tạo mã thông báo, nhờ vào giao thức được tổ chức hợp lý và các tiêu chuẩn hợp đồng thông minh. Mã ERC20 làm giảm bớt sự phức tạp liên quan đến việc triển khai các hợp đồng thông minh của mã thông báo, điều này làm giảm đáng kể khả năng phá vỡ hợp đồng của mã thông báo.
Tính đến tháng 4 năm 2018, có 66.468 hợp đồng mã thông báo ERC20, nhờ sự đồng nhất của mã token được cung cấp bởi tiêu chuẩn ERC20, giúp các sàn giao dịch tiền điện tử dễ dàng niêm yết các mã thông báo khác nhau trên nền tảng giao dịch của họ. Do đó, tiêu chuẩn ERC20 đã giúp cộng đồng tiền điện tử khắc phục các vấn đề thanh khoản có thể liên quan đến một số lượng lớn các mã thông báo dựa trên Ethereum như vậy.
Các chức năng của mã thông báo ERC20:
Mã ERC20 phác thảo sáu chức năng cụ thể cho mã thông báo, đó là
1- Nhận tổng nguồn cung cấp mã thông báo thông qua "Tổng cung" chức năng
2- Lấy số dư mã thông báo của một tài khoản khác được liên kết với "_chủ nhân" địa chỉ qua " balanceOf (address _owner) không đổi trả về (số dư uint256)" chức năng.
3- Gửi một số lượng mã thông báo cụ thể "_giá trị" đến một địa chỉ nhất định qua " transfer (address _to, uint256 _value) trả về (bool thành công)" chức năng.
4- Gửi một lượng mã thông báo cụ thể "_giá trị" từ một địa chỉ mã thông báo (hợp đồng) đến một địa chỉ mã thông báo (hợp đồng) khác thông qua "transferFrom (address _from, address _to, uint256 _value) trả về (bool thành công)" chức năng.
5- Cho phép một tài khoản cụ thể rút mã thông báo từ tài khoản của một người nhiều lần, trong khi xác định trước giới hạn trên cho số lượng mã thông báo được rút bằng "_giá trị" tham số. Điều này có thể đạt được thông qua "chấp thuận (address _spender, uint256 _value) trả về (bool thành công)". Giới hạn trên cho việc rút tiền, tức là "_giá trị" tham số, có thể được ghi đè khi chức năng được gọi lại.
6- Trả lại số lượng còn lại của mã thông báo, trong số tiền đặt trước được xác định bởi giới hạn trên được phép chi tiêu bởi "_spender" để rút từ tài khoản của "_chủ nhân". Điều này có thể được thực hiện thông qua "trợ cấp (địa chỉ * _owner *, địa chỉ * _spender *) trả về không đổi (còn lại uint256)" chức năng.
Sáu chức năng này được xác định bởi mã ERC20 đại diện cho các vấn đề chức năng nền tảng, bao gồm cách các mã thông báo này sẽ được chuyển giữa các tài khoản khác nhau và cách người dùng có thể truy xuất dữ liệu được liên kết với mã thông báo ERC20 nhất định. Nhóm chức năng này được quy định để đảm bảo rằng các mã thông báo dựa trên Ethereum sẽ hoạt động tương tự trong bất kỳ phần nào của nền tảng Ethereum. Do đó, tất cả các ví tiền điện tử tuân thủ đồng ether cũng sẽ hỗ trợ mã thông báo dựa trên tiêu chuẩn ERC20.
Lỗi nghiêm trọng:
ERC20 là tiêu chuẩn mã thông báo đầu tiên của Ethereum. Như thường thấy với mã mới, nó chứa một số lỗi hoặc sai lầm logic. ERC20 giả định hai cách thực hiện giao dịch mã thông báo. Trước hết, chức năng chuyển cho phép bạn gửi mã thông báo đến địa chỉ của ai đó. Nếu bạn muốn gửi mã thông báo vào một hợp đồng thông minh, bạn nên sử dụng kết hợp ‘phê duyệt + transferFrom’. Bạn nên cho phép hợp đồng này rút mã thông báo của mình thông qua chức năng phê duyệt. Sau đó, bạn cần gọi một chức năng của hợp đồng sẽ xử lý khoản tiền gửi của bạn và rút các mã thông báo của bạn thông qua chức năng transferFrom.
Điều gì sẽ xảy ra nếu bạn tình cờ gửi mã thông báo vào một hợp đồng có chức năng chuyển khoản? Giao dịch sẽ thành công nhưng giao dịch này sẽ không được công nhận bởi hợp đồng người nhận. Ví dụ: nếu bạn gửi mã thông báo đến một hợp đồng trao đổi phi tập trung, thì hợp đồng trao đổi sẽ nhận được mã thông báo của bạn nhưng nó sẽ không ghi có mã thông báo này vào số dư mã thông báo trao đổi của bạn. Hơn nữa, nếu hợp đồng trao đổi phi tập trung không triển khai chức năng trích xuất mã thông báo khẩn cấp, thì không thể lấy lại mã thông báo của bạn trong mọi trường hợp, dẫn đến việc mất mã thông báo vĩnh viễn. Do lỗi này, hệ sinh thái Ethereum đã mất hàng triệu đô la.
Tại sao chúng tôi vẫn sử dụng tiêu chuẩn ERC20?
Người dùng Reddit u / Dexaran, người tạo ra tiêu chuẩn ERC223, là một trong những nhà phát triển đầu tiên đã thông báo cho cộng đồng về lỗi nói trên. Chúng tôi đã hỏi anh ấy tại sao ERC20 vẫn được sử dụng rộng rãi như vậy, ngay cả khi biết về lỗi nghiêm trọng này. Anh ấy đưa ra những lý do sau:
- Vì sự vô trách nhiệm hình sự của các nhà phát triển mã thông báo đối với những việc làm.
- Bởi vì Ethereum Foundation vẫn đang quảng bá tiêu chuẩn mã thông báo ERC20 ngay cả khi nó được biết là có chứa lỗi. Tình hình tương tự như đã xảy ra với TheDAO trước đây. Họ cần phải nói "Dừng việc này ngay bây giờ" nhưng họ sẽ không.
- Bởi vì lý do chính để phát triển mã thông báo là lấy vốn, thay vì tạo ra sản phẩm.
- Bởi vì sử dụng một tiêu chuẩn khác sẽ dẫn đến hiệu ứng mạng cao hơn. Đây không phải là những gì chúng ta thực sự cần vì mạng Ethereum đã có vấn đề về khả năng mở rộng.
Tiêu chuẩn ERC223
Các ERC223 tiêu chuẩn được đề xuất bởi u / Dexaran, người đã giúp tạo ra bài viết này. ERC223 là một tiêu chuẩn mã thông báo cho phép chuyển mã thông báo hoạt động chính xác như các giao dịch ether. ERC223 sử dụng xử lý sự kiện (coi một giao dịch là một sự kiện) để ngăn chặn việc mất mã thông báo trong các giao dịch chưa xử lý. Tiêu chuẩn cải tiến này giải quyết lỗi nghiêm trọng ERC20 bằng cách làm cho chức năng chuyển tiền gặp lỗi khi chuyển khoản không hợp lệ và hủy giao dịch để không có tiền bị mất. Tóm lại, ERC223 tập trung vào Bảo vệ.
Bổ sung và vấn đề
ERC223 thêm một tham số dữ liệu bổ sung vào chức năng chuyển, để cho phép các hoạt động phức tạp hơn chỉ là chuyển mã thông báo.
Mối quan tâm chính của Dexaran là quá nhiều người có thể mất mã thông báo của họ bằng cách gửi chúng đến các hợp đồng sử dụng chức năng chuyển giao, chứ không phải các phương thức phê duyệt và chuyển nhượng như đã thảo luận trước đó. Giải pháp của ông là sửa đổi phương thức truyền để kiểm tra xem địa chỉ nhận có phải là hợp đồng (tức là có chứa dữ liệu) hay không. Nếu nó là một hợp đồng, thì nó giả định rằng có một hàm tokenFallback để gọi nó trở lại. Điểm yếu chính là nếu tokenFallback không tồn tại, thì chức năng dự phòng của hợp đồng nhận sẽ được gọi và các mã thông báo đã gửi vẫn có thể bị mất.
Tiêu chuẩn ERC777
ERC777 là một tiêu chuẩn mã thông báo có thể thay thế mới dựa trên ERC820 (Cơ quan đăng ký nội quan giả hợp đồng) và cố gắng giải quyết các vấn đề của ERC20, chẳng hạn như thiếu cơ chế xử lý giao dịch dẫn đến việc mất hàng triệu đô la từ hệ sinh thái Ethereum. Tóm lại, ERC777 tập trung vào nhận con nuôi bằng cách cung cấp một nhiều cơ chế xử lý giao dịch.
Những lợi ích
Ưu điểm chính của ERC777 là nó sử dụng một phương pháp nhận diện giao diện hợp đồng mới. Tiêu chuẩn này giả định rằng có một cơ quan đăng ký hợp đồng trung tâm trên mạng của Ethereum (điều này được định nghĩa trong ERC820). Mọi người đều có thể gọi sổ đăng ký này để biết liệu một địa chỉ nhất định (không quan trọng địa chỉ này có phải là hợp đồng hay không) hỗ trợ một bộ chức năng nhất định, tức là “ giao diện`..
Một trong những vấn đề chính của Ethereum là không thể biết những chức năng nào mà hợp đồng thực hiện. ERC820 nhằm giải quyết vấn đề này. ERC777 tận dụng lợi thế của cách tiếp cận này, đây chắc chắn là một ý tưởng hay.
Mặt khác, bạn có thể tạo mã thông báo sẽ triển khai các chức năng mặc định của ERC20 cùng với các chức năng ERC777 mới mà không bị ghi đè (và tùy chọn kế thừa lỗi nghiêm trọng của ERC20). Điều này có thể đảm bảo hiệu ứng mạng tốt cho tiêu chuẩn mã thông báo mới này và việc áp dụng nhanh hơn. Như thực tế cho thấy, mục tiêu chính của các nhà phát triển mã thông báo là huy động tiền, giả định rằng họ cần đẩy mã thông báo của mình lên các sàn giao dịch. Sẽ dễ dàng hơn cho các sàn giao dịch hỗ trợ mã thông báo triển khai các chức năng ERC20 kế thừa (không quan trọng nếu các chức năng này có lỗi hay không) mà không cần bất kỳ nghiên cứu nào về các chức năng mới hơn của các tiêu chuẩn mã thông báo mới. Các sàn giao dịch càng dễ dàng hỗ trợ mã thông báo theo tiêu chuẩn mới, thì càng có nhiều nhà phát triển sử dụng nó. Điều này thúc đẩy việc áp dụng ERC777, trong khi ERC223 thiếu thuộc tính này.
Khác biệt là gì?
Tiêu chuẩn mã thông báo này xác định một tập hợp các chức năng hoàn toàn mới, tức là các chức năng `gửi` thay vì các hàm` chuyển`. `AuthoseOperator` thay vì` phê duyệt`. Hàm xử lý `tokensReceive` thay vì hàm xử lý` tokenFallback`.
Cách tiếp cận như vậy có thể đảm bảo rằng các chức năng của tiêu chuẩn này sẽ không vượt qua và ghi đè lên các chức năng của bất kỳ tiêu chuẩn mã thông báo nào khác, do đó có thể tạo mã thông báo tương thích với các tiêu chuẩn ERC777 và ERC820 đồng thời.
Cuối cùng, ERC777 chuẩn hóa Bạc hà và Ghi chức năng của mã thông báo.
Điểm lỗi và lo ngại về bảo mật
ERC777 thực hiện chức năng “ AuthoseOperator` cho phép ai đó quản lý mã thông báo thay mặt bạn. Dexaran giải thích với chúng tôi rằng anh ấy nghĩ rằng phương pháp này không được dùng nữa và không nên được sử dụng. Ngoài ra, việc ủy quyền cho ai đó quản lý mã thông báo thay mặt bạn sẽ làm tổn hại đến băng thông của mạng và yêu cầu nhiều khí hơn. `AuthoseOperator` đã đại diện cho một giao dịch và một giao dịch khác được yêu cầu để thực hiện "rút tiền được ủy quyền". Vì vậy, cần có hai giao dịch để thực hiện chuyển khoản có thể được thực hiện chỉ với một giao dịch.
Tiếp theo, tiêu chuẩn ERC777 chứa một cờ tùy chọn để ngăn chặn các mã thông báo bị kẹt bằng cách thực hiện một số kiểm tra về giao diện ITokenRecipient và để kiểm tra xem địa chỉ có nằm trong danh sách trắng hay không. Vì tiêu chuẩn này tập trung vào bảo mật của một mạng xử lý các mã thông báo có giá trị hàng triệu đô la, nên không phải là một điều tốt nếu làm cho các kiểm tra này trở thành tùy chọn.
Các tiêu chuẩn khác
Có nhiều tiêu chuẩn khác như ERC827 kết hợp một số ưu điểm của ERC223 với các chức năng ERC20 kế thừa. Các ERC664 tiêu chuẩn tập trung vào mô-đun của tiêu chuẩn mã thông báo. Tiêu chuẩn này cho phép các hợp đồng mã thông báo có thể được nâng cấp, nhưng nó đã kế thừa lỗi nghiêm trọng ERC20. Các tiêu chuẩn khác bao gồm ERC721, ERC677 và ERC820, nhưng chúng ít được biết đến hơn.
Khả năng tương thích giữa các tiêu chuẩn
Chúng tôi đã hỏi Dexaran những tiêu chuẩn nào tương thích ngược. Ông ấy nói với chúng tôi rằng trước tiên chúng ta nên hiểu từ “tương thích ngược” là viết tắt của gì: “Tương thích ngược là một thuộc tính của hệ thống, sản phẩm hoặc công nghệ cho phép khả năng tương tác với một hệ thống cũ hơn hoặc với đầu vào được thiết kế cho một hệ thống như vậy.”
ERC20 & ERC223: Mã thông báo ERC223 tương thích với ERC20. Mọi thứ được thiết kế để hoạt động bình thường với ERC20 (như ví) cũng có thể hoạt động với ERC223. Ngoại lệ duy nhất ở đây là các hợp đồng dựa trên các mẫu ký gửi mã thông báo chấp thuận + transferFrom. Tuy nhiên, có thể triển khai các chức năng accept + transferFrom với mã thông báo ERC223, ngay cả khi chúng không được đưa vào tiêu chuẩn ngay bây giờ. Đối với ví và bất kỳ dịch vụ nào của bên thứ ba không phải là hợp đồng thông minh, chúng hỗ trợ ERC223 tự động vì dữ liệu cuộc gọi đầu vào của mã thông báo ERC20 hợp lệ cho ERC223.
ERC20 & ERC777: Bạn có thể tìm thấy tuyên bố sau trong phần “Tương thích ngược” của đề xuất ERC777: “EIP này không giới thiệu sự không tương thích ngược và tương thích với tiêu chuẩn mã thông báo ERC-20 cũ hơn.”
Tuy nhiên, Dexaran đã nói với chúng tôi điều hoàn toàn ngược lại và cho chúng tôi ví dụ này: “Các ví và dịch vụ như MetaMask, Mist và MyEtherWallet đang hoạt động với mã thông báo ERC20. Đầu vào được thiết kế cho mã thông báo ERC20 là một lệnh gọi hợp đồng có chứa các tham số được mã hóa và chữ ký hàm. Các lệnh gọi hàm trong Máy ảo Ethereum được chỉ định bởi bốn byte dữ liệu đầu tiên được gửi cùng với một giao dịch. Các chữ ký 4 byte này được định nghĩa là bốn byte đầu tiên của hàm băm của biểu diễn chính tắc của chữ ký hàm. Điều này có nghĩa là các hàm `chuyển (địa chỉ, uint256) ‘và` gửi (địa chỉ, uint256) `sẽ có các chữ ký khác nhau. Do đó, đầu vào được thiết kế cho mã thông báo ERC20 sẽ không hợp lệ cho mã thông báo ERC777. ” Khi chúng tôi sử dụng định nghĩa của mình về khả năng tương thích ngược, ERC777 không tương thích với tiêu chuẩn mã thông báo ERC20.
Khi nào sử dụng tiêu chuẩn nào
ERC20: Người dùng Reddit u / Dexaran đã cho chúng tôi lời khuyên châm biếm này, “Khi bạn muốn các nhà đầu tư của mình mất tiền vì lỗi.”
ERC223: Tiêu chuẩn mã thông báo này cũng có thể sử dụng được cùng với ERC777. ERC777 có một số tính năng trang nhã mà ERC223 thiếu, nhưng logic của ERC223 rất đơn giản so với ERC777 có thể đảm bảo rằng nó hợp lý hơn nhiều mã ít lỗi hơn. Hơn nữa, ERC223 không dựa vào bất kỳ dịch vụ trung tâm nào, có nghĩa là mã thông báo ERC223 của bạn sẽ chỉ phụ thuộc vào việc triển khai của chính bạn. Như chúng tôi đã đề cập trước đó, ERC223 nhằm mục đích cải tiến bảo mật, nhưng điều này làm cho các mã thông báo ERC223 không tuân thủ các tiêu chuẩn ERC20.
ERC777: Tiêu chuẩn mã thông báo này đã có thể sử dụng được. Mặt khác, ERC777 có một số lo ngại về bảo mật như đã đề cập ở trên. Họ cũng dựa vào sổ đăng ký hợp đồng trung tâm cũng là một mối quan tâm về bảo mật. Cơ quan đăng ký trung tâm có thể giúp cuộc sống của nhà phát triển dễ dàng hơn nhưng nó cũng hoạt động như một điểm thất bại trung tâm giống hệt như với Parity Multisig. Tất cả các Parity Multisigs đều dựa trên một thư viện mã trung tâm. Nó đã xảy ra rằng có một lỗi trong thư viện và nó đã được khai thác. Kết quả là tất cả các Parity Multisigs đều bị rơi. Ngoài ra, ERC777 xác định một bộ chức năng mới. Đây là một nỗ lực để cho phép các nhà phát triển mã thông báo làm cho mã thông báo của họ tương thích với cả hai tiêu chuẩn ERC20 và ERC777 đồng thời để được chấp nhận. Điều này có nghĩa là nhà phát triển có thể kế thừa một lỗi của ERC20 trong ERC777, nhưng nó cho phép nhà phát triển sử dụng nhiều sự kiện xử lý giao dịch hơn.
Nói chung: Tất cả các mã thông báo đều có một trường hợp sử dụng tương tự – ICO. Tôi muốn nói rằng ERC223 và ERC777 đang cố gắng giải quyết một vấn đề của ERC20 theo những cách khác nhau. ERC223 đã chiếm lĩnh Ethereum Classic thay vì ERC20.
Bài viết này được tạo với sự trợ giúp của Dexaran, nhà phát triển ERC223. Một số nhận xét của Paul Edge về các tiêu chuẩn mã thông báo của Ethereum cũng đã được sử dụng.