
Ceci est la première partie d'une série d'articles éducatifs sur la création de contrats intelligents en Python dans le réseau blockchain Ontology à l'aide d'un outil de développement de contrats intelligents. .
Dans cet article, nous commencerons notre introduction à l'API des contrats intelligents Ontology. L'API des contrats intelligents Ontology est divisée en 7 modules :
- API Blockchain & Block,
- API Runtime,
- API Storage,
- API Native,
- API Upgrade,
- API Execution Engine et
- API Static & Dynamic Call.
L'API Blockchain & Block est la partie principale du système des contrats intelligents Ontology. L'API Blockchain prend en charge les opérations de base des requêtes blockchain, comme par exemple obtenir la hauteur actuelle du bloc, tandis que l'API Block prend en charge les opérations de base des requêtes de blocs, par exemple demander le nombre de transactions pour ce bloc.
Commençons !
Tout d'abord, créez un nouveau contrat dans , puis suivez les instructions ci-dessous.
1. Comment utiliser l'API Blockchain
Les appels aux fonctions des contrats intelligents sont identiques aux appels Python. Vous pouvez saisir les fonctions appropriées selon vos besoins. Par exemple, l'instruction ci-dessous appelle GetHeight— une fonction pour obtenir la hauteur actuelle du bloc, et GetHeader— une fonction pour obtenir l'en-tête du bloc.
from ontology.interop.System.Blockchain import GetHeight, GetHeaderGetHeight
GetHeight est utilisé pour obtenir le dernier numéro de séquence du bloc dans la blockchain, comme illustré dans l'exemple ci-dessous. Dans le dernier exemple, pour des raisons de commodité, nous omettrons la fonction Main, mais vous pouvez l'ajouter si nécessaire.
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 est utilisé pour obtenir l'en-tête du bloc, le paramètre étant le numéro de séquence du bloc dans la blockchain. Exemple :
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 est utilisé pour obtenir une transaction par son hash. Le hash de la transaction est envoyé dans GetTransactionByHash comme paramètres au format bytearray. La clé de cette fonction est de convertir le hash de la transaction en format hexadécimal en hash de transaction au format bytearray. C'est une étape importante. Sinon, vous obtiendrez une erreur indiquant qu'il n'y a pas de bloc avec ce hash de bloc. Prenons un hash de transaction en format hexadécimal, par exemple, pour le convertir en format bytearray. L'exemple est le suivant :
9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1Inversez d'abord le hash de la transaction :
c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279Les développeurs peuvent effectuer cette étape à l'aide de l'outil de conversion Hex Number (little endian) fourni par SmartX.
Ensuite, convertissez le résultat obtenu au format 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}Cela peut être réalisé à l'aide de l'outil de conversion String Byte Array fourni par SmartX. Enfin, convertissez le bytearray obtenu en une chaîne semblable à :
xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9fVoici un exemple de la fonction GetTransactionByHash, qui récupère une transaction à partir de son hachage :
from ontology.interop.System.Blockchain import GetTransactionByHash
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
tx=GetTransactionByHash(tx_hash)
return txGetTransactionHeight
GetTransactionHeight est utilisé pour obtenir la hauteur d'une transaction à partir de son hachage. Prenons le hachage de l'exemple précédent :
from ontology.interop.System.Blockchain import GetTransactionHeight
def demo():
# tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"
tx_hash=bytearray(b"xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f")
height=GetTransactionHeight(tx_hash)
return heightGetContract
Les développeurs peuvent utiliser la fonction GetContract pour récupérer un contrat à partir de son hachage. Le processus de conversion du hachage du contrat est similaire à celui de la conversion du hachage de la transaction mentionnée ci-dessus.
from ontology.interop.System.Blockchain import GetContract
def demo():
# contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"
contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
contract=GetContract(contract_hash)
return contractGetBlock
GetBlock est utilisé pour récupérer un bloc. Il existe deux façons d'obtenir un bloc spécifique.
1. Obtenir un bloc par sa hauteur :
from ontology.interop.System.Blockchain import GetBlock
def demo():
block=GetBlock(1408)
return block2. Obtenir un bloc par son hachage :
from ontology.interop.System.Blockchain import GetBlock
def demo():
block_hash=bytearray(b'x16xe0xc5x40x82x79x77x30x44xeax66xc8xc4x5dx17xf7x17x73x92x33x6dx54xe3x48x46x0bxc3x2fxe2x15x03xe4')
block=GetBlock(block_hash)2. Comment utiliser l'API Block
Il existe trois fonctions disponibles dans l'API Block : GetTransactions, GetTransactionCountet GetTransactionByIndex. Nous les examinerons une par une.
GetTransactionCount
GetTransactionCount est utilisé pour obtenir le nombre de transactions pour un bloc donné.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionCount
def demo():
block=GetBlock(1408)
count=GetTransactionCount(block)
return countGetTransactions
Les développeurs peuvent utiliser la fonction GetTransactions pour obtenir toutes les transactions dans ce bloc.
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 est utilisé pour obtenir une transaction spécifique dans ce bloc.
from ontology.interop.System.Blockchain import GetBlock
from ontology.interop.System.Block import GetTransactionByIndex
def demo():
block=GetBlock(1408)
tx=GetTransactionByIndex(block,0) # l'index commence à 0.
return txLe guide complet se trouve sur notre .
Postface
L'API Blockchain & Block est une partie indispensable des contrats intelligents, car vous pouvez les utiliser pour demander des données sur la blockchain et des données sur le bloc dans les contrats intelligents. Dans les prochains articles, nous discuterons de la façon d'utiliser les autres API et découvrirons comment elles interagissent avec la blockchain Ontology.
Cet article a été traduit par l'équipe de Hashrate & Shares spécialement pour OntologyRussia.
Vous êtes développeur ? Rejoignez notre communauté technique sur . De plus, jetez un coup d'œil à sur notre site, où vous pouvez trouver des outils pour développeurs, de la documentation et bien plus encore.
Ontology
- /
- Telegram /
- /
Source : habr.com
