Chuyển đến nội dung chính
Hướng dẫn AI

Triển khai và quản lý hợp đồng Solidity từ Terminal với Arbitrage Contract Deployer

Tìm hiểu cách cài đặt và cấu hình Arbitrage Contract Deployer, biên dịch tệp Solidity, triển khai hợp đồng lên Ethereum Mainnet, gọi các hàm đọc và ghi, xem chi phí gas, quản lý các bản triển khai đã lưu và chạy luồng mempool.

Triển khai và quản lý hợp đồng Solidity từ Terminal với Arbitrage Contract Deployer

Bạn sẽ học được gì

Arbitrage Contract Deployer là bộ công cụ dòng lệnh Node.js dùng để biên dịch, triển khai và tương tác với các hợp đồng Solidity trực tiếp từ terminal. Hướng dẫn này giải thích cách cài đặt công cụ, kết nối ví với Ethereum Mainnet, triển khai hợp đồng, sử dụng menu tương tác và theo dõi hoạt động mempool được hỗ trợ.

Quan trọng: Dự án này chỉ hoạt động với Ethereum Mainnet. Các giao dịch sử dụng ETH thật và có thể tiêu tốn tiền thật. Hãy kiểm tra mọi hợp đồng, địa chỉ và giao dịch trước khi xác nhận.

Tính năng chính

  • Biên dịch hợp đồng Solidity theo yêu cầu bằng solc, không cần Remix hoặc Hardhat.
  • Phân giải import từ tệp cục bộ, node_modules, GitHub và các CDN tương thích với npm.
  • Triển khai hợp đồng lên Ethereum Mainnet thông qua kết nối RPC.
  • Lưu địa chỉ hợp đồng đã triển khai, ABI và ngày triển khai vào deployments.json.
  • Cung cấp giao diện phím mũi tên để triển khai hợp đồng và gọi hàm.
  • Phân loại các hàm hợp đồng thành thao tác chỉ đọc, ghi hoặc thanh toán.
  • Xem trước ước tính gas, phí và chi phí ETH cũng như USD gần đúng.
  • Sử dụng oracle Chainlink để lấy tỷ giá ETH/USD phục vụ ước tính phí.
  • Có thể chạy một tiến trình luồng mempool riêng với đầu ra giao dịch được định dạng.

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

Bạn cần Node.js 18 hoặc mới hơn vì dự án yêu cầu chức năng fetch tích hợp sẵn. README cũng liệt kê npm 9 hoặc mới hơn. Bạn sẽ cần một endpoint RPC của Ethereum Mainnet, khóa riêng của ví và đủ ETH để thanh toán cho mọi giao dịch triển khai hoặc ghi mà bạn xác nhận.

Cài đặt dự án

1. Sao chép repository

Sao chép dự án và chuyển đến thư mục của dự án. Thay đường dẫn repository bằng vị trí repository bạn đang sử dụng.

git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>

Bạn cũng có thể tải repository dưới dạng tệp ZIP và giải nén vào một thư mục cục bộ.

2. Cài đặt các phần phụ thuộc

Cài đặt các gói được khai báo trong package.json:

npm install

Lệnh này cài đặt hai phần phụ thuộc chính:

  • ethers để xử lý provider, ví, ABI và giao dịch.
  • solc để biên dịch Solidity từ Node.js.

Sau khi cài đặt, dự án phải có thư mục node_modules. Nếu không có, hãy kiểm tra đầu ra của npm install và khắc phục lỗi cài đặt trước khi tiếp tục.

Cấu hình ví và kết nối RPC

Tạo tệp có tên .env trong thư mục gốc của dự án. Thêm khóa riêng và URL RPC của Ethereum Mainnet:

PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.com

README liệt kê các endpoint RPC mẫu sau:

  • https://ethereum-rpc.publicnode.com
  • https://eth.llamarpc.com
  • https://cloudflare-eth.com
  • https://mainnet.infura.io/v3/<KEY>
  • https://eth-mainnet.g.alchemy.com/v2/<KEY>

Giữ riêng tư tệp .env và đảm bảo tệp này được thêm vào .gitignore. Tệp chứa thông tin xác thực không bao giờ được commit vào repository công khai.

Khởi chạy công cụ triển khai tương tác

Khởi chạy giao diện chính bằng lệnh:

node start

Nếu dự án định nghĩa script npm start, bạn cũng có thể chạy:

npm start

Ứng dụng kiểm tra mạng, ví và số dư, sau đó mở menu tương tác. Menu thông thường có các tùy chọn tương tự:

