Trang chủHướng dẫnSolidity ABI (Application Binary Interface) là gì?
Blockchain

Solidity ABI (Application Binary Interface) là gì?

CyStack blog 4 phút để đọc
CyStack blog08/05/2025
Locker Avatar

Đức Hacker

My passion is hunting down the latest attack trends—ransomware, APTs, you name it—while passing on knowledge to help businesses forge ironclad defenses. I’ve left my mark on data encryption projects and intrusion detection tools now widely used across Vietnam. I’m the shadow that strikes before the enemy does.

Locker logo social
Reading Time: 4 minutes

Khi bạn viết smart contract bằng Solidity và triển khai lên Ethereum, việc đầu tiên cần làm là dịch mã nguồn Solidity. Tiếp theo, Solidity compiler (đặc biệt là solc) sẽ “biên dịch” hợp đồng thành hai thành phần quan trọng: BytecodeABI (Application Binary Interface). Dưới đây mình sẽ đi sâu hơn vào 2 khái niệm này.

solidity abi encoding

Bytecode là gì?

Bytecode là phiên bản đã được biên dịch của smart contract, dưới dạng chuỗi nhị phân (thường hiển thị ở định dạng hexadecimal) mà Ethereum Virtual Machine (EVM) có thể đọc và thực thi. Một khi đã biên dịch, đoạn mã Solidity gốc sẽ không còn giữ nguyên dạng con người có thể đọc được nữa.

Trong bytecode, mọi chức năng của smart contract được chuyển thành opcode — tức là những chỉ thị máy cực kỳ ngắn gọn mà EVM hiểu và xử lý.

Bytecode được chia thành 2 loại:

  • Creation bytecode: Đây là đoạn mã chứa constructor và các thông tin cần thiết để triển khai (deploy) smart contract. Creation bytecode chỉ chạy một lần duy nhất khi bạn deploy hợp đồng lên blockchain.
  • Runtime bytecode: Sau khi hợp đồng được triển khai thành công, chỉ phần runtime bytecode mới được lưu vĩnh viễn trên blockchain. Runtime bytecode chính là phần code thực thi các chức năng của smart contract sau này.

Có thể bạn quan tâm: Payable function trong Solidity

ABI là gì trong Solidity?

ABI (Application Binary Interface) trong Solidity có thể hiểu đơn giản là “cầu nối” giữa con người (hoặc ứng dụng) và bộ máy EVM.

Khi một smart contract được triển khai, ABI sẽ mô tả toàn bộ danh sách các hàm, sự kiện và kiểu dữ liệu mà contract đó cung cấp, dưới dạng một file JSON. Đây chính là bản “hướng dẫn” để các phần mềm bên ngoài biết cách tương tác với smart contract.

Nói ngắn gọn:

  • Frontend (như giao diện web hoặc app) sẽ dựa vào ABI để biết có những hàm nào, tham số ra sao, từ đó gửi yêu cầu đúng cách.
  • EVM thì nhận dữ liệu đã được “mã hóa” theo chuẩn ABI để thực thi các hành động bên trong blockchain.

Không có ABI, frontend không thể gọi được các hàm của smart contract, và EVM cũng không hiểu dữ liệu bạn gửi vào cần xử lý thế nào.

Vậy ABI Solidity và API khác nhau như thế nào?

Trong Web2, API (Application Programming Interface) là cầu nối giúp client (ví dụ trình duyệt, app) giao tiếp với server. Còn trong Web3, ABI (Application Binary Interface) đóng vai trò kết nối giữa ứng dụng (hoặc smart contract khác) với mã bytecode của contract trên blockchain.

Nói một cách dễ hiểu: ABI chính là “API của blockchain”. Tuy nhiên, có một điểm khác biệt quan trọng — dữ liệu trên blockchain không phải dạng văn bản dễ đọc mà là chuỗi nhị phân (hexadecimal), nên cần có ABI để “dịch” đúng cách

Solidity ABI Encoding và Decoding là gì?

  • ABI Encoding: Khi bạn muốn gọi một hàm trong smart contract, ABI sẽ mã hóa tên hàm và các tham số thành chuỗi hex để EVM có thể hiểu và xử lý.
  • ABI Decoding: Khi EVM thực thi xong và trả kết quả (dưới dạng hex), ABI sẽ giải mã ngược lại thành dạng dữ liệu mà con người hoặc ứng dụng frontend có thể đọc được.

Toàn bộ quá trình encodedecode này thường được tự động thực hiện bởi Solidity compiler hoặc thư viện hỗ trợ như ethers.js.

Quy trình giao dịch với ABI Contract

  1. Frontend đọc định dạng ABI và chọn function muốn gọi.
  2. Frontend encode function call + tham số và gửi đi thông qua transaction.
  3. Node Ethereum nhận transaction, xử lý, sinh receipt trie chứa log và gas fee.

Trong receipt trie, Ethereum lưu trữ thông tin:

  • Trạng thái transaction.
  • Gas tiêu thụ.
  • Các log events.
  • Bloom filter tổng hợp.

Đọc thêm: Cách deploy smart contract trên Polygon

Ví dụ: Chuyển ERC-20 Token

Giả sử ta muốn chuyển token ERC-20:

transfer(address to, uint amount) external;

Frontend sử dụng ABI để encode lệnh “transfer”, EVM đọc opcode, thực thi chuyển token, rồi ABI decode trả về kết quả thành công.

ABI to Interface Solidity và cách convert ABI to Solidity

Khi bạn đã có file ABI của một smart contract, bạn hoàn toàn có thể chuyển ABI thành Interface trong Solidity để dễ dàng import và tương tác trong dự án của mình.

Một số công cụ phổ biến hỗ trợ chuyển đổi này là:

  • OpenZeppelin Wizard: Giao diện đơn giản để tạo nhanh interface từ ABI.
  • Hardhat plugin hardhat-abi-exporter: Tự động xuất ABI khi compile, và bạn có thể dùng để tạo file interface.

Việc convert ABI to Solidity giúp bạn có được một bản interface chuẩn, dễ dàng gọi hàm, kiểm tra kiểu dữ liệu, và tận dụng type checking trong IDE.

Kết luận

Hiểu rõ về Application Binary Interface (ABI) sẽ giúp bạn viết dApps và smart contracts trên Ethereum một cách chính xác và hiệu quả hơn. ABI không chỉ đơn thuần là “cầu nối” giữa con người và máy móc, mà còn là chìa khóa để Solidity có thể giao tiếp trơn tru với EVM. Nếu bạn muốn nâng trình hơn nữa, mình khuyên bạn nên tìm hiểu thêm về Solidity Interface — một khái niệm cực kỳ quan trọng trong việc để các smart contract “nói chuyện” với nhau trên blockchain!

Bài viết liên quan:

0 Bình luận

Đăng nhập để thảo luận

CyStack blog

Mẹo, tin tức, hướng dẫn và các best practice độc quyền của CyStack

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.