Hvordan man skriver en smart contract i Python i Ontology-netværket. Del 1: Blockchain & Block API

Sådan skriver du en smart kontrakt i Python i Ontology-netværket. Del 1: Blockchain & Block API

Dette er den første del af en række vejledende artikler om oprettelse af smart contracts i Python i blockchain-netværket Ontology ved hjælp af et udviklingsværktøj til smart contracts. SmartX.

I denne artikel vil vi begynde at lære om Ontology smart contract API. Ontology smart contract API er opdelt i 7 moduler:

  1. Blockchain & Block API,
  2. Runtime API,
  3. Storage API,
  4. Native API,
  5. Upgrade API,
  6. Execution Engine API og
  7. Static & Dynamic Call API.

Blockchain & Block API er den grundlæggende del af Ontology smart contract-systemet. Blockchain API understøtter grundlæggende blockchain-anmodningsoperationer, såsom at få den aktuelle blokhøjde, mens Block API understøtter grundlæggende blok-anmodningsoperationer, såsom at anmode om antallet af transaktioner for den pågældende blok.

Lad os komme i gang!

Begynd med at oprette en ny kontrakt i SmartX, og følg derefter instruktionerne nedenfor.

1. Sådan bruger du Blockchain API

Links til smart contract-funktioner er identiske med Python-links. Du kan indtaste de relevante funktioner efter behov. For eksempel, den nedenstående instruktion indtaster GetHeight— funktionen til at få den aktuelle blokhøjde, og GetHeader— funktionen til at få blokheaderen.

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

GetHeight

GetHeight bruges til at få det seneste rækkenummer for blokken i blockchain, som vist i nedenstående eksempel. I det sidste eksempel udelader vi Main-funktionen for bekvemmelighed, men du kan tilføje den, hvis det er nødvendigt.

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 bruges til at få blokheaderen, hvor parameteren er rækkenummeret for blokken i blockchain. Eksempel:

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 bruges til at hente en transaktion via transaktionshash. Transaktionshashen sendes i GetTransactionByHash som parametre i bytearray-format. Nøglen til denne funktion er at konvertere transaktionshashen fra hex-format til transaktionshashen i bytearray-format. Dette er et vigtigt skridt. Ellers ville du få en fejl, der angiver, at der ikke findes nogen blok med den pågældende hash. Lad os tage en transaktionshash i hex-format som eksempel for at konvertere den til bytearray-format. Eksemplet ser således ud:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Først, vend transaktionshashen:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Udviklere kan udføre dette trin ved hjælp af Hex Number(little endian)Number konverteringsværktøjet, som leveres af SmartX.

Herefter skal du konvertere det resulterende resultat til bytearray-format:

{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}

Dette kan gøres ved hjælp af String Byte Array konverteringsværktøjet, som leveres af SmartX. Til sidst, konverter den resulterende bytearray til en lignende streng:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Nedenfor er et eksempel på funktionen GetTransactionByHash, som henter en transaktion ved hjælp af transaktionshash:

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 bruges til at hente højden af en transaktion ved hjælp af transaktionshash. Lad os tage hashen fra eksemplet ovenfor:

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

GetContract

Udviklere kan bruge funktionen GetContract til at hente kontrakten ved hjælp af kontraktens hash. Processen til at konvertere kontraktens hash svarer til den, der er nævnt ovenfor for transaktionshash.

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 bruges til at hente en blok. Der er to måder at hente en bestemt blok på.

1. Hent blok ved blokhøjde:

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

2. Hent blok ved blokhash:

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

2. Hvordan man bruger Block API

Der er tre tilgængelige funktioner i Block API: GetTransactions, GetTransactionCount, og GetTransactionByIndex. Vi vil gennemgå dem én ad gangen.

GetTransactionCount

GetTransactionCount bruges til at hente antallet af transaktioner for den pågældende blok.

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

Udviklere kan bruge funktionen GetTransactions til at hente alle transaktioner i denne blok.

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 bruges til at hente en specifik transaktion i denne blok.

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

Den komplette vejledning kan findes på vores GitHub.

Efterord

Blockchain & Block API er en uundgåelig del af smarte kontrakter, da du kan bruge dem til at forespørge blockchain-data og blok-data i smarte kontrakter. I de følgende artikler vil vi diskutere, hvordan man bruger de øvrige API'er, og undersøge deres interaktion med Ontology blockchain.

Artiklen er blevet oversat af redaktionen Hashrate&Shares specielt for OntologyRussia. klik

Er du udvikler? Tilmeld dig vores tekniske fællesskab på Discord. Tjek også Udviklercenter på vores hjemmeside, hvor du kan finde udvikler værktøjer, dokumentation og meget mere.

Ontology

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster