Πώς να γράψετε ένα έξυπνο συμβόλαιο στην Python στο δίκτυο Ontology. Μέρος 1: Blockchain & Block API

Πώς να γράψετε ένα έξυπνο συμβόλαιο στην Python στο δίκτυο Ontology. Μέρος 1: Blockchain & Block API

Αυτό είναι το πρώτο μέρος μιας σειράς σεμιναρίων για τη δημιουργία έξυπνων συμβάσεων Python στο δίκτυο blockchain Ontology χρησιμοποιώντας το εργαλείο ανάπτυξης έξυπνων συμβολαίων. SmartX.

Σε αυτό το άρθρο, θα ξεκινήσουμε τη γνωριμία μας με το Ontology smart contract API. Το Ontology smart contract API χωρίζεται σε 7 ενότητες:

  1. Blockchain & Block API,
  2. Runtime API
  3. API αποθήκευσης,
  4. εγγενές API,
  5. Αναβάθμιση API,
  6. Execution Engine API και
  7. API Static & Dynamic Call.

Το Blockchain & Block API είναι το κύριο μέρος του συστήματος έξυπνων συμβολαίων Ontology. Το Blockchain API υποστηρίζει βασικές λειτουργίες αναζήτησης blockchain, όπως η λήψη του τρέχοντος ύψους μπλοκ, ενώ το Block API υποστηρίζει βασικές λειτουργίες ερωτήματος μπλοκ, όπως το ερώτημα για τον αριθμό των συναλλαγών για ένα δεδομένο μπλοκ.

Ας αρχίσουμε!

Αρχικά, δημιουργήστε ένα νέο συμβόλαιο στο SmartXκαι μετά ακολουθήστε τις παρακάτω οδηγίες.

1. Πώς να χρησιμοποιήσετε το Blockchain API

Οι σύνδεσμοι σε συναρτήσεις έξυπνων συμβολαίων είναι πανομοιότυποι με τους συνδέσμους Python. Μπορείτε να εισάγετε τις αντίστοιχες λειτουργίες όπως απαιτείται. Για παράδειγμα, η ακόλουθη δήλωση εισάγει μια συνάρτηση GetHeight για να λάβετε το τρέχον ύψος του μπλοκ και μια συνάρτηση GetHeader για να λάβετε την κεφαλίδα του μπλοκ.

from ontology.interop.System.Blockchain import GetHeight, GetHeader

GetHeight

Το GetHeight χρησιμοποιείται για τη λήψη του τελευταίου αριθμού ακολουθίας μπλοκ στο blockchain, όπως φαίνεται στο παρακάτω παράδειγμα. Στο τελευταίο παράδειγμα, θα παραλείψουμε τη λειτουργία Main για ευκολία, αλλά μπορείτε να την προσθέσετε εάν είναι απαραίτητο.

from ontology.interop.System.Runtime import Notify
from ontology.interop.System.Blockchain import GetHeight
def Main(operation):
    if operation == 'demo':
        return demo()
    return False

def demo():
    height=GetHeight()
    Notify(height) # print height
    return height #return height after running the function

GetHeader

Το GetHeader χρησιμοποιείται για τη λήψη της κεφαλίδας μπλοκ, η παράμετρος είναι ο σειριακός αριθμός του μπλοκ στην αλυσίδα μπλοκ. Παράδειγμα:

from ontology.interop.System.Runtime import Notify
from ontology.interop.System.Blockchain import GetHeader
def demo():
    block_height=10
    header=GetHeader(block_height) 
    Notify(header)
return header

GetTransactionByHash

Το GetTransactionByHash χρησιμοποιείται για τη λήψη μιας συναλλαγής μέσω κατακερματισμού συναλλαγών. Ο κατακερματισμός συναλλαγής αποστέλλεται στο GetTransactionByHash ως παράμετροι σε μορφή bytearray. Το κλειδί σε αυτήν τη λειτουργία είναι να μετατρέψετε τον κατακερματισμό συναλλαγής σε μορφή δεκαεξαδικού σε κατακερματισμό συναλλαγής σε μορφή bytearray. Αυτό είναι ένα σημαντικό βήμα. Διαφορετικά, θα λάβατε ένα σφάλμα που υποδεικνύει ότι δεν υπάρχει μπλοκ με αυτόν τον κατακερματισμό μπλοκ. Ας πάρουμε ως παράδειγμα τον κατακερματισμό συναλλαγής σε μορφή hex για να τον μετατρέψουμε σε μορφή bytearray. Ένα παράδειγμα μοιάζει με αυτό:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Πρώτα, αντιστρέψτε τον κατακερματισμό συναλλαγής:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Οι προγραμματιστές μπορούν να ολοκληρώσουν αυτό το βήμα χρησιμοποιώντας το εργαλείο μετατροπής Hex Number(little endian)Number που παρέχεται από το SmartX.

