Giới thiệu Ethers.js – Đối thủ đáng gờm của web3.js

Tram Ho

Hẳn những lập trình viên Dapp lâu năm lẫn cả những bạn beginer sẽ không quá xa lạ với thư viện web3.js dùng để tương tác với Ethereum blockchain. Còn với ethers.js thì hẳn chưa có quá nhiều người biết (mình cũng mới được biết và sử dụng trong thời gian gần đây). Sau một thời gian sử dụng và làm việc với ethers.js, mình thấy nó có 1 ưu điểm muốn chia sẻ với mọi người qua bài viết ngày hôm nay.

1. Giới thiệu

Nói một cách đơn giản, ethers.js là một thư viện được viết bằng Javascript giúp Dapp tương tác với mạng Ethereum Blockchain.

Các tính năng nổi bật ethers.js gồm có

  • Giữ private key ở client một cách an toàn
  • Import và export JSON wallets
  • Import và export ví theo chuẩn BIP 39
  • Hỗ trợ ABI, ABIv2 và Human-Readable ABI
  • Kết nối với Ethereum nodes thông qua nhiều provider như JSON-RPC, INFURA, Etherscan, Alchemy, Cloudflare, MetaMask …
  • Hỗ trợ ENS
  • Nhẹ (88kb khi nén và 284kb khi không nén)
  • Hỗ trợ TypeScript

Cài đặt và import

2. Sử dụng

Kết nối

Query

Thao tác ghi dữ liệu vào blockchain

Để thực hiện các giao dịch làm thay đổi trạng thái của blockchain, giao dịch gửi đi phải được ký bằng private của 1 account. Cơ bản chúng ta sẽ có 2 cách là lấy tài khoản mặc định từ provider và import account vào bằng private key

Cách 1:

Mình chạy ganache-cli lên ở cổng 8545, ganache-cli sẽ tạo cho chúng ta 10 tài khoản.

Kết qủa in ra sẽ là tài khoản số 0 và balance của signer cũng giảm đi 1 ETH

Cách 2: Import tài khoản bên ngoài

Hoặc chúng ta có thể dùng thêm các phương thức khác như tạo random account, load từ mnemonic, …

  • ethers.Wallet.createRandom( [ options = {} ] )
  • ethers.Wallet.fromEncryptedJson( json , password [ , progress ] )
  • ethers.Wallet.fromEncryptedJsonSync( json , password )
  • ethers.Wallet.fromMnemonic( mnemonic [ , path , [ wordlist ] ] )

Thao tác với contract

Để tương tác với bất kỳ contract nào trong Ethereum thì chúng ta đều cần 2 thông tin đó là địa chỉ contractABI

1 ưu điểm của việc gọi hàm trong contract bằng ethers.js so với web3.js là không cần dài dòng thêm call() hay send() ở cuối.

Truy vấn lịch sử giao dịch (Query Historic Events)

Một tính năng khá hay ho của ethers.js mà mình chưa được mục kích sở thị trên web3.js đó là khả năng lọc, truy vấn lịch sử giao dịch. Chúng có thể dễ dàng tìm kiếm các giao dịch đầu vào, đầu ra theo điều kiện cho trước.

Kết luận

Trong giới hạn bài viết, mình đã cùng các bạn tìm hiểu cách sử dụng cơ bản ethers.js để tương tác với mạng Ethereum, chi tiết kỹ hơn và các hàm, tham số thì mọi người có thể dễ dàng tham khảo ở tài liệu chính thức từ ethers.js

Những gì web3.js làm được, gần như ethers.js cũng làm được và thậm chí có cú pháp gọn gàng hơn (gọi hàm trong contrat). Ngoài trừ hàm web3.eth.net.isListening() trên web3.js để kiếm tra kết nối đến provider có thành công hay không thì mình chưa tìm được hàm tương tự trên ethers.js

Combo Hardhatether.js đang được team mình sử dụng thay thế dần cho bộ đôi huyền thoại truffleweb3.js và hoạt động khá trơn tru. Các bạn có thể cân nhắc chuyển qua dùng thử bộ đôi trên

Tài liệu tham khảo

https://docs.ethers.io/v5/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo