Bagaimana untuk menulis kontrak pintar dalam Python pada rangkaian Ontologi. Bahagian 1: Blockchain & Block API

Bagaimana untuk menulis kontrak pintar dalam Python pada rangkaian Ontologi. Bahagian 1: Blockchain & Block API

Ini adalah bahagian pertama dalam satu siri tutorial untuk mencipta kontrak pintar Python pada rangkaian blok Ontology menggunakan alat pembangunan kontrak pintar. SmartX.

Dalam artikel ini, kami akan memulakan perkenalan kami dengan API kontrak pintar Ontologi. API kontrak pintar Ontologi dibahagikan kepada 7 modul:

  1. Blockchain & Block API,
  2. API masa jalan,
  3. API storan,
  4. API asli,
  5. Tingkatkan API,
  6. API Enjin Pelaksanaan dan
  7. API Panggilan Statik & Dinamik.

Blockchain & Block API ialah bahagian utama sistem kontrak pintar Ontologi. API Blockchain menyokong operasi pertanyaan blok asas, seperti mendapatkan ketinggian blok semasa, manakala API Blok menyokong operasi pertanyaan blok asas, seperti menanyakan bilangan transaksi untuk blok tertentu.

Mari kita mulakan!

Pertama, buat kontrak baharu di SmartXdan kemudian ikut arahan di bawah.

1. Cara menggunakan API Blockchain

Pautan ke fungsi kontrak pintar adalah sama dengan pautan Python. Anda boleh memasukkan fungsi yang sepadan mengikut keperluan. Sebagai contoh, pernyataan berikut memperkenalkan fungsi GetHeight untuk mendapatkan ketinggian blok semasa dan fungsi GetHeader untuk mendapatkan pengepala blok.

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

GetHeight

GetHeight digunakan untuk mendapatkan nombor jujukan blok terakhir dalam rantaian blok, seperti yang ditunjukkan dalam contoh di bawah. Dalam contoh terakhir, kami akan meninggalkan fungsi Utama untuk kemudahan, tetapi anda boleh menambahnya jika perlu.

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 digunakan untuk mendapatkan pengepala blok, parameter ialah nombor siri blok dalam rantaian blok. Contoh:

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 digunakan untuk mendapatkan transaksi melalui cincangan transaksi. Cincang transaksi dihantar ke GetTransactionByHash sebagai parameter dalam format bytearray. Kunci kepada fungsi ini adalah untuk menukar cincang transaksi dalam format hex kepada cincang transaksi dalam format bytearray. Ini adalah langkah penting. Jika tidak, anda akan mendapat ralat yang menunjukkan bahawa tiada blok dengan cincang blok itu. Mari kita ambil cincang transaksi dalam format hex sebagai contoh untuk menukarnya kepada format bytearray. Contoh kelihatan seperti ini:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Mula-mula, terbalikkan cincang transaksi:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Pembangun boleh mencapai langkah ini menggunakan alat penukaran Nombor Hex(enddian kecil) yang disediakan oleh SmartX.

Kemudian tukarkan hasilnya kepada 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}

Ini boleh dilakukan menggunakan alat penukaran String Byte Array yang disediakan oleh SmartX. Akhir sekali, tukarkan bytearray yang terhasil kepada rentetan yang serupa:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Berikut ialah contoh fungsi GetTransactionByHash, yang mengambil transaksi menggunakan cincang transaksi:

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 digunakan untuk mendapatkan ketinggian transaksi melalui cincang transaksi. Mari kita ambil hash dari contoh di atas:

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

DapatkanKontrak

Pembangun boleh menggunakan fungsi GetContract untuk mendapatkan kontrak melalui cincang kontrak. Proses penukaran cincang kontrak adalah sama seperti proses penukaran cincang transaksi yang dinyatakan di atas.

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

DapatkanBlock

GetBlock digunakan untuk mendapatkan blok. Terdapat dua cara untuk mendapatkan blok tertentu.

1. Dapatkan ketinggian blok demi blok:

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

2. Dapatkan cincangan blok demi blok:

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

2. Cara menggunakan Block API

Terdapat tiga fungsi yang tersedia dalam API Blok: GetTransactions, GetTransactionCountdan GetTransactionByIndex. Kami akan memecahkan mereka satu demi satu.

GetTransactionCount

GetTransactionCount digunakan untuk mendapatkan bilangan transaksi untuk blok tertentu.

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

Pembangun boleh menggunakan fungsi GetTransactions untuk mendapatkan semua transaksi dalam blok tertentu.

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 digunakan untuk mendapatkan transaksi tertentu dalam blok tertentu.

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

Panduan lengkap boleh didapati di laman web kami GitHub.

afterword

Blockchain & Block API adalah bahagian penting dalam kontrak pintar kerana anda boleh menggunakannya untuk meminta data blockchain dan menyekat data dalam kontrak pintar. Dalam artikel berikut, kami akan membincangkan cara menggunakan API yang lain dan mengetahui cara ia berinteraksi dengan rantaian Ontology.

Artikel tersebut telah diterjemahkan oleh editor Hashrate&Shares khas untuk OntologyRussia. menangis

Adakah anda seorang pemaju? Sertai komuniti teknologi kami di Perpecahan. Juga, lihat Pusat Pembangun di tapak web kami, tempat anda boleh menemui alatan pembangun, dokumentasi dan banyak lagi.

Ontologi

Sumber: www.habr.com

Tambah komen