Aptos Blockchain là một nhánh từ Diem blockchain với số tiền gọi vốn lên đến $350M trong mùa downtrend. Đặc biệt Aptos gây chú ý gần đây bởi sự kiện Airdrop rất hào phóng của mình với hơn 20M APT. Rất nhiều người đã kiếm được số tiền lớn từ $1K đến $10K từ đợt Airdrop này. Hôm nay mình sẽ viết bài tìm hiểu về Aptos Blockchain dưới vai trò của Dev.
Có thể bạn quan tâm: Tìm hiểu Aptos và Sui: Cuộc đua blockchain thế hệ mới
Mục lục
Tìm hiểu một số khái niệm trên Aptos
Các khái niệm này bạn xem chi tiết trên: Aptos Concepts
- State (Trạng thái): Trạng thái, tức là trạng thái sổ cái chuỗi khối Aptos, đại diện cho trạng thái của tất cả các tài khoản trong chuỗi khối Aptos.
- Ledger state (Trạng thái sổ cái): Trạng thái tổng thể (global state), đại diện cho trạng thái của tất cả các tài khoản trong chuỗi khối Aptos. Mỗi nút xác thực trong chuỗi khối phải biết phiên bản mới nhất của trạng thái tổng thể để thực hiện bất kỳ giao dịch nào.
- Transaction (Giao dịch): Là các giao dịch để thực hiện việc trao đổi dữ liệu giữa các tài khoản trên Aptos. Khi một khách hàng gửi một giao dịch đến chuỗi khối Aptos, thì nếu giao dịch thành công, trạng thái sổ cái sẽ được cập nhật. Một giao dịch gồm các thông tin sau:
- Signature: Chữ ký của người gửi, để xác nhận rằng đúng là họ đã tạo ra giao dịch này.
- Sender address: Địa chỉ người gửi
- Sender public key: Khóa công khai tương ứng
- Program: Một chương trình bao gồm:
- Một module Move và tên chức năng
- Một danh sách tùy chọn các đầu vào cho tập lệnh.
- Danh sách tùy chọn của các mô-đun Move bytecode để xuất bản.
- Gas price: Số tiền mà người gửi sẵn sàng trả cho mỗi đơn vị gas để thực hiện giao dịch. Gas là một cách để thanh toán cho việc tính toán và lưu trữ.
- Maximum gas amount: Lượng GAS tối đa mà giao dịch được phép tiêu thụ
- Sequence number: Là số nguyên không dấu, số này tăng dần sau mỗi giao dịch.
- Expiration time: Xác định thời gian mà sau thời gian này thì giao dịch không còn hiệu lực.
- Proof: Blockchain Aptos sử dụng Proof để xác minh tính xác thực và tính đúng đắn của dữ liệu blockchain.
- Account: Một tài khoản trên Aptos blockchain chứa các tài sản blockchain (Coins, NFTs,..). Bất kỳ tài sản nào đều được thể hiện trong Account dưới dạng Resource (Tài nguyên). Mỗi account được xác định bằng 1 địa chỉ 32 byte. Việc tạo một account theo các bước sau:
- B1: Sinh ra cặp Private key / Public key
- B2: Xác định signature scheme, dạng chữ ký đơn (Ed25519) hay đa chứ ký (MultiEd25519)
- B3: Kết hợp public key với signature scheme tạo ra authentication key (32 byte)
- B4: Khởi tạo số account sequence thành 0. Cả authentication key và sequence number đều được lưu trong account dưới dạng tài nguyên ban đầu.
- B5: Tạo địa chỉ tài khoản 32 byte từ khóa xác thực authentication key ban đầu.
- Account sequence number: Số thứ tự một tài khoản, nó cho biết số lượng giao dịch đã được gửi và cam kết trên chuỗi từ tài khoản đó. Mọi giao dịch đều phải có sequence number hiện tại. Khi xử lý giao dịch, Aptos sẽ kiểm tra số thứ tự trong giao dịch có khớp với sequence number trong tài khoản không, nếu không khớp giao dịch sẽ bị từ chối. Việc này giúp chống tấn công phát lại (Relay attack).
- Account address: Địa chỉ tài khoản tạo thông qua authentication key khởi tạo ban đầu.
- Signature scheme: Aptos hỗ trợ hai loại
- Ed25519 cho các giao dịch chữ ký đơn
- MultiEd25519 dành cho các giao dịch đa chữ ký.
- Event: Event là sự kiện được sinh ra trong quá trình thực hiện một giao dịch. Định nghĩa sự kiện và thời điểm phát ra phụ thuộc vào cách xử lý trong Move.
- GAS:
- Để thực hiện một giao dịch trên Aptos, bạn phải trả một khoản phí xử lý. Chi phí này phụ thuộc vào tài nguyên máy tính và lưu trữ mà bạn sử dụng trên blockchain để:
- Xử lý giao dịch của bạn trên Blockchain
- Phát tán giao dịch ra toàn bộ mạng chính
- Lưu trữ dữ liệu trong CSDL phân tán
- Bạn có thể trả phí cao hơn để giao dịch của bạn được ưu tiên hơn.
- Unit of gas: Đại diện cho 1 đơn vị tiêu thụ tài nguyên cơ bản.
- Gas price: Chi phí trả cho 1 đơn vị GAS, và nó phải trên một mức tối thiểu.
- Để thực hiện một giao dịch trên Aptos, bạn phải trả một khoản phí xử lý. Chi phí này phụ thuộc vào tài nguyên máy tính và lưu trữ mà bạn sử dụng trên blockchain để:
- Transaction Fee: Khi một giao dịch được gửi tới Aptos blockchain, nó phải có các trường sau:
- max_gas_amount: Chi phí tối đa trả cho giao dịch
- gas_price: Chi phí trả cho 1 đơn vị gas tính theo đơn vị Octa (1 APT = 10^8 Octa)
=> Transaction Fee = (total gas units consumed)*(gas_price)<=max_gas_amount
- Aptos Node: Một thực thể trong hệ sinh thái Aptos theo dõi trạng thái của chối khối Aptos, là nơi người dùng tương tác. Gồm có hai loại: Fullnode và Validator node
- FullNode:
- Mỗi fullnode gồm các thành phần logic sau (Không có Censensus):
- Fullnode có chức năng sau:
- Nhận giao dịch từ client và chuyển chúng tới các validator node
- Thực hiện lại tất cả các giao dịch trong lịch sử của blockchain Aptos
- Sao chép và xác minh toàn bộ trạng thái của blockchain bằng cách đồng bộ hóa với node khác
- Không tham gia vào sự đồng thuận nhưng giúp giám sát các Validator node, tránh các validator node thông đồng tạo ra các giao dịch không được phép.
- Fullnode chia làm hai loại:
- Validator fullnode: Kết nối trực tiếp với các Validator node, cung cấp khả năng mở rộng và giảm thiểu tấn công DDoS.
- Public fullnode: Kết nối tới validator fullnode hoặc các public node khác
- Validator Node:
- Thành phần logic giống fullnode nhưng thêm Consensus
- Khi một giao dịch được gửi đến chuỗi khối Aptos, các Validator node sẽ chạy một giao thức đồng thuận phân tán, thực hiện giao dịch và lưu trữ giao dịch cũng như kết quả thực hiện trên blockchain. Các validator node quyết định giao dịch nào sẽ được thêm vào blockchain và theo thứ tự nào
- Aptos sử dụng giao thức đồng thuận Byzantine Fault Tolerance (BFT) để các validator node đồng ý về sổ cái của các giao dịch đã hoàn thành và kết quả thực hiện của chúng. Các validator node xử lý các giao dịch này và đưa chúng vào bản sao cục bộ của cơ sở dữ liệu blockchain.
- Validator node giao tiếp trực tiếp với validator node khác thông qua mạng riêng (Private network).
- Giao thức đồng thuận AptosBFT cung cấp khả năng chịu lỗi lên đến một phần ba số nút xác thực độc hại.
- FullNode:
- Staking:
- Validator có thể tham gia vào quá trình đồng thuận. Tuy nhiên, Validator chỉ có thể có được quyền biểu quyết khi họ đặt cược, tức là đặt đồng tiền tiện ích của họ vào ký quỹ. Đặt cược càng nhiều thì vote weight càng cao, phần thưởng càng cao.
- Có ba đối tượng tham gia:
- Owner (Chủ sở hữu): Là chủ sở hữu các quỹ, có quyền sau:
- Owner sở hữu tiền sẽ được sử dụng để đặt cược
- Owner mới có thể thêm / mở khóa / rút tiền
- Owner mới có thể kéo dài thời gian khóa
- Owner có quyền chỉ định Operator và Voter
- Phần thưởng sẽ được gửi vào tài khoản Owner
- Operator (Nhà điều hành): Node operator được chỉ định bởi Owner để chạy validator node. Có các quyền sau:
- Có quyền tham gia hoặc ròi khỏi nhóm Validator
- Thực hiện chức năng xác nhận (validating)
- Có quyền thay đổi consensus key và network address.
- Voter: Được owner chỉ định. Có quyền sau:
- Tham gia vào quản trị governance
- Owner (Chủ sở hữu): Là chủ sở hữu các quỹ, có quyền sau:
- Validation: Mỗi một epoch (Kỷ nguyên), luồng sau sẽ thực hiện lặp đi lặp lại hàng nghìn lần:
- B1: Validator leader sẽ được chọn theo một thuận toán xác định dưa trên danh tiếng (Hiệu suất xác nhận) và tiền đặt cọc.
- B2: Leader được chọn sẽ gửi một đề xuất (Gồm số phiếu và các giao dịch) cho block mới. Khi đạt tới sự đồng thuận, khối hoàn thành. Leader sẽ được khen thưởng, phần thưởng trao cho leader
- B3: Tất cả các validator sẽ bỏ phiếu cho đề xuất này
- B4: Lặp lại B1
Bắt đầu tiếp cận với Aptos
Cài đặt và sử dụng Aptos CLI
Cài đặt Aptos CLI
Để bắt đầu tiếp cần với Aptos bạn nên tham khảo bài viết: Aptos Getting Started. Thông thường để bắt đầu với Aptos bạn nên cài đặt Aptos CLI (Aptos Client), đây là một công cụ giúp bạn:
- Chạy Devnet trên Local
- Quản lý tài khoản
- Tạo khóa
- Biên dịch ngôn ngữ Move
Có hai cách để cài đặt:
C1: Cài đặt Aptos CLI từ tệp cài đặt
Thực hiện theo cách này sẽ đơn giản và nhanh nhất nếu bạn sử dụng Ubuntu 22, còn nếu bạn sử dụng Ubuntu 18 thì có thể phát sinh lỗi thư viện. Chi tiết tham khảo bài viết: Installing Aptos CLI. Bạn tải tệp cài đặt từ Aptos CLI Release v1.0.0, phiên bản mới nhất aptos-cli-1.0.0-Ubuntu-x86_64.zip hỗ trợ cho Ubuntu 22.
Lệnh cài đặt như sau:
wget https://github.com/aptos-labs/aptos-core/releases/download/aptos-cli-v1.0.1/aptos-cli-1.0.1-Ubuntu-22.04-x86_64.zip
unzip aptos-cli-1.0.1-Ubuntu-22.04-x86_64.zip
./aptos --help
Bản này chạy trên Ubuntu 18 bị lỗi liên quan tới phiên bản thư viện GLIBC nhưng chạy trên Ubuntu 22.04.1 okie.
C2: Cài đặt Aptos CLI từ source code
Bạn chạy lệnh sau để cài đặt Aptos CLI:
git clone https://github.com/aptos-labs/aptos-core.git
cd aptos-core
./scripts/dev_setup.sh
source ~/.cargo/env
git checkout --track origin/testnet
cargo build
Quá trình build mất khá nhiều thời gian, có thể gặp lỗi liên quan đến thư viện. Sau khi build thành công bạn sẽ thấy các tệp thực thi trong thư mục target/debug
Sử dụng Aptos CLI
Chi tiết bạn xem hướng dẫn: Using Aptos CLI. Hướng dẫn khá chi tiết và đầy đủ.
Bạn xem cú pháp lệnh bạn nhập theo cú pháp sau:
./aptos --help ./aptos account --help ./aptos config --help
Đầu tiên để chạy bạn phải khởi tạo cấu hình bằng lệnh sau. Trong lệnh này bạn chọn network (devnet, testnet, mainnet, local, custom) và private key tài khoản của bạn nếu đã có:
# Lệnh này để khởi tạo tài khoản, có nhiều tham số để bạn lựa chọn ./aptos init --help # Khởi tạo tài khoản với profile default ./aptos init # Khởi tạo tài khoản với profile mới ./aptos init --network mainnet --profile main2 --private-key <PRIVATE-KEY> # Show các profile ./aptos config show-profiles # Hiển thị chi tiết tài sản trong các account ứng với profile hiện hành ./aptos account list # Sinh cặp khóa mới ./aptos key generate --output-file test.json
Toàn bộ thông tin account, profile bạn có thể xem trực tiếp trong tệp: .aptos/config.yaml
cat .aptos/config.yaml
Thử một số lệnh sâu hơn:
# Khởi tạo tài khoản với profile mới sử dụng môi trường testnet ./aptos init --network testnet --profile test2 --private-key <PRIVATE-KEY> # Cài đặt ví Pontem, Petra, Martian rùi vào https://aptoslabs.com/testnet-faucet để lấy APT cho testnet # Kiểm tra tài khoản ./aptos account list --query balance --account test2 ./aptos account list --query resources --account test2 # Hiển thị các modules trong tài khoản ./aptos account list --query modules --account test2
Thực hiện một số lệnh với MOVE:
# Lấy mã nguồn aptos-core, trong đó có ví dụ moudle MOVE: HelloBlockchain git clone https://github.com/aptos-labs/aptos-core.git # Builđ module HelloBlockchain # Trong kết quả có địa chỉ trả về dạng # Kết quả sẽ có dạng như sau # e71c433934e2e8f349c7bf78f97f13a6bafa265a2dd348a5cf9f5cfbdb475981::message ./aptos move compile --package-dir aptos-core/aptos-move/move-examples/hello_blockchain --named-addresses hello_blockchain=test2 # Public move module ./aptos move publish --package-dir aptos-core/aptos-move/move-examples/hello_blockchain --named-addresses hello_blockchain=test2 --profile=test2 # Truy vấn các module ./aptos account list --query modules --account e71c433934e2e8f349c7bf78f97f13a6bafa265a2dd348a5cf9f5cfbdb475981 --profile=test2 # Chạy một MOVE function # Trả về hash: 0xc7c1a795a8613c9e5352f6bb01a142454cc1cc50ecf5d30150ebd056b2e2199f # Kiểm tra trên: https://explorer.aptoslabs.com/txn/0xc7c1a795a8613c9e5352f6bb01a142454cc1cc50ecf5d30150ebd056b2e2199f?network=testnet ./aptos move run --function-id e71c433934e2e8f349c7bf78f97f13a6bafa265a2dd348a5cf9f5cfbdb475981::message::set_message --args string:hello! --profile=test2
Chạy một Aptos fullnode
Chi tiết bạn xem hướng dẫn tại: Public Fullnode.
Bạn cũng nên tham khảo các tệp cấu hình cho Node (Node Files For Mainnet) và thông tin Aptos Blockchain Deployments.
Thực sự mình không có máy nào cấu hình mạnh chút để thử nên không thể viết chi tiết được, mong anh em thông cảm.
Viết DApp đầu tiên
xxx https://aptos.dev/tutorials/your-first-coin
Viết bot thao tác với Aptos Blockchain
Hiện tại các nền tảng NFT ra Launchpad khá nhiều, nhiều người đã kiếm được rất nhiều APT
BlueMove
Payload dạng như sau:
{
"function": "0x919dee75b7ef342ab6ae61e5f403db61a3766c8d7c6d2f9dd62b020be2ebfca1::factory::mint_with_quantity",
"type_arguments": [],
"arguments": [
"1"
],
"type": "entry_function_payload"
}
Tài liệu tham khảo:
Trả lời