Nhảy đến nội dung chính
Change page

Thư viện API Javascript

Lần cập nhật trang lần cuối: 25 tháng 2, 2026

Để một ứng dụng web có thể tương tác với chuỗi khối Ethereum (tức là đọc dữ liệu chuỗi khối và/hoặc gửi giao dịch đến mạng), nó phải kết nối với một nút Ethereum.

Vì mục đích này, mọi máy khách Ethereum đều triển khai đặc tả JSON-RPC, vì vậy có một bộ phương thức thống nhất mà các ứng dụng có thể dựa vào.

Nếu bạn muốn sử dụng JavaScript để kết nối với một nút Ethereum, bạn có thể dùng JavaScript thuần, nhưng có nhiều thư viện tiện lợi trong hệ sinh thái giúp việc này dễ dàng hơn nhiều. Với các thư viện này, các nhà phát triển có thể viết các phương thức trực quan, chỉ với một dòng mã để khởi tạo các yêu cầu JSON-RPC (dưới lớp ngoài) tương tác với Ethereum.

Xin lưu ý rằng kể từ The Merge, cần có hai phần mềm Ethereum được kết nối - một máy khách thực thi và một máy khách đồng thuận - để chạy một nút. Hãy chắc chắn rằng nút của bạn có cả client thực thi và client đồng thuận. Nếu nút của bạn không có trên máy cục bộ (ví dụ: nút của bạn đang chạy trên một phiên bản AWS), hãy cập nhật các địa chỉ IP trong hướng dẫn cho phù hợp. Để biết thêm thông tin, vui lòng xem trang của chúng tôi về chạy một nút.

Điều kiện tiên quyết

Cũng như việc hiểu về JavaScript, sẽ rất hữu ích nếu bạn hiểu về ngăn xếp Ethereumcác máy khách Ethereum.

Tại sao lại sử dụng thư viện

Những thư viện này giúp đơn giản hóa nhiều phần phức tạp khi bạn tương tác trực tiếp với một nút Ethereum. Chúng cũng cung cấp các hàm tiện ích (ví dụ: chuyển đổi ETH sang Gwei) để với tư cách là nhà phát triển, bạn có thể tốn ít thời gian hơn để xử lý những phức tạp của các client Ethereum và tập trung nhiều thời gian hơn vào chức năng độc đáo của ứng dụng.

Các tính năng của thư viện

Kết nối với các nút Ethereum

Với việc sử dụng chúng, những thư viện này cho phép bạn kết nối với Ethereum và đọc dữ liệu của nó, bất kể đó là qua JSON-RPC, INFURA, Etherscan, Alchemy hay MetaMask.

Cảnh báo: Web3.js đã được lưu trữ vào ngày 4 tháng 3 năm 2025. Đọc thông báo (opens in a new tab). Hãy cân nhắc sử dụng các thư viện thay thế như ethers.js (opens in a new tab) hoặc viem (opens in a new tab) cho các dự án mới.

Ví dụ về Ethers

1// BrowserProvider bao bọc một nhà cung cấp Web3 tiêu chuẩn, đó là
2// những gì MetaMask đưa vào dưới dạng window.ethereum trong mỗi trang
3const provider = new ethers.BrowserProvider(window.ethereum)
4
5// Plugin MetaMask cũng cho phép ký các giao dịch để
6// gửi ether và thanh toán để thay đổi trạng thái trong blockchain.
7// Đối với việc này, chúng ta cần người ký tài khoản...
8const signer = provider.getSigner()

Ví dụ về Web3js

1var web3 = new Web3("http://localhost:8545")
2// hoặc
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// thay đổi nhà cung cấp
6web3.setProvider("ws://localhost:8546")
7// hoặc
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// Sử dụng nhà cung cấp IPC trong node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // đường dẫn mac os
13// hoặc
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // đường dẫn mac os
17// trên windows, đường dẫn là: "\\\\.\\pipe\\geth.ipc"
18// trên linux, đường dẫn là: "/users/myuser/.ethereum/geth.ipc"
Hiện tất cả

Khi đã thiết lập xong, bạn sẽ có thể truy vấn blockchain cho:

  • Số khối
  • Ước lượng phí gas
  • Sự kiện hợp đồng thông minh
  • ID mạng lưới
  • và nhiều thứ khác

Chức năng của ví

Những thư viện này giúp bạn tạo ví, quản lý khóa và ký giao dịch.

Dưới đây là một vài ví dụ về Ethers

