Mộc Viên's Blog Mộc Viên's Blog
Hướng Dẫn Chuyển Ethereum (ETH) Bằng Private Key Trong Node.js - Cảnh Báo Bảo Mật

Hướng Dẫn Chuyển Ethereum (ETH) Bằng Private Key Trong Node.js - Cảnh Báo Bảo Mật

Ngày đăng:

Hướng Dẫn Chuyển Ethereum (ETH) Bằng Private Key Trong Node.js - Cảnh Báo Bảo Mật

1. Giới Thiệu

Ethereum là một blockchain phổ biến hỗ trợ hợp đồng thông minh và giao dịch ngang hàng. Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển ETH bằng Node.js thông qua private key. Tuy nhiên, cần đặc biệt chú ý đến vấn đề bảo mật khi sử dụng private key để tránh mất mát tài sản.

2. Yêu Cầu Trước Khi Bắt Đầu

Trước khi thực hiện giao dịch, bạn cần:

  • Cài đặt Node.js
  • Có một tài khoản Ethereum với ETH đủ để thực hiện giao dịch
  • Một nhà cung cấp RPC như Infura hoặc Alchemy để kết nối với blockchain Ethereum
  • Cài đặt thư viện ethers.js để ký và gửi giao dịch

3. Cài Đặt Môi Trường

Mở terminal và chạy lệnh sau để tạo một dự án Node.js mới:

mkdir eth-transaction
cd eth-transaction
npm init -y

Cài đặt thư viện ethers.js:

npm install ethers

4. Viết Mã Chuyển ETH

Tạo file send_eth.js và dán đoạn mã sau vào:

const { ethers } = require("ethers");

// Thông tin ví
const PRIVATE_KEY = "YOUR_PRIVATE_KEY_HERE";  // Cảnh báo: Không chia sẻ private key!
const RECEIVER_ADDRESS = "0xRecipientAddressHere";
const AMOUNT_TO_SEND = "0.01"; // Số lượng ETH gửi

// Kết nối với mạng Ethereum qua Infura (hoặc Alchemy)
const provider = new ethers.JsonRpcProvider("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID");

// Tạo ví từ private key
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);

async function sendEther() {
    try {
        // Lấy nonce của tài khoản
        const nonce = await provider.getTransactionCount(wallet.address, "latest");
        
        // Cấu trúc giao dịch
        const tx = {
            to: RECEIVER_ADDRESS,
            value: ethers.parseEther(AMOUNT_TO_SEND),
            gasLimit: ethers.parseUnits("21000", "wei"),
            maxPriorityFeePerGas: ethers.parseUnits("2", "gwei"),
            maxFeePerGas: ethers.parseUnits("50", "gwei"),
            nonce: nonce,
            chainId: 1 // Ethereum mainnet
        };
        
        // Ký và gửi giao dịch
        const transaction = await wallet.sendTransaction(tx);
        console.log("Giao dịch gửi đi: ", transaction.hash);
        
        // Chờ xác nhận giao dịch
        await transaction.wait();
        console.log("Giao dịch đã hoàn tất!");
    } catch (error) {
        console.error("Lỗi khi gửi ETH:", error);
    }
}

sendEther();

5. Chạy Chương Trình

Chạy lệnh sau trong terminal để thực hiện giao dịch:

node send_eth.js

Nếu giao dịch thành công, bạn sẽ thấy mã hash của giao dịch và có thể kiểm tra trên Etherscan.

6. Cảnh Báo Bảo Mật Quan Trọng

❌ Những Điều Không Nên Làm

  • Không chia sẻ private key: Nếu ai đó có private key của bạn, họ có thể kiểm soát toàn bộ ví.
  • Không lưu private key trong mã nguồn: Thay vào đó, sử dụng biến môi trường (dotenv) để bảo vệ.
  • Không sử dụng RPC công khai với private key: Hãy sử dụng node Ethereum cá nhân hoặc dịch vụ đáng tin cậy.

✅ Cách Bảo Vệ Private Key

  • Sử dụng ví phần cứng: Ledger hoặc Trezor để ký giao dịch ngoại tuyến.
  • Giới hạn quyền truy cập: Chỉ sử dụng private key trên máy tính an toàn.

Sử dụng tệp .env để lưu private key (cần cài đặt dotenv):

npm install dotenv

Tạo file .env:

PRIVATE_KEY=your_private_key_here
INFURA_PROJECT_ID=your_infura_project_id_here

Cập nhật mã để sử dụng biến môi trường:

require("dotenv").config();
const PRIVATE_KEY = process.env.PRIVATE_KEY;

7. Kết Luận

Chuyển ETH bằng Node.js và private key là một phương pháp tiện lợi nhưng cũng đầy rủi ro. Hãy tuân thủ các biện pháp bảo mật để tránh mất tài sản. Nếu bạn cần thực hiện giao dịch lớn, hãy cân nhắc sử dụng ví phần cứng hoặc giải pháp multi-signature để tăng cường bảo mật.


Gần đây