Tìm hiểu Ethers
minhthuong031103
Mình sẽ mượn 1 node của Infura để kết nối vào network bằng JSONRpcProvider (Remote Produce Call)- một ethers provider giúp ứng dụng gửi request thông qua HTTP/HTTPS và nhận về response là JSON
const { ethers } = require('ethers');
const INFURA_ID = '8fd3f50f20814fbe8372ba5687ad08de';
const provider = new ethers.providers.JsonRpcProvider(
`https://mainnet.infura.io/v3/8fd3f50f20814fbe8372ba5687ad08de`
);
const address = '';
const main = async () => {
const balance = await provider.getBalance(address);
console.log(
`\nETH Balance of ${address} --> ${ethers.utils.formatEther(balance)} ETH\n`
);
};
main();
const { ethers } = require('ethers');
const INFURA_ID = '';
const provider = new ethers.providers.JsonRpcProvider(
`https://mainnet.infura.io/v3/${INFURA_ID}`
);
const ERC20_ABI = [
'function name() view returns (string)',
'function symbol() view returns (string)',
'function totalSupply() view returns (uint256)',
'function balanceOf(address) view returns (uint)',
];
//ERC20_ABI (Application Binary Interface) là một chuỗi các phương thức và sự kiện được định nghĩa trong một contract (smart contract)
//Ta phải cung cấp đầy đủ các phương thức trong ABI để có thể tương tác với contract
const address = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; // DAI Contract
const contract = new ethers.Contract(address, ERC20_ABI, provider);
const main = async () => {
const name = await contract.name();
const symbol = await contract.symbol();
const totalSupply = await contract.totalSupply();
console.log(`\nReading from ${address}\n`);
console.log(`Name: ${name}`);
console.log(`Symbol: ${symbol}`);
console.log(`Total Supply: ${totalSupply}\n`);
const balance = await contract.balanceOf(
'0x6c6Bc977E13Df9b0de53b251522280BB72383700'
);
console.log(`Balance Returned: ${balance}`);
console.log(`Balance Formatted: ${ethers.utils.formatEther(balance)}\n`);
};
main();
Json rpc provider là một loại ethers provider được sử dụng trong thư viện ethers.js để tương tác với blockchain Ethereum bằng giao thức JSON-RPC (Remote Procedure Call). JSON-RPC là một giao thức chuẩn để thực hiện các cuộc gọi thủ tục từ xa giữa các thành phần phần mềm trên mạng, và nó thường được sử dụng để giao tiếp với các nút Ethereum.
JsonRpcProvider is a type of ethers provider used in the ethers.js library to interact with the Ethereum blockchain using the JSON-RPC (Remote Procedure Call) protocol. JSON-RPC is a standard protocol for making remote procedure calls between software components across a network, and it is commonly used to communicate with Ethereum nodes.
JsonRpcProvider cho phép ứng dụng JavaScript của bạn gửi các yêu cầu đến một nút Ethereum thông qua HTTP hoặc HTTPS, và nhận các phản hồi dưới dạng JSON. Các yêu cầu này có thể bao gồm các phương thức khác nhau để đọc dữ liệu blockchain, gửi giao dịch hoặc tương tác với các hợp đồng thông minh trên mạng Ethereum. The JsonRpcProvider allows your JavaScript application to send requests to an Ethereum node via HTTP or HTTPS, and receive responses in JSON format. These requests can include various methods to read blockchain data, send transactions, or interact with smart contracts on the Ethereum network.
Để sử dụng JsonRpcProvider trong ethers.js, bạn cần cung cấp URL của một nút Ethereum hỗ trợ giao thức JSON-RPC. Nút Ethereum này có thể là một dịch vụ công cộng như Infura hoặc Alchemy, hoặc bạn có thể chạy nút Ethereum của riêng mình và sử dụng URL của nó làm nhà cung cấp. To use the JsonRpcProvider in ethers.js, you need to provide the URL of an Ethereum node that supports the JSON-RPC protocol. This Ethereum node could be a public service like Infura or Alchemy, or you can run your own Ethereum node and use its URL as the provider.
**Nếu bạn không có một ethers provider, bạn sẽ không thể giao tiếp trực tiếp với blockchain Ethereum hoặc gửi / nhận giao dịch hoặc tương tác với các hợp đồng thông minh. Provider như cầu nối kết nối ứng dụng của bạn với mạng Ethereum, cho phép bạn truy cập dữ liệu blockchain và gửi giao dịch. ** If you don't have an ethers provider, you won't be able to communicate directly with the Ethereum blockchain or send/receive transactions or interact with smart contracts. The provider acts as the bridge that connects your application to the Ethereum network, allowing you to access blockchain data and submit transactions.
Nếu không có một nhà cung cấp (provider), ứng dụng của bạn sẽ không thể thực hiện các nhiệm vụ sau:
Đọc dữ liệu từ Blockchain: Một nhà cung cấp là cần thiết để truy xuất thông tin từ blockchain Ethereum, chẳng hạn như kiểm tra số dư tài khoản, lấy chi tiết khối mới nhất hoặc truy vấn dữ liệu từ các hợp đồng thông minh (smart contracts).
Gửi giao dịch: Để thực hiện các giao dịch trên mạng Ethereum, chẳng hạn như gửi Ether hay tương tác với các hợp đồng thông minh, một nhà cung cấp là cần thiết để gửi giao dịch lên blockchain để xử lý.
Tương tác với các Hợp đồng thông minh: Hợp đồng thông minh là một phần quan trọng của các ứng dụng phi tập trung. Một nhà cung cấp được sử dụng để tương tác với các hợp đồng thông minh, gọi các hàm của chúng và đọc dữ liệu từ trạng thái của hợp đồng.
Thư viện ethers.js được thiết kế để làm việc với nhiều nhà cung cấp tích hợp sẵn, và việc lựa chọn nhà cung cấp phù hợp phụ thuộc vào yêu cầu cụ thể của ứng dụng của bạn. Một số nhà cung cấp thông dụng bao gồm nhà cung cấp JSON-RPC như Infura hay Alchemy, nhà cung cấp WebSocket để giao tiếp theo thời gian thực, và nhà cung cấp tùy chỉnh nếu bạn tự chạy một nút Ethereum của riêng bạn.
Để sử dụng ethers.js hiệu quả, bạn cần xác định một nhà cung cấp có thể kết nối với mạng Ethereum mà bạn muốn tương tác. Ví dụ, khi sử dụng nhà cung cấp ethers.js JsonRpcProvider, bạn cung cấp URL của một nút Ethereum hỗ trợ giao thức JSON-RPC và ethers.js sẽ giao tiếp với nút đó.
Without a provider, your application would be unable to perform the following tasks:
Reading Blockchain Data: A provider is required to fetch information from the Ethereum blockchain, such as checking an account's balance, getting the latest block details, or querying data from smart contracts.
Sending Transactions: To execute transactions on the Ethereum network, such as sending Ether or interacting with smart contracts, a provider is necessary to submit the transaction to the blockchain for processing.
Interacting with Smart Contracts: Smart contracts are an integral part of decentralized applications. A provider is needed to interact with smart contracts, calling their functions, and reading data from their state.
The ethers.js library is designed to work with various built-in providers, and choosing the appropriate provider depends on the specific requirements of your application. Some common providers include JSON-RPC providers like Infura or Alchemy, WebSocket providers for real-time communication, and custom providers if you run your own Ethereum node.
To use ethers.js effectively, you need to specify a provider that can connect to the Ethereum network you want to interact with. For example, when using the ethers.js JsonRpcProvider, you provide the URL of an Ethereum node that supports JSON-RPC, and ethers.js will communicate with that node.