
Dette er den første delen av en serie opplæringsartikler om hvordan man lager smarte kontrakter i Python på Ontology blockchain-nettverket ved hjelp av utviklingsverktøy for smarte kontrakter. .
I denne artikkelen vil vi begynne å bli kjent med Ontology smart kontrakt API. Ontology smart kontrakt API er delt inn i 7 moduler:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API og
- Static & Dynamic Call API.
Blockchain & Block API er den viktigste delen av Ontology smart kontrakt systemet. Blockchain API støtter grunnleggende blockchain forespørselsoperasjoner, som å hente nåværende blokkhøyde, mens Block API støtter grunnleggende blokksforespørselsoperasjoner, som å spørre om antall transaksjoner for en gitt blokk.
La oss komme i gang!
For å begynne, opprett en ny kontrakt i , og deretter følg instruksjonene nedenfor.
1. Hvordan bruke Blockchain API
Funksjonskoblinger til smarte kontrakter er identiske med koblingene i Python. Du kan skrive inn de relevante funksjonene etter behov. For eksempel, den følgende instruksjonen skriver inn GetHeight - funksjonen for å hente nåværende blokk høyde, og GetHeader - funksjonen for å hente blokkoverskriften.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight brukes for å hente det siste blokknummert i blockchain, som vist i eksempelet nedenfor. I det siste eksempelet for enkelhetens skyld vil vi utelate Main-funksjonen, men du kan legge den til om nødvendig.
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 functionGetHeader
GetHeader brukes for å hente blokkoverskriften, parameteret er blokknummert 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 headerGetTransactionByHash
GetTransactionByHash brukes for å hente transaksjonen ved hjelp av transaksjonens hash. Transaksjonshashen sendes i GetTransactionByHash som parametere i bytearray format. Nøkkelen til denne funksjonen er å konvertere transaksjonens hash fra hex format til hash i bytearray format. Dette er et viktig skritt. Ellers vil du få en feil som indikerer at det ikke finnes en blokk med denne hash. La oss ta hashen i hex format som et eksempel for å konvertere den til bytearray format. Eksemplet ser slik ut:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Først reverser transaksjonens hash:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Utviklere kan utføre dette trinnet ved hjelp av Hex Number(little endian)Number konverteringsverktøyet som tilbys av SmartX.
Deretter konverter resultatet 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 gjøres med String Byte Array konverteringsverktøyet som tilbys av SmartX. Til slutt konverter den resulterende bytearrayen til en lignende streng:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fNedenfor er et eksempel på funksjonen GetTransactionByHash, som henter en transaksjon ved hjelp av transaksjonshash:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight brukes til å hente høyden av en transaksjon ved hjelp av transaksjonshash. La oss ta 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 heightGetContract
Utviklere kan bruke funksjonen GetContract for å hente en kontrakt basert på kontrakthash. Prosessen med å konvertere kontrakthash er den samme som prosessen for konvertering av transaksjonshash nevnt tidligere.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock brukes for å hente en blokk. Det finnes to måter å hente en spesifikk blokk på.
1. Hent blokken basert på blokkens høyde:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Hent blokken basert på blokkens hash:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Hvordan bruke Block API
Det finnes tre tilgjengelige funksjoner i Block API: GetTransactions, GetTransactionCount, og GetTransactionByIndex. Vi vil gå gjennom dem en etter en.
GetTransactionCount
GetTransactionCount brukes til å hente antallet transaksjoner for en gitt blokk.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Utviklere kan bruke funksjonen GetTransactions for å hente alle transaksjoner i denne blokken.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactions
def demo():
block=GetBlock(1408)
txs=GetTransactions(block)
return txsGetTransactionByIndex
GetTransactionByIndex brukes til å hente en spesifikk transaksjon i denne blokken.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # indeksen begynner fra 0.
return txDen fullstendige guiden kan finnes på vår .
Etterord
Blockchain & Block API er en uunnværlig del av smarte kontrakter, da du kan bruke dem til å hente blokkjededata og blokksdata i smarte kontrakter. I de følgende artiklene vil vi diskutere hvordan vi bruker de andre APIene og utforske deres interaksjon med Ontology-blokkjeden.
Artikkelen er oversatt av Hashrate&Shares-redaksjonen spesielt for OntologyRussia.
Er du utvikler? Bli med i vårt tekniske fellesskap på . I tillegg, ta en titt på på vårt nettsted, hvor du kan finne utviklerverktøy, dokumentasjon og mye mer.
Ontology
- /
- Telegram /
- /
Kilde: habr.com