=== Ethereum Contract Deployer ===

i Network: mainnet (chainId 1)
i Wallet:  0x8c27...66CdC
i Balance: 0.5 ETH
! THIS IS MAINNET - transactions cost real money!

Main menu
> Deploy Arbitrage.sol
  Open deployed Arbitrage (0x2d7A..., 2025-01-15)
  Exit

Dùng phím mũi tên để chọn một mục, nhấn Enter để xác nhận lựa chọn và sử dụng các điều khiển OK hoặc Cancel được hiển thị khi chương trình yêu cầu phê duyệt giao dịch. Nhấn Ctrl+C để thoát.

Biên dịch và triển khai hợp đồng Solidity

1. Thêm hoặc chọn tệp Solidity

Đặt một tệp Solidity trong thư mục dự án hoặc chọn tệp .sol hiện có thông qua menu triển khai. Trình biên dịch xây dựng hợp đồng dựa trên tên tệp và tự động phân giải các import được hỗ trợ.

2. Xem lại thông tin biên dịch và triển khai

Chọn Deploy <file>.sol từ menu chính. Ứng dụng biên dịch hợp đồng, chuẩn bị giao dịch triển khai và xem trước yêu cầu gas trước khi yêu cầu xác nhận.

3. Xác nhận giao dịch

Kiểm tra ước tính gas, phí hiện tại, phí tối đa, số dư ví và thông tin hợp đồng. Chỉ xác nhận khi các giá trị và mạng đích chính xác. Sau khi giao dịch được đào, công cụ hiển thị địa chỉ đã triển khai và liên kết Etherscan.

Thông tin triển khai được lưu cục bộ trong deployments.json. Nhờ đó, bạn có thể mở lại hợp đồng đã triển khai sau này mà không cần nhập lại địa chỉ và ABI.

Tìm hiểu phần xem trước gas

Trước khi triển khai và thực hiện các thao tác ghi được hỗ trợ, công cụ hiển thị phần xem trước gas. Phép tính tuân theo quy trình được ghi trong README:

  1. estimateGas cung cấp mức gas cần thiết ước tính.
  2. Giới hạn gas được tính bằng mức ước tính cộng thêm 10 phần trăm dự phòng.
  3. Phí tối đa cho mỗi gas được tính bằng hai lần phí cơ sở cộng với phí ưu tiên.
  4. Giao diện hiển thị cả phí dự kiến của block hiện tại và phí tối đa có thể xảy ra.
  5. Tỷ giá Chainlink ETH/USD được dùng để ước tính phí bằng đô la.

Bản xem trước có thể bao gồm các giá trị như số đơn vị gas ước tính, giới hạn gas, phí cơ sở, phí ưu tiên, phí tối đa cho mỗi gas, chi phí ETH dự kiến, chi phí ETH tối đa và số dư ví. Hãy xem phí tối đa là một mức ước tính cao nhất và xác nhận rằng số dư của bạn đủ để chi trả giao dịch.

Mở Deployment Đã Lưu và Gọi Các Hàm

Chọn Open deployed <name> để làm việc với một contract đã được lưu trước đó trong deployments.json. Giao diện gắn nhãn các hàm khả dụng theo hành vi của chúng:

  • [read] xác định các hàm view và pure không gửi giao dịch.
  • [write] xác định các hàm thay đổi trạng thái và yêu cầu giao dịch.
  • [payable] xác định các hàm có thể nhận ETH.
  • [info] Contract balance hiển thị số dư của contract.
  • <- Back to main menu quay lại menu chính.

Các lệnh gọi chỉ đọc có thể được dùng để kiểm tra trạng thái contract. Các lệnh gọi ghi và payable sẽ đi qua bước xem trước gas và yêu cầu xác nhận trước khi giao dịch được gửi. Giao diện cũng cung cấp thao tác OK để bạn có thể hủy thay vì gửi một thao tác.

Chạy Mempool Stream

Mempool stream chạy như một tiến trình riêng. Khởi động thủ công bằng:

node mempool.js

Stream định dạng hoạt động được phát hiện cùng các chi tiết như người mua, router, lượng ETH, token, phương thức, ID giao dịch và trạng thái kết quả. README cũng hiển thị thông tin giao dịch và lợi nhuận cho quy trình được stream hỗ trợ.

