Giới thiệu Ethereum Name Service: DNS của Blockchain

Tram Ho

Etherum nói riêng cũng như các nền tảng blockchain, tiền mã hóa khác nói riêng vẫn chưa thực sự phổ biến với người dùng phổ thông. Lý do một phần là do công nghệ blockchain hay crypto currency đang còn rất mới, một phần nữa là nó chưa thực sự thân thiện với người dùng (địa chỉ ví dài, khó nhớ, backup private key,…). Ethereum Name Service (ENS) ra đời nhằm giải quyết phần nào vấn đề kể trên, mapping những địa chỉ ví dài loằng nhoằng thành một cái tên ngắn gọn dễ nhớ hơn.

1. Giới thiệu

Ethereum Name Service hiểu đơn giản là một dịch vụ tên miền phân tán trên nền tảng Ethereum. Chức năng của ENS tương tự như DNS (mapping các địa chỉ IP thành các tên miền dễ nhớ hơn). Giống như DNS, ENS triển khai trên một hệ thống tên miền phân cấp gồm các tên miền (domains) và tên miền con (subdomains), chủ sở hữu của 1 tên miền có toàn quyền kiểm soát tên miền con (subdomains). Ví dụ như tên miền .eth, tên miền con sẽ là foo.eth, bar.eth ….

Logic của ENS được thể hiện trong smart contract ENS và được deploy lên mạng Ethereum (hoặc các mạng thử nghiệm). Nếu ở ứng dụng đầu cuối dùng thư viện ethereum-ens , nó sẽ tự động detect mạng và sử dụng ENS trên mạng đó.

2. Kiến trúc

ENS có 2 phần chính:

ENS registry là một smart contract chứa danh sách các domains, subdomains. Mỗi domains hay subdomains đều lưu trữ 3 thông tin sau:

  • Địa chỉ owner của domain hay subdomains
  • Địa chỉ resolver của domain hay subdomains
  • Thời hạn của domains

Owner của một domains có quyền:

  • Chỉ định resolvers and thời hạn của domains
  • Chuyển quyền sở hữu domains cho địa chỉ khác
  • Thay đổi owner của subdomains

Các bạn có thể xem source code của ENS Registry contract tại đây

Resolvers đơn giản là nơi thực hiện việc chuyển đổi domains => address và trả lại address ứng với domains cho người dùng.

Quy trình gồm 2 bước như hình trên:

  • B1: Ứng dụng hỏi địa chỉ của resolvers của domains foo.eth bằng các gọi hàm resolvers. Registry sẽ trả về địa chỉ của resolvers tương ứng
  • B2: Ứng dụng gọi đến resolvers để lấy địa chỉ ứng với domains foo.eth

3. Tích hợp ENS vào Dapp

ENS Libraries

Hỗ trợ ENS hỗ trợ nhiều thư viện với các ngôn ngữ khác nhau. Phổ biến nhất vẫn là Javascript.

Chỉ có thư viện ethereum-ens được hỗ trợ chính thức bởi đội ngũ developer của ENS có đầy đủ các tính năng. Các thư viện khác ít nhiều bị hạn chế ở một số điểm.

web3.js không hộ trợ việc tạo domain, chuyển đổi chủ domain (transferring ownership) hay là thay đổi resolvers (updating resolvers).

ethjs-ens chỉ hỗ trợ việc forward và phân giải tên ENS domain.

Tương tự như ethjs-ensethers.js.

Tạo một ENS domain

Tạo domain trên mainnet Ethereum sẽ mất ETH nên chúng ta tạo mới domain trên testnet. Ở đây tôi chọn mạng Rinkeby. Quá trình tạo 1 domain gồm 3 bước.

Sau khi tạo thành công, hiển thị lên các thông tin cơ bản của domain.

Working with ENS

Trước khi bạn có thể bắt đầu tương tác với ENS, chúng ta sẽ cần có được một tham chiếu đến ENS registry.

Kết quả trả về khi dùng web3-js như sau:

Phân giải ENS domain thành địa chỉ

Ví dụ với web3-js:

Phân giải địa chỉ thành ENS domain

Quản lý domain name

Thay đổi owner của domain

Tạo subdomains

4. Demo

Ở phần này, chúng ta sẽ viết một Dapp đơn giản có chức năng:

  • Gửi ETH cho tài khoản khác qua address thông thường
  • Gửi ETH cho tài khoản khác thông qua ENS domain name

Khởi tạo thư mục và cài đặt các package cần thiết

GetWeb3

Viết Component

  • Có 2 ô input cho người dùng nhập address và số ether cần gửi
  • Check box Use ENS Domain giúp người dùng tùy chọn có gửi qua ENS Domain hay không ?
  • Nếu gửi qua ENS Domain thì thư viện ethereum-ens sẽ phân giải domain và trả về địa chỉ trên mạng, sau đó gửi ether qua web3 như bình thường.

Chúng ta thử gửi 0.00001 ether đến tên miền conglt.eth

Gửi thành công 👍

Lưu ý:

  • Các bạn có thể tham khảo toàn bộ mã nguồn trên Github
  • Bản demo được deploy trên Surge

Tài liệu tham khảo

https://docs.ens.domains/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo