Cấu trúc dữ liệu JSON phổ biến cho các phương thức RPC của Solana
Các phương thức RPC Solana khác nhau sẽ trả về các phản hồi phức tạp hơn dưới dạng các đối tượng JSON có cấu trúc, chứa các giá trị được gắn với khóa cụ thể.
Những cấu trúc dữ liệu JSON phổ biến nhất bao gồm:
Transactions
Transactions trên Solana khá khác so với các blockchain khác. Hãy xem xét Cấu trúc của một Transaction để tìm hiểu về transactions trên Solana.
JSON
Cấu trúc JSON của một transaction được định nghĩa như sau:
message: <object>
- Xác định nội dung của transaction.accountKeys: <array[string]>
- Danh sách các khóa công khai được mã hóa base-58 được sử dụng bởi transaction, bao gồm cả trong các chỉ thị và cho chữ ký.message.header.numRequiredSignatures
khóa công khai đầu tiên phải ký transaction.header: <object>
- Chi tiết các loại tài khoản và chữ ký cần thiết cho transaction.numRequiredSignatures: <number>
- Tổng số chữ ký cần thiết để làm cho transaction hợp lệ. Các chữ ký phải khớp vớinumRequiredSignatures
đầu tiên củamessage.accountKeys
.numReadonlySignedAccounts: <number>
-numReadonlySignedAccounts
khóa cuối cùng trong số các khóa đã ký là tài khoản chỉ đọc. Các program có thể xử lý nhiều transaction tải các tài khoản chỉ đọc trong một mục PoH duy nhất, nhưng không được phép ghi có hoặc ghi nợ lamport hoặc sửa đổi dữ liệu tài khoản. Các transaction nhắm vào cùng một tài khoản đọc-ghi được đánh giá tuần tự.numReadonlyUnsignedAccounts: <number>
-numReadonlyUnsignedAccounts
khóa cuối cùng trong số các khóa chưa ký là tài khoản chỉ đọc.
recentBlockhash: <string>
- Một hash được mã hóa base-58 của một block gần đây trong sổ cái được sử dụng để ngăn chặn sự trùng lặp transaction và để cung cấp thời gian tồn tại cho transaction.instructions: <array[object]>
- Danh sách các chỉ thị program sẽ được thực thi theo trình tự và được cam kết trong một transaction nguyên tử nếu tất cả đều thành công.programIdIndex: <number>
- Chỉ mục trong mảngmessage.accountKeys
chỉ ra tài khoản program thực thi chỉ thị này.accounts: <array[number]>
- Danh sách các chỉ mục theo thứ tự trong mảngmessage.accountKeys
chỉ ra những tài khoản nào sẽ được chuyển đến program.data: <string>
- Dữ liệu đầu vào của program được mã hóa trong một chuỗi base-58.
addressTableLookups: <array[object]|undefined>
- Danh sách các tra cứu bảng địa chỉ được sử dụng bởi một transaction để tải động các địa chỉ từ các bảng tra cứu địa chỉ trên chuỗi. Không xác định nếumaxSupportedTransactionVersion
không được thiết lập.accountKey: <string>
- Khóa công khai được mã hóa base-58 cho một tài khoản bảng tra cứu địa chỉ.writableIndexes: <array[number]>
- Danh sách các chỉ mục được sử dụng để tải địa chỉ của các tài khoản có thể ghi từ bảng tra cứu.readonlyIndexes: <array[number]>
- Danh sách các chỉ mục được sử dụng để tải địa chỉ của các tài khoản chỉ đọc từ bảng tra cứu.
signatures: <array[string]>
- Danh sách các chữ ký được mã hóa base-58 áp dụng cho transaction. Danh sách luôn có độ dàimessage.header.numRequiredSignatures
và không rỗng. Chữ ký tại chỉ mụci
tương ứng với khóa công khai tại chỉ mụci
trongmessage.accountKeys
. Chữ ký đầu tiên được sử dụng làm transaction id.
JSON đã phân tích
Cấu trúc JSON đã phân tích của một giao dịch có cấu trúc tương tự như định dạng JSON thông thường, với việc phân tích bổ sung thông tin về tài khoản và hướng dẫn:
message: <object>
- Xác định nội dung của giao dịch.accountKeys: <array[object]>
- Danh sách thông tin tài khoản được sử dụng bởi giao dịch.pubkey: <string>
- Khóa công khai mã hóa base-58 của tài khoản.signer: <boolean>
- Cho biết liệu tài khoản có phải là người ký giao dịch bắt buộc hay không.writable: <boolean>
- Cho biết liệu tài khoản có thể ghi được hay không.source: <string>
- Nguồn của tài khoản (giao dịch hoặc bảng tra cứu).
recentBlockhash: <string>
- Một mã hash mã hóa base-58 của một khối gần đây trong sổ cái được sử dụng để ngăn chặn sao chép giao dịch và để cung cấp thời gian tồn tại cho giao dịch.instructions: <array[object]>
- Danh sách các hướng dẫn chương trình đã phân tích.program: <string>
- Tên của chương trình được gọi.programId: <string>
- Khóa công khai mã hóa base-58 của chương trình.stackHeight: <number|null>
- Chiều cao ngăn xếp của hướng dẫn.parsed: <object>
- Dữ liệu đã phân tích cụ thể cho chương trình.type: <string>
- Loại hướng dẫn (ví dụ: "transfer").info: <object>
- Thông tin hướng dẫn đã phân tích cụ thể cho chương trình và loại hướng dẫn.
signatures: <array[string]>
- Danh sách các chữ ký mã hóa base-58 được áp dụng cho giao dịch.
Metadata trạng thái giao dịch
err: <object|null>
- Lỗi nếu giao dịch thất bại, null nếu giao dịch thành công. Định nghĩa TransactionErrorfee: <u64>
- phí mà giao dịch này bị tính, dưới dạng số nguyên u64preBalances: <array>
- mảng số dư tài khoản u64 từ trước khi giao dịch được xử lýpostBalances: <array>
- mảng số dư tài khoản u64 sau khi giao dịch được xử lýinnerInstructions: <array|null>
- Danh sách hướng dẫn nội bộ hoặcnull
nếu ghi lại hướng dẫn nội bộ không được bật trong giao dịch nàypreTokenBalances: <array|undefined>
- Danh sách số dư token từ trước khi giao dịch được xử lý hoặc bị bỏ qua nếu ghi lại số dư token chưa được bật trong giao dịch nàypostTokenBalances: <array|undefined>
- Danh sách số dư token từ sau khi giao dịch được xử lý hoặc bị bỏ qua nếu ghi lại số dư token chưa được bật trong giao dịch nàylogMessages: <array|null>
- mảng các thông báo nhật ký dạng chuỗi hoặcnull
nếu ghi lại thông báo nhật ký không được bật trong giao dịch nàyrewards: <array|null>
- phần thưởng cấp giao dịch; một mảng các đối tượng JSON chứa:pubkey: <string>
- Khóa công khai, dưới dạng chuỗi mã hóa base-58, của tài khoản nhận phần thưởnglamports: <i64>
- số lamport phần thưởng được ghi có hoặc ghi nợ bởi tài khoản, dưới dạng i64postBalance: <u64>
- số dư tài khoản tính bằng lamport sau khi phần thưởng được áp dụngrewardType: <string|undefined>
- loại phần thưởng: "fee", "rent", "voting", "staking"commission: <u8|undefined>
- hoa hồng tài khoản bỏ phiếu khi phần thưởng được ghi có, chỉ hiện diện cho phần thưởng bỏ phiếu và staking
- ĐÃ LỖI THỜI:
status: <object>
- Trạng thái giao dịch"Ok": <null>
- Giao dịch thành công"Err": <ERR>
- Giao dịch thất bại với TransactionError
loadedAddresses: <object|undefined>
- Địa chỉ giao dịch được tải từ bảng tra cứu địa chỉ. Không xác định nếumaxSupportedTransactionVersion
không được đặt trong tham số yêu cầu, hoặc nếu mã hóajsonParsed
được đặt trong tham số yêu cầu.writable: <array[string]>
- Danh sách có thứ tự các địa chỉ mã hóa base-58 cho các tài khoản đã tải có thể ghireadonly: <array[string]>
- Danh sách có thứ tự các địa chỉ mã hóa base-58 cho các tài khoản đã tải chỉ đọc
returnData: <object|undefined>
- dữ liệu trả về gần đây nhất được tạo bởi một hướng dẫn trong giao dịch, với các trường sau:programId: <string>
- chương trình đã tạo dữ liệu trả về, dưới dạng Pubkey mã hóa base-58data: <[string, encoding]>
- dữ liệu trả về, dưới dạng dữ liệu nhị phân mã hóa base-64
computeUnitsConsumed: <u64|undefined>
- số lượng đơn vị tính toán được tiêu thụ bởi giao dịchversion: <"legacy"|number|undefined>
- Phiên bản giao dịch. Không xác định nếumaxSupportedTransactionVersion
không được đặt trong tham số yêu cầu.signatures: <array>
- hiện diện nếu "signatures" được yêu cầu cho chi tiết giao dịch; một mảng các chuỗi chữ ký, tương ứng với thứ tự giao dịch trong khối
Hướng dẫn bên trong
Môi trường chạy Solana ghi lại các hướng dẫn chéo chương trình được gọi trong quá trình xử lý giao dịch và cung cấp chúng để tăng tính minh bạch về những gì đã được thực thi trên chuỗi cho mỗi hướng dẫn giao dịch. Các hướng dẫn được gọi được nhóm theo hướng dẫn giao dịch ban đầu và được liệt kê theo thứ tự xử lý.
Cấu trúc JSON của các hướng dẫn bên trong được định nghĩa là một danh sách các đối tượng trong cấu trúc sau:
index: number
- Chỉ số của hướng dẫn giao dịch từ đó các hướng dẫn bên trong bắt nguồninstructions: <array[object]>
- Danh sách có thứ tự các hướng dẫn chương trình bên trong đã được gọi trong một hướng dẫn giao dịch đơn lẻ.programIdIndex: <number>
- Chỉ số vào mảngmessage.accountKeys
chỉ ra tài khoản chương trình thực thi hướng dẫn này.accounts: <array[number]>
- Danh sách các chỉ số có thứ tự vào mảngmessage.accountKeys
chỉ ra những tài khoản nào cần chuyển đến chương trình.data: <string>
- Dữ liệu đầu vào của chương trình được mã hóa trong chuỗi base-58.
Số dư token
Cấu trúc JSON của số dư token được định nghĩa là một danh sách các đối tượng trong cấu trúc sau:
accountIndex: <number>
- Chỉ số của tài khoản mà số dư token được cung cấp.mint: <string>
- Pubkey của mint token.owner: <string|undefined>
- Pubkey của chủ sở hữu số dư token.programId: <string|undefined>
- Pubkey của Token Program sở hữu tài khoản.uiTokenAmount: <object>
-amount: <string>
- Số lượng token thô dưới dạng chuỗi, bỏ qua số thập phân.decimals: <number>
- Số thập phân được cấu hình cho mint của token.uiAmount: <number|null>
- Số lượng token dưới dạng số thực, tính đến số thập phân. ĐÃ LỖI THỜIuiAmountString: <string>
- Số lượng token dưới dạng chuỗi, tính đến số thập phân.
Is this page helpful?