
Detta Àr den första delen av en serie utbildningsartiklar om hur man skapar smarta kontrakt pÄ Python i blockchain-nÀtverket Ontology med hjÀlp av verktyget för utveckling av smarta kontrakt. .
I den hÀr artikeln börjar vi bekantskapen med API:et för Ontology-smartkontrakt. API:et för Ontology-smartkontrakt Àr indelat i 7 moduler:
- Blockchain & Block API,
- Runtime API,
- Storage API,
- Native API,
- Upgrade API,
- Execution Engine API och
- Static & Dynamic Call API.
Blockchain & Block API Àr den centrala delen av Ontology-smarta kontraktsystemet. Blockchain API stöder grundlÀggande blockchain-förfrÄgningsoperationer, som att hÀmta den aktuella blockhöjden, medan Block API stöder grundlÀggande block-förfrÄgningsoperationer, som att hÀmta antalet transaktioner för ett givet block.
LÄt oss börja!
Först skapar du ett nytt kontrakt i , och följ sedan instruktionerna nedan.
1. Hur man anvÀnder Blockchain API
Referenser till smartkontraktsfunktioner Ă€r identiska med lĂ€nkarna i Python. Du kan ange motsvarande funktioner efter behov. Till exempel, nedanstĂ„ende instruktion anger GetHeightâfunktionen för att hĂ€mta den aktuella blockhöjden, och GetHeaderâfunktionen för att hĂ€mta blockhuvudet.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight anvÀnds för att hÀmta det senaste blocknumret i blockchain, som visas i det följande exemplet. I det sista exemplet av bekvÀmlighet utelÀmnar vi funktionen Main, men du kan lÀgga till den om det behövs.
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 anvÀnds för att hÀmta blockhuvudet, parametern Àr blocknumret i blockchain. Exempel:
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 anvÀnds för att hÀmta en transaktion via transaktionshash. Transaktionshash skickas i GetTransactionByHash som parametrar i bytearray-format. Nyckeln till denna funktion Àr att konvertera hash av transaktionen frÄn hex-format till hash av transaktionen i bytearray-format. Detta Àr ett viktigt steg. Annars fÄr du ett felmeddelande som indikerar att det inte finns nÄgot block med en sÄdan hash. LÄt oss ta hash av transaktionen i hex-format som exempel för att konvertera den till bytearray-format. Exemplet ser ut som följer:
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Först vÀnd hash av transaktionen:
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Utvecklare kan genomföra detta steg med hjÀlp av verktyget Hex Number(little endian)Number, som tillhandahÄlls av SmartX.
Omvandla sedan det erhÄllna resultatet till formatet 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}Detta kan göras med verktyget String Byte Array, som tillhandahÄlls av SmartX. Slutligen omvandla den resulterande bytearrayen till en liknande strÀng:
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fNedan Àr ett exempel pÄ funktionen GetTransactionByHash, som hÀmtar en transaktion via transaktionshash:
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight anvÀnds för att hÀmta höjden pÄ en transaktion via transaktionshash. LÄt oss anvÀnda hash frÄn exemplet ovan:
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Utvecklare kan anvÀnda funktionen GetContract för att hÀmta ett kontrakt via kontrakts-hash. Processen för att omvandla kontrakts-hash Àr densamma som för transaktionshash, som nÀmnts ovan.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock anvÀnds för att hÀmta ett block. Det finns tvÄ sÀtt att hÀmta ett specifikt block.
1. HÀmta blocket efter blockhöjd:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. HĂ€mta blocket efter blockhash:
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Hur man anvÀnder Block API
Det finns tre tillgÀngliga funktioner i Block API: GetTransactions, GetTransactionCount, och GetTransactionByIndex. Vi kommer att gÄ igenom dem en och en.
GetTransactionCount
GetTransactionCount anvÀnds för att hÀmta antalet transaktioner för ett givet block.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Utvecklare kan anvÀnda funktionen GetTransactions för att hÀmta alla transaktioner inom denna block.
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 anvÀnds för att hÀmta en specifik transaktion inom detta block.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # index börjar frÄn 0.
return txDen fullstÀndiga guiden finns pÄ vÄr .
Epilog
Blockchain & Block API Àr en oumbÀrlig del av smarta kontrakt, eftersom du kan anvÀnda dem för att begÀra blockchain-data och blockdata i smarta kontrakt. I kommande artiklar kommer vi att diskutera hur man anvÀnder de andra API:erna och reda ut deras interaktion med Ontology-blockchain.
Artikeln översattes av Hashrate&Shares speciellt för OntologyRussia.
Ăr du utvecklare? GĂ„ med i vĂ„rt tekniska samhĂ€lle pĂ„ . Dessutom, kolla in pĂ„ vĂ„r webbplats, dĂ€r du kan hitta utvecklarverktyg, dokumentation och mycket mer.
Ontology
- /
- Telegram /
- /
KĂ€lla: habr.com
