Kiel verki inteligentan kontrakton en Python en la Ontologio-reto. Parto 1: Blockchain & Block API

Kiel verki inteligentan kontrakton en Python en la Ontologio-reto. Parto 1: Blockchain & Block API

Ĉi tiu estas la unua parto de serio de edukaj artikoloj pri kreado de inteligentaj kontraktoj en Python sur la Ontology-blokĉena reto uzante la ilon pri inteligenta kontrakto-disvolvado. SmartX.

En ĉi tiu artikolo, ni komencos nian konaton kun la Ontology-inteligenta kontrakto API. La Ontology-inteligenta kontrakto API estas dividita en 7 modulojn:

  1. Blockchain & Block API,
  2. Runtime API
  3. Stokado API
  4. Denaska API
  5. Ĝisdatigu API,
  6. API kaj Execution Engine
  7. Statika & Dinamika Voka API.

Blockchain & Block API estas la kerna parto de la Ontology-inteligenta kontraktosistemo. La Blockchain API subtenas bazajn blokĉenajn demandajn operaciojn, kiel akiri la nunan altecon de bloko, dum la Blockchain API subtenas bazajn blokajn demandoperaciojn, kiel pridemandi la nombron da transakcioj por donita bloko.

Ni komencu!

Por komenci, kreu novan kontrakton en SmartX, kaj poste sekvu la subajn instrukciojn.

1. Kiel uzi Blockchain API

Inteligentaj kontraktofunkciaj referencoj estas identaj al Python-referencoj. Vi povas enigi koncernajn funkciojn laŭbezone. Ekzemple, la sekva deklaro enkondukas GetHeight, funkcion por akiri la nunan altecon de bloko, kaj GetHeader, funkcion por ricevi la titolon de la bloko.

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

GetHeight

GetHeight estas uzata por akiri la lastan blokan sinsekvon en la blokĉeno, kiel montrite en la ekzemplo sube. En la lasta ekzemplo, por komforto, ni preterlasos la Ĉefan funkcion, sed vi povas aldoni ĝin se necese.

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 estas uzata por akiri la blokan kaplinion; la parametro estas la seria numero de la bloko en la blokĉeno. Ekzemplo:

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 estas uzata por retrovi transakcion uzante transakcian haŝon. La transakcia haŝiŝo estas sendita al GetTransactionByHash kiel parametroj en bytearray formato. La ŝlosilo al ĉi tiu funkcio estas konverti la transakcian haŝon en deksformato al la transakcia hash en bytearray-formato. Ĉi tio estas grava paŝo. Alie vi ricevus eraron indikantan, ke ne ekzistas bloko kun tiu bloko hash. Ni prenu la transakcian haŝon en heksformato kiel ekzemplon por konverti ĝin al bytearray-formato. La ekzemplo aspektas jene:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Unue inversigu la transakcian haŝon:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Programistoj povas plenumi ĉi tiun paŝon per la Konverta ilo Hex Number(little endian)Number provizita de SmartX.

Poste konvertu la rezultan rezulton al bajtaara formato:

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

Ĉi tio povas esti farita per la konverta ilo String Byte Array provizita de SmartX. Fine, konvertu la rezultan bajtaaron en ĉenon kiel ĉi tion:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Malsupre estas ekzemplo de la funkcio GetTransactionByHash, kiu prenas transakcion per la transakcia haŝo:

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 estas uzata por akiri la transakcian altecon uzante la transakcian haŝon. Ni prenu la haŝon el la supra ekzemplo:

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

GetContract

Programistoj povas uzi la funkcion GetContract por preni kontrakton per kontrakta haŝo. La kontrakta hash-konverta procezo estas la sama kiel la transakcia hash-konverta procezo menciita supre.

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 estas uzata por akiri blokon. Estas du manieroj akiri specifan blokon.

1. Akiru blokon laŭ bloka alteco:

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

2. Akiru blokon post bloko hash:

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

2. Kiel uzi Block API

Estas tri disponeblaj funkcioj en la Block API: GetTransactions, GetTransactionCountkaj GetTransactionByIndex. Ni ordigos ilin unu post la alia.

GetTransactionCount

GetTransactionCount estas uzata por akiri la nombron da transakcioj por difinita bloko.

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

Programistoj povas uzi la funkcion GetTransactions por preni ĉiujn transakciojn en difinita bloko.

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 estas uzata por preni specifan transakcion en difinita bloko.

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

La plena gvidilo troveblas ĉe nia GitHub.

Antaŭparolo

Blockchain & Block API estas nemalhavebla parto de inteligentaj kontraktoj ĉar vi povas uzi ĝin por pridemandi blokĉenajn datumojn kaj bloki datumojn en inteligentaj kontraktoj. En estontaj artikoloj, ni diskutos kiel uzi la ceterajn API-ojn kaj komprenos kiel ili interagas kun la Ontologia blokĉeno.

La artikolon tradukis la redaktoroj de Hashrate&Shares precipe por OntologyRussia. plori

Ĉu vi estas programisto? Aliĝu al nia teknika komunumo ĉe Malkonkordo. Ankaŭ, rigardu Centro de Programistoj en nia retejo, kie vi povas trovi programistajn ilojn, dokumentadon kaj pli.

ontologio

fonto: www.habr.com

Aldoni komenton