Κοινές Δομές Δεδομένων JSON για Μεθόδους RPC της Solana
Διάφορες μέθοδοι RPC της Solana επιστρέφουν πιο σύνθετες απαντήσεις ως δομημένα αντικείμενα JSON, γεμάτα με συγκεκριμένες τιμές με κλειδιά.
Οι πιο κοινές από αυτές τις δομές δεδομένων JSON περιλαμβάνουν:
Συναλλαγές
Οι συναλλαγές είναι αρκετά διαφορετικές από εκείνες σε άλλα blockchain. Βεβαιωθείτε ότι θα εξετάσετε την Ανατομία μιας Συναλλαγής για να μάθετε σχετικά με τις συναλλαγές στη Solana.
JSON
Η δομή JSON μιας συναλλαγής ορίζεται ως εξής:
message: <object>
- Ορίζει το περιεχόμενο της συναλλαγής.accountKeys: <array[string]>
- Λίστα με δημόσια κλειδιά κωδικοποιημένα σε base-58 που χρησιμοποιούνται από τη συναλλαγή, συμπεριλαμβανομένων των οδηγιών και των υπογραφών. Τα πρώταmessage.header.numRequiredSignatures
δημόσια κλειδιά πρέπει να υπογράψουν τη συναλλαγή.header: <object>
- Περιγράφει λεπτομερώς τους τύπους λογαριασμών και τις υπογραφές που απαιτούνται από τη συναλλαγή.numRequiredSignatures: <number>
- Ο συνολικός αριθμός υπογραφών που απαιτούνται για να καταστεί έγκυρη η συναλλαγή. Οι υπογραφές πρέπει να αντιστοιχούν στα πρώταnumRequiredSignatures
τουmessage.accountKeys
.numReadonlySignedAccounts: <number>
- Τα τελευταίαnumReadonlySignedAccounts
από τα υπογεγραμμένα κλειδιά είναι λογαριασμοί μόνο για ανάγνωση. Τα προγράμματα μπορούν να επεξεργαστούν πολλαπλές συναλλαγές που φορτώνουν λογαριασμούς μόνο για ανάγνωση μέσα σε μια μόνο καταχώρηση PoH, αλλά δεν επιτρέπεται να πιστώνουν ή να χρεώνουν lamport ή να τροποποιούν δεδομένα λογαριασμού. Οι συναλλαγές που στοχεύουν τον ίδιο λογαριασμό ανάγνωσης-εγγραφής αξιολογούνται διαδοχικά.numReadonlyUnsignedAccounts: <number>
- Τα τελευταίαnumReadonlyUnsignedAccounts
από τα μη υπογεγραμμένα κλειδιά είναι λογαριασμοί μόνο για ανάγνωση.
recentBlockhash: <string>
- Ένα hash κωδικοποιημένο σε base-58 ενός πρόσφατου μπλοκ στο ledger που χρησιμοποιείται για την αποτροπή διπλών συναλλαγών και για να δώσει στις συναλλαγές διάρκεια ζωής.instructions: <array[object]>
- Λίστα οδηγιών προγράμματος που θα εκτελεστούν διαδοχικά και θα δεσμευτούν σε μία ατομική συναλλαγή εάν όλες επιτύχουν.programIdIndex: <number>
- Δείκτης στον πίνακαmessage.accountKeys
που υποδεικνύει τον λογαριασμό προγράμματος που εκτελεί αυτή την οδηγία.accounts: <array[number]>
- Λίστα ταξινομημένων δεικτών στον πίνακαmessage.accountKeys
που υποδεικνύουν ποιοι λογαριασμοί θα περάσουν στο πρόγραμμα.data: <string>
- Τα δεδομένα εισόδου του προγράμματος κωδικοποιημένα σε συμβολοσειρά base-58.
addressTableLookups: <array[object]|undefined>
- Λίστα αναζητήσεων πίνακα διευθύνσεων που χρησιμοποιούνται από μια συναλλαγή για τη δυναμική φόρτωση διευθύνσεων από πίνακες αναζήτησης διευθύνσεων στην αλυσίδα. Δεν ορίζεται αν τοmaxSupportedTransactionVersion
δεν έχει οριστεί.accountKey: <string>
- δημόσιο κλειδί κωδικοποιημένο σε base-58 για έναν λογαριασμό πίνακα αναζήτησης διευθύνσεων.writableIndexes: <array[number]>
- Λίστα δεικτών που χρησιμοποιούνται για τη φόρτωση διευθύνσεων εγγράψιμων λογαριασμών από έναν πίνακα αναζήτησης.readonlyIndexes: <array[number]>
- Λίστα δεικτών που χρησιμοποιούνται για τη φόρτωση διευθύνσεων λογαριασμών μόνο για ανάγνωση από έναν πίνακα αναζήτησης.
signatures: <array[string]>
- Μια λίστα υπογραφών κωδικοποιημένων σε base-58 που εφαρμόζονται στη συναλλαγή. Η λίστα έχει πάντα μήκοςmessage.header.numRequiredSignatures
και δεν είναι κενή. Η υπογραφή στον δείκτηi
αντιστοιχεί στο δημόσιο κλειδί στον δείκτηi
στοmessage.accountKeys
. Η πρώτη χρησιμοποιείται ως αναγνωριστικό συναλλαγής.
Ανάλυση JSON
Η αναλυμένη δομή JSON μιας συναλλαγής ακολουθεί παρόμοια δομή με την κανονική μορφή JSON, με επιπλέον ανάλυση πληροφοριών λογαριασμού και οδηγιών:
message: <object>
- Καθορίζει το περιεχόμενο της συναλλαγής.accountKeys: <array[object]>
- Λίστα πληροφοριών λογαριασμού που χρησιμοποιείται από τη συναλλαγή.pubkey: <string>
- Το δημόσιο κλειδί του λογαριασμού κωδικοποιημένο σε base-58.signer: <boolean>
- Υποδεικνύει αν ο λογαριασμός είναι απαραίτητος υπογράφων της συναλλαγής.writable: <boolean>
- Υποδεικνύει αν ο λογαριασμός είναι εγγράψιμος.source: <string>
- Πηγή του λογαριασμού (συναλλαγή ή πίνακας αναζήτησης).
recentBlockhash: <string>
- Ένα hash κωδικοποιημένο σε base-58 ενός πρόσφατου block στο ledger που χρησιμοποιείται για την αποτροπή διπλών συναλλαγών και για να δώσει διάρκεια ζωής στις συναλλαγές.instructions: <array[object]>
- Λίστα αναλυμένων οδηγιών προγράμματος.program: <string>
- Το όνομα του προγράμματος που καλείται.programId: <string>
- Το δημόσιο κλειδί του προγράμματος κωδικοποιημένο σε base-58.stackHeight: <number|null>
- Το ύψος στοίβας της οδηγίας.parsed: <object>
- Αναλυμένα δεδομένα ειδικά για το πρόγραμμα.type: <string>
- Ο τύπος της οδηγίας (π.χ., "transfer").info: <object>
- Αναλυμένες πληροφορίες οδηγίας ειδικές για το πρόγραμμα και τον τύπο οδηγίας.
signatures: <array[string]>
- Μια λίστα υπογραφών κωδικοποιημένων σε base-58 που εφαρμόζονται στη συναλλαγή.
Μεταδεδομένα Κατάστασης Συναλλαγής
err: <object|null>
- Σφάλμα αν η συναλλαγή απέτυχε, null αν η συναλλαγή πέτυχε. Ορισμοί TransactionErrorfee: <u64>
- το τέλος που χρεώθηκε αυτή η συναλλαγή, ως ακέραιος u64preBalances: <array>
- πίνακας υπολοίπων λογαριασμών u64 πριν από την επεξεργασία της συναλλαγήςpostBalances: <array>
- πίνακας υπολοίπων λογαριασμών u64 μετά την επεξεργασία της συναλλαγήςinnerInstructions: <array|null>
- Λίστα εσωτερικών οδηγιών ήnull
αν η καταγραφή εσωτερικών οδηγιών δεν ήταν ενεργοποιημένη κατά τη διάρκεια αυτής της συναλλαγήςpreTokenBalances: <array|undefined>
- Λίστα υπολοίπων token πριν από την επεξεργασία της συναλλαγής ή παραλείπεται αν η καταγραφή υπολοίπων token δεν ήταν ακόμη ενεργοποιημένη κατά τη διάρκεια αυτής της συναλλαγήςpostTokenBalances: <array|undefined>
- Λίστα υπολοίπων token μετά την επεξεργασία της συναλλαγής ή παραλείπεται αν η καταγραφή υπολοίπων token δεν ήταν ακόμη ενεργοποιημένη κατά τη διάρκεια αυτής της συναλλαγήςlogMessages: <array|null>
- πίνακας μηνυμάτων καταγραφής συμβολοσειρών ήnull
αν η καταγραφή μηνυμάτων δεν ήταν ενεργοποιημένη κατά τη διάρκεια αυτής της συναλλαγήςrewards: <array|null>
- ανταμοιβές σε επίπεδο συναλλαγής· ένας πίνακας αντικειμένων JSON που περιέχει:pubkey: <string>
- Το δημόσιο κλειδί, ως συμβολοσειρά κωδικοποιημένη σε base-58, του λογαριασμού που έλαβε την ανταμοιβήlamports: <i64>
- αριθμός lamport ανταμοιβής που πιστώθηκαν ή χρεώθηκαν από τον λογαριασμό, ως i64postBalance: <u64>
- υπόλοιπο λογαριασμού σε lamport μετά την εφαρμογή της ανταμοιβήςrewardType: <string|undefined>
- τύπος ανταμοιβής: "fee", "rent", "voting", "staking"commission: <u8|undefined>
- προμήθεια λογαριασμού ψηφοφορίας όταν πιστώθηκε η ανταμοιβή, παρούσα μόνο για ανταμοιβές ψηφοφορίας και staking
- DEPRECATED:
status: <object>
- Κατάσταση συναλλαγής"Ok": <null>
- Η συναλλαγή ήταν επιτυχής"Err": <ERR>
- Η συναλλαγή απέτυχε με TransactionError
loadedAddresses: <object|undefined>
- Διευθύνσεις συναλλαγής που φορτώθηκαν από πίνακες αναζήτησης διευθύνσεων. Απροσδιόριστο αν τοmaxSupportedTransactionVersion
δεν είναι ορισμένο στις παραμέτρους αιτήματος, ή αν η κωδικοποίησηjsonParsed
είναι ορισμένη στις παραμέτρους αιτήματος.writable: <array[string]>
- Ταξινομημένη λίστα διευθύνσεων κωδικοποιημένων σε base-58 για εγγράψιμους φορτωμένους λογαριασμούςreadonly: <array[string]>
- Ταξινομημένη λίστα διευθύνσεων κωδικοποιημένων σε base-58 για λογαριασμούς μόνο για ανάγνωση
returnData: <object|undefined>
- τα πιο πρόσφατα δεδομένα επιστροφής που δημιουργήθηκαν από μια οδηγία στη συναλλαγή, με τα ακόλουθα πεδία:programId: <string>
- το πρόγραμμα που δημιούργησε τα δεδομένα επιστροφής, ως Pubkey κωδικοποιημένο σε base-58data: <[string, encoding]>
- τα ίδια τα δεδομένα επιστροφής, ως δυαδικά δεδομένα κωδικοποιημένα σε base-64
computeUnitsConsumed: <u64|undefined>
- αριθμός μονάδων υπολογισμού που καταναλώθηκαν από τη συναλλαγήversion: <"legacy"|number|undefined>
- Έκδοση συναλλαγής. Απροσδιόριστο αν τοmaxSupportedTransactionVersion
δεν είναι ορισμένο στις παραμέτρους αιτήματος.signatures: <array>
- παρόν αν ζητούνται "υπογραφές" για λεπτομέρειες συναλλαγής· ένας πίνακας συμβολοσειρών υπογραφών, που αντιστοιχούν στη σειρά συναλλαγών στο block
Εσωτερικές Οδηγίες
Το περιβάλλον εκτέλεσης του Solana καταγράφει τις οδηγίες μεταξύ προγραμμάτων που καλούνται κατά την επεξεργασία συναλλαγών και τις καθιστά διαθέσιμες για μεγαλύτερη διαφάνεια σχετικά με το τι εκτελέστηκε στην αλυσίδα ανά οδηγία συναλλαγής. Οι οδηγίες που καλούνται ομαδοποιούνται από την αρχική οδηγία συναλλαγής και παρατίθενται με τη σειρά επεξεργασίας.
Η δομή JSON των εσωτερικών οδηγιών ορίζεται ως μια λίστα αντικειμένων στην ακόλουθη δομή:
index: number
- Δείκτης της οδηγίας συναλλαγής από την οποία προέρχονται οι εσωτερικές οδηγίεςinstructions: <array[object]>
- Ταξινομημένη λίστα εσωτερικών οδηγιών προγράμματος που κλήθηκαν κατά τη διάρκεια μιας μεμονωμένης οδηγίας συναλλαγής.programIdIndex: <number>
- Δείκτης στον πίνακαmessage.accountKeys
που υποδεικνύει το λογαριασμό προγράμματος που εκτελεί αυτή την οδηγία.accounts: <array[number]>
- Λίστα ταξινομημένων δεικτών στον πίνακαmessage.accountKeys
που υποδεικνύει ποιοι λογαριασμοί θα περάσουν στο πρόγραμμα.data: <string>
- Τα δεδομένα εισόδου του προγράμματος κωδικοποιημένα σε συμβολοσειρά base-58.
Υπόλοιπα Token
Η δομή JSON των υπολοίπων token ορίζεται ως μια λίστα αντικειμένων στην ακόλουθη δομή:
accountIndex: <number>
- Δείκτης του λογαριασμού για τον οποίο παρέχεται το υπόλοιπο token.mint: <string>
- Pubkey του mint του token.owner: <string|undefined>
- Pubkey του ιδιοκτήτη του υπολοίπου token.programId: <string|undefined>
- Pubkey του Token Program που κατέχει τον λογαριασμό.uiTokenAmount: <object>
-amount: <string>
- Ακατέργαστο ποσό των token ως συμβολοσειρά, αγνοώντας τα δεκαδικά ψηφία.decimals: <number>
- Αριθμός δεκαδικών ψηφίων που έχουν διαμορφωθεί για το mint του token.uiAmount: <number|null>
- Ποσό token ως δεκαδικός αριθμός, λαμβάνοντας υπόψη τα δεκαδικά ψηφία. ΔΕΝ ΣΥΝΙΣΤΑΤΑΙ ΠΛΕΟΝuiAmountString: <string>
- Ποσό token ως συμβολοσειρά, λαμβάνοντας υπόψη τα δεκαδικά ψηφία.
Is this page helpful?