オントロジー ネットワーク上で Python でスマート コントラクトを作成する方法。 パート 3: ランタイム API

オントロジー ネットワーク上で Python でスマート コントラクトを作成する方法。 パート 3: ランタイム API

これは、オントロジー ブロックチェーン ネットワーク上で Python でスマート コントラクトを作成することに関する一連の教育記事の第 3 部です。 以前の記事で知りました

  1. ブロックチェーンとブロックAPI
  2. ストレージAPI.

オントロジー ネットワーク上で Python を使用してスマート コントラクトを開発するときに、適切な永続ストレージ API を呼び出す方法について理解できたので、使用方法の学習に進みましょう。 ランタイムAPI (契約実行API)。 ランタイム API には、コントラクト実行のための共通インターフェイスを提供し、開発者によるデータの取得、変換、検証を支援する 8 つの関連 API があります。

以下に、8 つの API データの簡単な説明を示します。

オントロジー ネットワーク上で Python でスマート コントラクトを作成する方法。 パート 3: ランタイム API

8つのAPIデータの使い方を詳しく見てみましょう。 この前に、オントロジー スマート コントラクト開発ツールで新しいコントラクトを作成できます。 SmartX そして以下の指示に従ってください。

ランタイムAPIの使用方法

インポートにはXNUMXつの方法があります ランタイム API: ontology.interop.System.Runtime и オントロジー.interop.オントロジー.ランタイム。 オントロジー パスには、新しく追加された API が含まれています。 以下の行は API データをインポートします。

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash

通知API

通知機能は、ネットワーク全体にイベントをブロードキャストします。 以下の例では、Notify 関数は XNUMX 進文字列「hello word」を返し、ネットワーク全体にブロードキャストします。

from ontology.interop.System.Runtime import Notify
def demo():
    Notify("hello world")

これはログで確認できます。

オントロジー ネットワーク上で Python でスマート コントラクトを作成する方法。 パート 3: ランタイム API

GetTime API

GetTime 関数は現在のタイムスタンプを返します。これは、関数が呼び出された Unix 時刻を返します。 測定単位は秒です。

from ontology.interop.System.Runtime import GetTime
def demo():
    time=GetTime()
    return time # return a uint num

GetCurrentBlockHash API

GetCurrentBlockHash 関数は、現在のブロックのハッシュを返します。

from ontology.interop.Ontology.Runtime import GetCurrentBlockHash
def demo():
    block_hash = GetCurrentBlockHash()
    return block_hash

シリアライズとデシリアライズ

これは、シリアル化関数と逆シリアル化関数のペアです。 Serialize 関数はオブジェクトを bytearray オブジェクトに変換し、Deserialize 関数は bytearray を元のオブジェクトに変換します。 以下のコード サンプルは、受信パラメータを変換し、コントラクトの永続ストレージに保存します。 また、コントラクトの永続ストレージからデータを取得し、それを元のオブジェクトに変換します。

from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize
from ontology.interop.System.Storage import Put, Get, GetContext

def Main(operation, args):
    if operation == 'serialize_to_bytearray':
        data = args[0]
        return serialize_to_bytearray(data)
    if operation == 'deserialize_from_bytearray':
        key = args[0]
        return deserialize_from_bytearray(key)
    return False


def serialize_to_bytearray(data):
    sc = GetContext()
    key = "1"
    byte_data = Serialize(data)
    Put(sc, key, byte_data)


def deserialize_from_bytearray(key):
    sc = GetContext()
    byte_data = Get(sc, key)
    data = Deserialize(byte_data)
    return data

Base58ToAddress と AddressToBase58

このペアのアドレス変換機能。 Base58ToAddress 関数は、base58 でエンコードされたアドレスをバイト配列アドレスに変換し、AddressToBase58 は、バイト配列アドレスを Base58 エンコードされたアドレスに変換します。

from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58
def demo():
    base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn"
    addr=Base58ToAddress(base58_addr)
    Log(addr)
    base58_addr=AddressToBase58(addr)
    Log(base58_addr)

証人チェック

CheckWitness(fromAcct) 関数には XNUMX つの機能があります。

  • 現在の関数の呼び出し元が fromAcct であるかどうかを確認します。 「はい」の場合 (つまり、署名検証に合格した場合)、関数は戻ります。
  • 現在の関数を呼び出しているオブジェクトがコントラクトであるかどうかを確認します。 それがコントラクトであり、そのコントラクトから関数が実行される場合、検証は合格します。 つまり、fromAcct が GetCallingScriptHash() の戻り値であるかどうかを確認します。 GetCallingScriptHash() 関数は、現在のスマート コントラクトのコントラクト ハッシュ値を取得できます。

GetCallingScriptHash():

詳細情報 グトゥブ

from ontology.interop.System.Runtime import CheckWitness
from ontology.interop.Ontology.Runtime import Base58ToAddress
def demo():
    addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z")
    res=CheckWitness(addr)
    return res

詳細については、次の Web サイトを参照してください。 グトゥブ。 次の記事でご紹介します ネイティブAPIオントロジースマートコントラクトで資産を転送する方法を学びます。

記事は編集者によって翻訳されました ハッシュレートとシェア 特にオントロジーロシアにとっては。

あなたは開発者ですか? 弊社の技術コミュニティに参加してください。 Discord。 また、こちらもご覧ください 開発者センター オントロジーでは、さらに多くのツール、ドキュメントなどを見つけることができます。

開発者向けのオープンタスク。 タスクを完了して報酬を獲得してください。

申し込み 学生向けオントロジー人材プログラム向け

オントロジー

オントロジーのウェブサイト - GitHubの - Discord - 電報ロシア語 - Twitter - Reddit

出所: habr.com

コメントを追加します