オントロジー ネットワーク上で Python でスマート コントラクトを作成する方法。 パート 1: ブロックチェーンとブロック API

オントロジー ネットワーク上で Python でスマート コントラクトを作成する方法。 パート 1: ブロックチェーンとブロック API

これは、スマート コントラクト開発ツールを使用してオントロジー ブロックチェーン ネットワーク上で Python スマート コントラクトを作成する一連のチュートリアルの最初の部分です。 SmartX.

この記事では、オントロジー スマート コントラクト API について説明します。 オントロジー スマート コントラクト API は 7 つのモジュールに分かれています。

  1. ブロックチェーンとブロックAPI、
  2. ランタイムAPI、
  3. ストレージAPI、
  4. ネイティブAPI、
  5. APIのアップグレード、
  6. 実行エンジンAPIと
  7. 静的および動的呼び出し API。

ブロックチェーンとブロック API は、オントロジー スマート コントラクト システムの主要部分です。 Blockchain API は、現在のブロックの高さの取得など、基本的なブロックチェーン クエリ操作をサポートします。一方、Block API は、特定のブロックのトランザクション数のクエリなど、基本的なブロック クエリ操作をサポートします。

始めましょう!

まず、新しい契約を作成します SmartXそして、以下の指示に従ってください。

1. ブロックチェーンAPIの使い方

スマート コントラクト関数へのリンクは、Python リンクと同じです。 必要に応じて、対応する関数を入力できます。 たとえば、次のステートメントでは、現在のブロックの高さを取得する GetHeight 関数と、ブロックのヘッダーを取得する GetHeader 関数が導入されています。

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

高さの取得

以下の例に示すように、GetHeight はブロックチェーン内の最後のブロック シーケンス番号を取得するために使用されます。 最後の例では便宜上 Main 関数を省略していますが、必要に応じて追加できます。

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 はブロック ヘッダーを取得するために使用されます。パラメーターはブロックチェーン内のブロックのシリアル番号です。 例:

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 は、トランザクション ハッシュを介してトランザクションを取得するために使用されます。 トランザクション ハッシュは次の宛先に送信されます。 GetTransactionByHash bytearray 形式のパラメータとして。 この関数の重要な点は、XNUMX 進形式のトランザクション ハッシュをバイト配列形式のトランザクション ハッシュに変換することです。 これは重要なステップです。 そうしないと、そのブロック ハッシュを持つブロックが存在しないことを示すエラーが発生します。 例として XNUMX 進数形式のトランザクション ハッシュを取り、それを bytearray 形式に変換してみましょう。 例は次のようになります。

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

まず、トランザクション ハッシュを逆にします。

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

開発者は、SmartX が提供する XNUMX 進数 (リトル エンディアン) 数値変換ツールを使用して、この手順を実行できます。

次に、結果を 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}

これは、SmartX が提供する String Byte Array 変換ツールを使用して行うことができます。 最後に、結果の bytearray を同様の文字列に変換します。

xc1x89x0cx4dx73x06x26xdfxaax94x49x41x9dx66x25x05xeaxb3xbdxa2xe1xf0x1fx89x46x3cxc1xa4xa3x0ax27x9f

以下は、トランザクションのハッシュを使用してトランザクションを取得する GetTransactionByHash 関数の例です。

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 は、トランザクション ハッシュを介してトランザクションの高さを取得するために使用されます。 上の例からハッシュを取り出してみましょう。

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

契約を取得する

開発者は、GetContract 関数を使用して、コントラクトのハッシュを通じてコン​​トラクトを取得できます。 コントラクトハッシュ変換処理は、上述したトランザクションハッシュ変換処理と同様である。

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

ゲットブロック

GetBlock はブロックを取得するために使用されます。 特定のブロックを取得するには XNUMX つの方法があります。

1. ブロックの高さごとにブロックを取得します。

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

2. ブロックごとのハッシュを取得します。

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

2. ブロックAPIの使い方

Block API には XNUMX つの使用可能な関数があります。 GetTransactions, GetTransactionCountGetTransactionByIndex。 一つずつ解説していきます。

GetTransactionCount

GetTransactionCount は、特定のブロックのトランザクション数を取得するために使用されます。

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

開発者は、GetTransactions 関数を使用して、特定のブロック内のすべてのトランザクションを取得できます。

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 は、特定のブロック内の特定のトランザクションを取得するために使用されます。

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

完全なガイドは、次のサイトでご覧いただけます。 GitHubの.

後書き

ブロックチェーンとブロック API は、スマート コントラクトでブロックチェーン データをリクエストしたり、データをブロックしたりするために使用できるため、スマート コントラクトに不可欠な部分です。 次の記事では、残りの API の使用方法と、それらがオントロジー ブロックチェーンとどのように対話するかを説明します。

この記事は、Hashrate&Shares の編集者によって特に OntologyRussia 向けに翻訳されました。 クリック

あなたは開発者ですか? 弊社の技術コミュニティに参加してください。 Discord。 また、こちらもご覧ください 開発者センター 当社の Web サイトでは、開発者ツールやドキュメントなどが見つかります。

オントロジー

出所: habr.com

コメントを追加します