Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 1: Blockchain & Block-API

Hoe een slim contract in Python op het Ontology-netwerk te schrijven. Deel 1: Blockchain & Block-API

Dit is het eerste deel in een reeks tutorials over het maken van slimme Python-contracten op het Ontology blockchain-netwerk met behulp van de tool voor het ontwikkelen van slimme contracten. SmartX.

In dit artikel zullen we beginnen met onze kennismaking met de Ontology smart contract API. De Ontology smart contract API is onderverdeeld in 7 modules:

  1. Blockchain & Block-API,
  2. runtime-API,
  3. opslag-API,
  4. native-API,
  5. Upgrade-API,
  6. Execution Engine-API en
  7. Statische en dynamische oproep-API.

Blockchain & Block API is het belangrijkste onderdeel van het Ontology smart contract-systeem. De Blockchain API ondersteunt basisquerybewerkingen voor blockchain, zoals het verkrijgen van de huidige blokhoogte, terwijl de Block API basisquerybewerkingen voor blokken ondersteunt, zoals het opvragen van het aantal transacties voor een bepaald blok.

Laten we beginnen!

Maak eerst een nieuw contract aan in SmartXen volg daarna de onderstaande instructies.

1. Hoe Blockchain-API te gebruiken

Koppelingen naar slimme contractfuncties zijn identiek aan Python-koppelingen. U kunt de bijbehorende functies naar behoefte invoeren. De volgende instructie introduceert bijvoorbeeld een GetHeight-functie om de huidige blokhoogte te krijgen, en een GetHeader-functie om de kop van het blok te krijgen.

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

GetHoogte

GetHeight wordt gebruikt om het laatste blokvolgnummer in de blockchain te krijgen, zoals in het onderstaande voorbeeld. In het laatste voorbeeld laten we voor het gemak de hoofdfunctie weg, maar u kunt deze indien nodig toevoegen.

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 wordt gebruikt om de block header te krijgen, de parameter is het serienummer van het block in de blockchain. Voorbeeld:

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 wordt gebruikt om een ​​transactie op te halen via een transactie-hash. De transactiehash wordt verzonden naar GetTransactionByHash als parameters in bytearray-formaat. De sleutel tot deze functie is het converteren van de transactie-hash in hex-formaat naar de transactie-hash in bytearray-formaat. Dit is een belangrijke stap. Anders zou je een foutmelding krijgen die aangeeft dat er geen blok is met die blokhash. Laten we de transactie-hash in hex-indeling als voorbeeld nemen om deze naar bytearray-indeling te converteren. Een voorbeeld ziet er als volgt uit:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Keer eerst de transactie-hash om:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Ontwikkelaars kunnen deze stap uitvoeren met behulp van de Hex Number (little endian) Number-conversietool van SmartX.

Converteer het resultaat vervolgens naar bytearray-indeling:

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

Dit kan worden gedaan met behulp van de String Byte Array-conversietool van SmartX. Converteer ten slotte de resulterende bytearray naar een vergelijkbare string:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Het volgende is een voorbeeld van de GetTransactionByHash-functie, die een transactie neemt met behulp van de hash van de transactie:

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

Transactiehoogte ophalen

GetTransactionHeight wordt gebruikt om de transactiehoogte te verkrijgen via de transactiehash. Laten we de hash uit het bovenstaande voorbeeld nemen:

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

Ontvang een contract

Ontwikkelaars kunnen de GetContract-functie gebruiken om een ​​contract te krijgen via de hash van het contract. Het contract-hash-conversieproces is hetzelfde als het bovengenoemde transactie-hash-conversieproces.

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 wordt gebruikt om een ​​blok te krijgen. Er zijn twee manieren om een ​​specifiek blok te krijgen.

1. Krijg blok voor blok hoogte:

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

2. Ontvang een blok voor blok hash:

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

2. Hoe Block API te gebruiken

Er zijn drie beschikbare functies in de Block API: Transacties ophalen, GetTransactionCountEn GetTransactionByIndex. We zullen ze een voor een opsplitsen.

GetTransactionCount

GetTransactionCount wordt gebruikt om het aantal transacties voor een bepaald blok te krijgen.

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

Transacties ophalen

Ontwikkelaars kunnen de functie GetTransactions gebruiken om alle transacties in een bepaald blok te krijgen.

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 wordt gebruikt om een ​​specifieke transactie in een bepaald blok te krijgen.

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

Een volledige gids is te vinden op onze GitHub.

nawoord

De Blockchain & Block API is een onmisbaar onderdeel van smart contracts omdat je ze kunt gebruiken om blockchain data op te vragen en data te blokkeren in smart contracts. In de volgende artikelen zullen we bespreken hoe de rest van de API's kunnen worden gebruikt en ontdekken hoe ze omgaan met de Ontology-blockchain.

Het artikel is speciaal voor OntologyRussia vertaald door de redactie van Hashrate&Shares. schreeuw

Ben je een ontwikkelaar? Word lid van onze technische gemeenschap op Discord. Kijk ook eens naar Ontwikkelaarscentrum op onze website, waar u hulpprogramma's voor ontwikkelaars, documentatie en meer kunt vinden.

Ontologie

Bron: www.habr.com

Voeg een reactie