1// Tạo một thực thể ví từ một chuỗi gợi nhớ...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromPhrase(mnemonic)
5
6// ...hoặc từ một khóa riêng tư
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// đúng
11
12// Địa chỉ dưới dạng một Promise theo API Signer
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// Địa chỉ Ví cũng có sẵn một cách đồng bộ
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// Các thành phần mật mã nội bộ
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// Chuỗi gợi nhớ của ví
27walletMnemonic.mnemonic
28// {
29// locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// }
33
34// Lưu ý: Một ví được tạo bằng khóa riêng tư sẽ không
35// có chuỗi gợi nhớ (việc dẫn xuất đã ngăn chặn điều đó)
36walletPrivateKey.mnemonic
37// rỗng
38
39// Ký một tin nhắn
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Ký một giao dịch
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// Phương thức kết nối trả về một thực thể mới của
53// Ví được kết nối với một nhà cung cấp
54wallet = walletMnemonic.connect(provider)
55
56// Truy vấn mạng
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Gửi ether
63wallet.sendTransaction(tx)
Hiện tất cả

Đọc tài liệu đầy đủ (opens in a new tab)

Khi đã thiết lập xong, bạn sẽ có thể:

  • Tạo tài khoản
  • Gửi đi các giao dịch
  • Ký các giao dịch
  • và nhiều thứ khác

Tương tác với các hàm của hợp đồng thông minh

Thư viện client JavaScript cho phép ứng dụng của bạn gọi các hàm hợp đồng thông minh bằng cách đọc Ứng dụng Giao diện Nhị phân (ABI) từ một hợp đồng đã được biên dịch.

Về cơ bản ABI giải thích các chức năng của hợp đồng trong định dạng JSON và cho phép bạn sử dụng nó như một đối tượng JavaScript bình thường.

Vì vậy, hợp đồng Solidity dưới đây:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 constructor(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 function foo(uint b, bytes32 c) returns(address) {
12 Event(b, c);
13 return d;
14 }
15}
Hiện tất cả

JSON được viết ra như sau:

1[{
2 "type":"constructor",
3 "payable":false,
4 "stateMutability":"nonpayable"
5 "inputs":[{"name":"testInt","type":"uint256"}],
6 },{
7 "type":"function",
8 "name":"foo",
9 "constant":false,
10 "payable":false,
11 "stateMutability":"nonpayable",
12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
13 "outputs":[{"name":"","type":"address"}]
14 },{
15 "type":"event",
16 "name":"Event",
17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
18 "anonymous":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]
Hiện tất cả

Có nghĩa là bạn có thể:

  • Gửi một giao dịch đến hợp đồng thông minh và thực thi phương thức của nó
  • Lệnh gọi để ước lượng lượng gas mà một phương thức sẽ tiêu tốn khi được thực thi trong EVM
  • Triển khai một hợp đồng
  • Thêm nữa...

Các hàm tiện ích

Các hàm hữu dụng cung cấp cho bạn các phím tắt hữu ích giúp việc xây dựng với Ethereum trở nên dễ dàng hơn một chút.

Giá trị ETH mặc định được biểu diễn bằng đơn vị Wei. 1 ETH = 1.000.000.000.000.000.000 WEI – điều này có nghĩa là bạn đang làm việc với rất nhiều con số! web3.utils.toWei chuyển đổi ether sang Wei cho bạn.

Và trong ethers, nó trông như thế này:

1// Lấy số dư của một tài khoản (bằng địa chỉ hoặc tên ENS)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" }
4
5// Thông thường bạn sẽ cần định dạng đầu ra cho người dùng
6// những người thích xem các giá trị bằng ether (thay vì wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'

Các thư viện hiện có

Web3.js - API JavaScript của Ethereum.

Ethers.js - Triển khai ví Ethereum hoàn chỉnh và các tiện ích bằng JavaScript và TypeScript.

The Graph - Một giao thức để lập chỉ mục dữ liệu Ethereum và IPFS và truy vấn dữ liệu đó bằng GraphQL.

Alchemy SDK - Trình bao bọc Ethers.js với các API nâng cao.

viem - Giao diện TypeScript cho Ethereum.

Drift - Siêu thư viện TypeScript với bộ nhớ đệm, hook và các mock thử nghiệm tích hợp sẵn.

Đọc thêm

Biết về nguồn lực cộng đồng đã giúp đỡ bạn? Chỉnh sửa trang này và bổ sung!

Bài viết này hữu ích không?