Nguồn token là erc20.json, tuân theo định dạng Uniswap Token List Schema từ Sequence Token Directory. Bộ nạp hỗ trợ mảng token thuần hoặc một object chứa mảng tokens. Bộ nạp lọc các địa chỉ không hợp lệ và địa chỉ zero, giữ lại các token có chainId bằng 1, rồi trích xuất địa chỉ, ký hiệu và tên của từng token.

Nếu thiếu erc20.json, stream sẽ chuyển sang dùng các địa chỉ ngẫu nhiên và hiển thị cảnh báo. Dừng stream bằng Ctrl+C, hoặc sử dụng tùy chọn dừng khi tùy chọn này xuất hiện trong giao diện tương tác.

Sử dụng Import Solidity

Trình biên dịch tích hợp hỗ trợ một số kiểu import:

  • URL GitHub, chẳng hạn import "https://github.com/Uniswap/v3-core/...";
  • Import CDN kiểu npm, chẳng hạn import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  • Các package có trong node_modules cục bộ.
  • Import cục bộ tương đối, chẳng hạn import "./MyLib.sol";

Các liên kết GitHub sử dụng dạng github.com/owner/repo/blob/branch/path sẽ tự động được chuyển đổi sang dạng tương đương raw.githubusercontent.com.

Cấu Trúc Dự Án

Các tệp và thư mục chính có vai trò như sau:

  • start.js là điểm bắt đầu cho node start.
  • deploy.js chứa logic triển khai và menu tương tác.
  • mempool.js chạy mempool stream riêng.
  • erc20.json chứa danh sách token được stream sử dụng.
  • deployments.json lưu dữ liệu deployment và được tự động tạo.
  • lib/ui.js quản lý màu sắc, menu, hộp và nhật ký.
  • lib/env.js xử lý biến môi trường, dữ liệu deployment và liên kết explorer.
  • lib/compile.js xử lý việc biên dịch và phân giải import.
  • lib/chain.js xử lý gas, receipt và định giá ETH.
  • lib/contract.js xử lý việc triển khai, gọi hàm và khởi chạy stream.

Mẹo Nâng Cao và Kiểm Tra Vận Hành

  • Xác nhận endpoint RPC của bạn là Ethereum Mainnet. Ứng dụng yêu cầu chain ID 1 và từ chối các mạng khác.
  • Kiểm tra số dư ví trước khi xác nhận deployment hoặc thao tác ghi.
  • Sử dụng deployments.json làm dữ liệu deployment cục bộ và tránh commit thông tin kiểm thử nhạy cảm hoặc không chủ ý.
  • Kiểm tra mã nguồn contract, các dependency đã import, địa chỉ đích và giá trị payable trước khi gửi giao dịch.
  • Kiểm tra phiên bản trình biên dịch Solidity đã cài đặt bằng node -e "console.log(require('solc').version())".
  • Xác minh các dependency đã có bằng ls node_modules | head.
  • Lưu ý rằng theo lộ trình hiện tại, dự án không cung cấp hỗ trợ multisig, xuất ABI sang kiểu TypeScript hoặc mô phỏng giao dịch Tenderly.

Danh Sách Kiểm Tra Bảo Mật

  1. Không bao giờ công khai hoặc commit PRIVATE_KEY.
  2. Giữ .env trong .gitignore.
  3. Sử dụng ví chỉ chứa số tiền cần thiết cho thao tác.
  4. Đọc toàn bộ bản xem trước gas trước khi chọn OK.
  5. Xác minh giao diện báo Ethereum Mainnet và chain ID 1.
  6. Kiểm tra kỹ các contract và địa chỉ trước khi sử dụng các hàm write hoặc payable.

Các Lệnh Hữu Ích

npm install
node start
npm start
node mempool.js
node -e "console.log(require('solc').version())"
ls node_modules | head

Kết Luận

Arbitrage Contract Deployer cung cấp quy trình làm việc trên terminal để biên dịch Solidity, triển khai contract lên Ethereum Mainnet, mở lại các deployment đã lưu, gọi các hàm contract và xem xét chi phí giao dịch. Sau khi Node.js, các dependency và tệp .env an toàn được cấu hình, menu tương tác sẽ hướng dẫn việc triển khai và thao tác contract, đồng thời hiển thị các ước tính về gas và ETH/USD. Vì mọi giao dịch Mainnet đều sử dụng tiền thật, hãy vận hành thận trọng và chỉ xác nhận giao dịch sau khi đã xem xét chi tiết.

Dự án được phát hành theo giấy phép MIT. Các đóng góp cần tránh đưa thông tin xác thực vào các commit và đảm bảo rằng deployments.json chỉ chứa dữ liệu cục bộ phù hợp.