Các phương thức để gửi, mô phỏng và quản lý giao dịch.
sendTransaction
sendTransaction(tx: Transaction): TransactionMetadata | FailedTransactionMetadata
Thực thi một giao dịch. Trả về siêu dữ liệu khi thành công hoặc chi tiết lỗi khi thất bại.
const result = client.svm.sendTransaction(signedTx);// Check for errorsif ("err" in result && result.err()) {console.error("Transaction failed:", result.err());return;}// Access result properties (note: these are getter functions)console.log("Signature:", result.signature());console.log("Compute units:", result.computeUnitsConsumed());console.log("Logs:", result.logs());
Các thuộc tính kết quả giao dịch như err(), computeUnitsConsumed(),
logs() và signature() là các hàm getter, không phải thuộc tính. Luôn
gọi chúng kèm dấu ngoặc đơn.
Các Phương Thức TransactionMetadata
| Phương thức | Trả về | Mô tả |
|---|---|---|
signature() | Uint8Array | Byte chữ ký giao dịch |
computeUnitsConsumed() | bigint | Số đơn vị tính toán đã dùng |
logs() | string[] | Nhật ký chương trình |
innerInstructions() | InnerInstruction[] | Lệnh nội (CPI) |
returnData() | TransactionReturnData | Dữ liệu trả về từ các chương trình |
prettyLogs() | string | Nhật ký được định dạng với màu sắc |
simulateTransaction
simulateTransaction(tx: Transaction): SimulatedTransactionInfo | FailedTransactionMetadata
Mô phỏng một giao dịch mà không thay đổi trạng thái.
const simResult = client.svm.simulateTransaction(signedTx);if ("err" in simResult && simResult.err()) {console.error("Simulation failed:", simResult.err());return;}// Use .meta() to get TransactionMetadataconst meta = simResult.meta();console.log("Would use", meta.computeUnitsConsumed(), "compute units");console.log("Logs:", meta.logs());// Get post-execution account statesconst postAccounts = simResult.postAccounts();console.log("Post-state accounts:", postAccounts);
Mô phỏng không thay đổi trạng thái. Hãy dùng nó để kiểm tra giao dịch trước khi gửi.
Quản Lý Blockhash
latestBlockhash
latestBlockhash(): Blockhash
Lấy blockhash hiện tại.
const blockhash = client.svm.latestBlockhash();console.log("Blockhash:", blockhash);
getLatestBlockhash (qua client.rpc)
Lấy blockhash kèm thông tin thời hạn để xây dựng giao dịch thủ công.
Sử dụng trình trợ giúp RPC vì nó trả về cả blockhash lẫn lastValidBlockHeight.
import {createTransactionMessage,setTransactionMessageLifetimeUsingBlockhash} from "@solana/kit";const { value: blockhashLifetime } = await client.rpc.getLatestBlockhash().send();const tx = setTransactionMessageLifetimeUsingBlockhash(blockhashLifetime,createTransactionMessage({ version: 0 }));
Khi sử dụng các plugin chương trình như systemProgram() hay tokenProgram(), bạn
không bao giờ cần tự lấy blockhash — client.sendTransaction() (và
trình trợ giúp .sendTransaction() trên chuỗi lệnh) sẽ xử lý việc đó cho bạn.
expireBlockhash
expireBlockhash(): LiteSVM
Chuyển sang blockhash mới. Hữu ích để kiểm tra các kịch bản hết hạn blockhash.
const oldBlockhash = client.svm.latestBlockhash();client.svm.expireBlockhash();const newBlockhash = client.svm.latestBlockhash();console.log("Old:", oldBlockhash);console.log("New:", newBlockhash);// Blockhashes will be different
Lịch Sử Giao Dịch
Bật lịch sử giao dịch để truy xuất các giao dịch sau khi gửi:
// Enable history storage (stores last N transactions)client.svm.withTransactionHistory(100n);// Send a transactionconst result = client.svm.sendTransaction(signedTx);// Later, retrieve it by signature (base58 string)// Note: getTransaction expects a base58-encoded signature string
Is this page helpful?