Cách viết hợp đồng thông minh bằng Python trên mạng Ontology. Phần 1: Chuỗi khối & API khối

Cách viết hợp đồng thông minh bằng Python trên mạng Ontology. Phần 1: Chuỗi khối & API khối

Đây là phần đầu tiên trong loạt bài hướng dẫn tạo hợp đồng thông minh Python trên mạng chuỗi khối Ontology bằng công cụ phát triển hợp đồng thông minh. SmartX.

Trong bài viết này, chúng ta sẽ bắt đầu làm quen với API hợp đồng thông minh Ontology. API hợp đồng thông minh Ontology được chia thành 7 mô-đun:

  1. Chuỗi khối & API khối,
  2. API thời gian chạy,
  3. API lưu trữ,
  4. API gốc,
  5. Nâng cấp API,
  6. API công cụ thực thi và
  7. API cuộc gọi tĩnh & động.

Blockchain & Block API là phần chính của hệ thống hợp đồng thông minh Ontology. API chuỗi khối hỗ trợ các hoạt động truy vấn chuỗi khối cơ bản, chẳng hạn như lấy chiều cao khối hiện tại, trong khi API khối hỗ trợ các hoạt động truy vấn khối cơ bản, chẳng hạn như truy vấn số lượng giao dịch cho một khối nhất định.

Bắt đầu nào!

Đầu tiên, tạo một hợp đồng mới trong SmartXvà sau đó làm theo các hướng dẫn dưới đây.

1. Cách sử dụng Blockchain API

Liên kết đến các chức năng hợp đồng thông minh giống với liên kết Python. Bạn có thể nhập các chức năng tương ứng nếu cần. Ví dụ: câu lệnh sau giới thiệu hàm GetHeight để lấy chiều cao khối hiện tại và hàm GetHeader để lấy tiêu đề của khối.

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

Nhận chiều cao

GetHeight được sử dụng để lấy số thứ tự khối cuối cùng trong chuỗi khối, như trong ví dụ bên dưới. Trong ví dụ trước, chúng tôi sẽ bỏ qua chức năng Chính để thuận tiện, nhưng bạn có thể thêm nó nếu cần thiết.

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

Nhận tiêu đề

GetHeader được sử dụng để lấy tiêu đề khối, tham số là số sê-ri của khối trong chuỗi khối. Ví dụ:

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

Nhận giao dịchByHash

GetTransactionByHash được sử dụng để nhận giao dịch thông qua hàm băm giao dịch. Băm giao dịch được gửi đến Nhận giao dịchByHash làm tham số ở định dạng bytearray. Chìa khóa của chức năng này là chuyển đổi hàm băm giao dịch ở định dạng hex thành hàm băm giao dịch ở định dạng bytearray. Đây là một bước quan trọng. Nếu không, bạn sẽ gặp lỗi cho biết không có khối nào có hàm băm khối đó. Hãy lấy hàm băm giao dịch ở định dạng hex làm ví dụ để chuyển đổi nó sang định dạng bytearray. Một ví dụ trông như thế này:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

Đầu tiên, đảo ngược hàm băm giao dịch:

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

Các nhà phát triển có thể thực hiện bước này bằng cách sử dụng công cụ chuyển đổi Số Hex (Little endian) do SmartX cung cấp.

Sau đó chuyển đổi kết quả sang định dạng 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}

Điều này có thể được thực hiện bằng cách sử dụng công cụ chuyển đổi String Byte Array do SmartX cung cấp. Cuối cùng, chuyển đổi mảng phụ kết quả thành một chuỗi tương tự:

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

Sau đây là một ví dụ về hàm GetTransactionByHash, hàm này nhận một giao dịch bằng cách sử dụng hàm băm của giao dịch:

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

Nhận chiều cao giao dịch

GetTransactionHeight được sử dụng để lấy chiều cao giao dịch thông qua hàm băm giao dịch. Hãy lấy hàm băm từ ví dụ trên:

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

Nhận hợp đồng

Các nhà phát triển có thể sử dụng chức năng GetContract để nhận hợp đồng thông qua hàm băm của hợp đồng. Quá trình chuyển đổi hàm băm hợp đồng cũng giống như quá trình chuyển đổi hàm băm giao dịch đã đề cập ở trên.

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

Chặn

GetBlock được sử dụng để lấy một khối. Có hai cách để có được một khối cụ thể.

1. Nhận khối theo chiều cao khối:

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

2. Nhận một khối bằng hàm băm khối:

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

2. Cách sử dụng Block API

Có ba chức năng khả dụng trong Block API: Nhận giao dịch, Nhận số lượng giao dịchGetTransactionBy Index. Chúng tôi sẽ phá vỡ chúng từng cái một.

Nhận số lượng giao dịch

GetTransactionCount được sử dụng để lấy số lượng giao dịch cho một khối nhất định.

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

Nhận giao dịch

Các nhà phát triển có thể sử dụng chức năng GetTransactions để nhận tất cả các giao dịch trong một khối nhất định.

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

GetTransactionBy Index

GetTransactionByIndex được sử dụng để nhận một giao dịch cụ thể trong một khối nhất định.

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

Một hướng dẫn đầy đủ có thể được tìm thấy trên của chúng tôi GitHub.

bạt

Blockchain & Block API là một phần không thể thiếu của hợp đồng thông minh vì bạn có thể sử dụng chúng để yêu cầu dữ liệu blockchain và chặn dữ liệu trong hợp đồng thông minh. Trong các bài viết tiếp theo, chúng ta sẽ thảo luận về cách sử dụng phần còn lại của các API và tìm hiểu cách chúng tương tác với chuỗi khối Ontology.

Bài báo được dịch bởi các biên tập viên của Hashrate&Shares, đặc biệt là cho OntologyRussia. khóc

Bạn có phải là nhà phát triển? Tham gia cộng đồng công nghệ của chúng tôi tại Discord . Ngoài ra, hãy xem Trung tâm nhà phát triển trên trang web của chúng tôi, nơi bạn có thể tìm thấy các công cụ, tài liệu dành cho nhà phát triển, v.v.

Bản thể học

Nguồn: www.habr.com

Thêm một lời nhận xét