Paano magsulat ng isang matalinong kontrata sa Python sa network ng Ontology. Bahagi 1: Blockchain at Block API

Paano magsulat ng isang matalinong kontrata sa Python sa network ng Ontology. Bahagi 1: Blockchain at Block API

Ito ang unang bahagi sa isang serye ng mga tutorial sa paglikha ng mga smart contract ng Python sa Ontology blockchain network gamit ang smart contract development tool. SmartX.

Sa artikulong ito, sisimulan natin ang ating pagkilala sa Ontology smart contract API. Ang Ontology smart contract API ay nahahati sa 7 module:

  1. Blockchain at Block API,
  2. runtime API,
  3. storage API,
  4. katutubong API,
  5. I-upgrade ang API,
  6. Execution Engine API at
  7. Static at Dynamic na Tawag API.

Ang Blockchain at Block API ay ang pangunahing bahagi ng sistema ng matalinong kontrata ng Ontology. Sinusuportahan ng Blockchain API ang mga pangunahing pagpapatakbo ng query ng blockchain, tulad ng pagkuha ng kasalukuyang taas ng block, habang sinusuportahan ng Block API ang mga pangunahing pagpapatakbo ng query ng block, tulad ng pag-query ng bilang ng mga transaksyon para sa isang partikular na block.

Magsimula na tayo!

Una, gumawa ng bagong kontrata sa SmartXat pagkatapos ay sundin ang mga tagubilin sa ibaba.

1. Paano gamitin ang Blockchain API

Ang mga link sa mga function ng matalinong kontrata ay kapareho ng mga link sa Python. Maaari mong ipasok ang kaukulang mga function kung kinakailangan. Halimbawa, ang sumusunod na pahayag ay nagpapakilala ng isang GetHeight function upang makuha ang kasalukuyang taas ng block, at isang GetHeader function upang makuha ang block ng header.

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

GetHeight

Ginagamit ang GetHeight para makuha ang huling block sequence number sa blockchain, tulad ng ipinapakita sa halimbawa sa ibaba. Sa huling halimbawa, aalisin namin ang Main function para sa kaginhawahan, ngunit maaari mo itong idagdag kung kinakailangan.

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

Ginagamit ang GetHeader para makuha ang block header, ang parameter ay ang serial number ng block sa blockchain. Halimbawa:

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

Ginagamit ang GetTransactionByHash upang makakuha ng transaksyon sa pamamagitan ng hash ng transaksyon. Ang hash ng transaksyon ay ipinadala sa GetTransactionByHash bilang mga parameter sa bytearray na format. Ang susi sa function na ito ay i-convert ang transaction hash sa hex na format sa transaction hash sa bytearray na format. Ito ay isang mahalagang hakbang. Kung hindi, makakakuha ka ng error na nagsasaad na walang block sa block hash na iyon. Kunin natin ang transaction hash sa hex na format bilang isang halimbawa para i-convert ito sa bytearray na format. Mukhang ganito ang isang halimbawa:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Una, baligtarin ang hash ng transaksyon:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Magagawa ng mga developer ang hakbang na ito gamit ang Hex Number(little endian)Number conversion tool na ibinigay ng SmartX.

Pagkatapos ay i-convert ang resulta sa bytearray na 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}

Magagawa ito gamit ang String Byte Array conversion tool na ibinigay ng SmartX. Sa wakas, i-convert ang nagresultang bytearray sa isang katulad na string:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Ang sumusunod ay isang halimbawa ng GetTransactionByHash function, na kumukuha ng transaksyon gamit ang hash ng transaksyon:

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

GetTransactionHeight

Ginagamit ang GetTransactionHeight upang makuha ang taas ng transaksyon sa pamamagitan ng hash ng transaksyon. Kunin natin ang hash mula sa halimbawa sa itaas:

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

GetContract

Maaaring gamitin ng mga developer ang GetContract function upang makakuha ng kontrata sa pamamagitan ng hash ng kontrata. Ang proseso ng conversion ng hash ng kontrata ay pareho sa proseso ng conversion ng hash ng transaksyon na binanggit sa itaas.

from ontology.interop.System.Blockchain import GetContract
def demo():
    # contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"    
    contract_hash=bytearray(b"xfax98x96x21x32x32xbbxf0x9fx23x91xfaxefx95x9bxffxa5x75x1axd8")
    contract=GetContract(contract_hash)
    return contract

GetBlock

Ginagamit ang GetBlock para makakuha ng block. Mayroong dalawang paraan upang makakuha ng isang partikular na bloke.

1. Kumuha ng bloke sa taas ng bloke:

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

2. Kumuha ng block sa pamamagitan ng block hash:

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

2. Paano gamitin ang Block API

Mayroong tatlong magagamit na mga function sa Block API: GetTransactions, GetTransactionCountAt GetTransactionByIndex. Isa-isahin natin sila.

GetTransactionCount

Ang GetTransactionCount ay ginagamit upang makuha ang bilang ng mga transaksyon para sa isang partikular na bloke.

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

Maaaring gamitin ng mga developer ang GetTransactions function para makuha ang lahat ng transaksyon sa isang partikular na block.

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

Ang GetTransactionByIndex ay ginagamit upang makakuha ng isang partikular na transaksyon sa isang partikular na bloke.

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

Ang isang kumpletong gabay ay matatagpuan sa aming GitHub.

afterword

Ang Blockchain & Block API ay isang kailangang-kailangan na bahagi ng mga smart contract dahil magagamit mo ang mga ito para humiling ng blockchain data at mag-block ng data sa mga smart contract. Sa mga sumusunod na artikulo, tatalakayin natin kung paano gamitin ang iba pang mga API at alamin kung paano sila nakikipag-ugnayan sa Ontology blockchain.

Ang artikulo ay isinalin ng mga editor ng Hashrate&Shares lalo na para sa OntologyRussia. mag-click

Ikaw ba ay isang developer? Sumali sa aming tech community sa Hindi magkasundo. Gayundin, tingnan mo Developer Center sa aming website, kung saan makakahanap ka ng mga tool ng developer, dokumentasyon, at higit pa.

Ontolohiya

Pinagmulan: www.habr.com

Magdagdag ng komento