Στη συνέχεια, μετατρέψτε το αποτέλεσμα σε μορφή bytearray:

{0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f}

Αυτό μπορεί να γίνει χρησιμοποιώντας το εργαλείο μετατροπής String Byte Array που παρέχεται από το SmartX. Τέλος, μετατρέψτε τον πίνακα bytearray που προκύπτει σε παρόμοια συμβολοσειρά:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Το παρακάτω είναι ένα παράδειγμα μιας συνάρτησης GetTransactionByHash που λαμβάνει μια συναλλαγή χρησιμοποιώντας τον κατακερματισμό της συναλλαγής:

from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
    # tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    tx=GetTransactionByHash(tx_hash)
    return tx

GetTransactionHeight

Το GetTransactionHeight χρησιμοποιείται για τη λήψη του ύψους συναλλαγής μέσω του κατακερματισμού συναλλαγής. Ας πάρουμε τον κατακερματισμό από το παραπάνω παράδειγμα:

from ontology.interop.System.Blockchain import  GetTransactionHeight
def demo():
    #   tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"    
    tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
    height=GetTransactionHeight(tx_hash)
    return height

GetContract

Οι προγραμματιστές μπορούν να χρησιμοποιήσουν τη συνάρτηση GetContract για να λάβουν ένα συμβόλαιο μέσω του κατακερματισμού του συμβολαίου. Η διαδικασία μετατροπής κατακερματισμού συμβολαίου είναι η ίδια με τη διαδικασία μετατροπής κατακερματισμού συναλλαγών που αναφέρεται παραπάνω.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

GetBlock

Το GetBlock χρησιμοποιείται για τη λήψη ενός αποκλεισμού. Υπάρχουν δύο τρόποι για να αποκτήσετε ένα συγκεκριμένο μπλοκ.

1. Λάβετε ύψος ανά μπλοκ:

from ontology.interop.System.Blockchain import GetBlock
def demo():
    block=GetBlock(1408)
    return block

2. Λάβετε κατακερματισμό μπλοκ ανά μπλοκ:

from ontology.interop.System.Blockchain import GetBlock
def demo():    
    block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
    block=GetBlock(block_hash)

2. Πώς να χρησιμοποιήσετε το Block API

Υπάρχουν τρεις διαθέσιμες λειτουργίες στο Block API: GetTransactions, GetTransactionCountΚαι GetTransactionByIndex. Θα τα σπάσουμε ένα προς ένα.

GetTransactionCount

Το GetTransactionCount χρησιμοποιείται για τη λήψη του αριθμού συναλλαγών για ένα συγκεκριμένο μπλοκ.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
    block=GetBlock(1408)
    count=GetTransactionCount(block)
    return count

GetTransactions

Οι προγραμματιστές μπορούν να χρησιμοποιήσουν τη συνάρτηση GetTransactions για να λάβουν όλες τις συναλλαγές σε ένα συγκεκριμένο μπλοκ.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions 
def demo():
    block=GetBlock(1408)
    txs=GetTransactions(block)
    return txs

GetTransactionByIndex

Το GetTransactionByIndex χρησιμοποιείται για τη λήψη μιας συγκεκριμένης συναλλαγής σε ένα δεδομένο μπλοκ.

from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
    block=GetBlock(1408)
    tx=GetTransactionByIndex(block,0) # index starts from 0.
    return tx

Ένας πλήρης οδηγός μπορείτε να βρείτε στο δικό μας GitHub.

Επίλογος

Το Blockchain & Block API είναι αναπόσπαστο μέρος των έξυπνων συμβολαίων, καθώς μπορείτε να τα χρησιμοποιήσετε για να ζητήσετε δεδομένα blockchain και να αποκλείσετε δεδομένα σε έξυπνες συμβάσεις. Στα επόμενα άρθρα, θα συζητήσουμε πώς να χρησιμοποιήσετε τα υπόλοιπα API και θα μάθουμε πώς αλληλεπιδρούν με το blockchain Ontology.

Το άρθρο μεταφράστηκε από τους συντάκτες του Hashrate&Shares ειδικά για την OntologyRussia. κραυγή

Είστε προγραμματιστής; Γίνετε μέλος της τεχνολογικής μας κοινότητας στο Διχόνοια. Επίσης, ρίξτε μια ματιά στο Κέντρο προγραμματιστών στον ιστότοπό μας, όπου μπορείτε να βρείτε εργαλεία προγραμματιστών, τεκμηρίωση και πολλά άλλα.

Οντολογία

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο