Wie schreibe ich einen intelligenten Vertrag mit Python über Ontologie? Teil 4: Native API

Bild

Zuvor habe ich den Ontology Smart Contract in eingeführt
Teil 1: Blockchain & Block API und
Teil 2: Speicher-API
Teil 3: Laufzeit-API
Lassen Sie uns heute darüber sprechen, wie Sie einen nativen Smart-Vertrag für Ontology über die native API aufrufen. Eine der typischsten Funktionen beim Aufrufen eines nativen Vertrags ist die Übertragung von Vermögenswerten.

Einführung


Die native API verfügt nur über eine API. Wenn Sie die Invoke-Funktion verwenden, müssen Sie die integrierte Statusfunktion verwenden, um die Parameter zu kapseln. Im Folgenden erfahren Sie, wie Sie die Funktionen verwenden.

Bild

Lassen Sie uns nun näher auf die Verwendung dieser beiden APIs eingehen. Zuvor können Sie im Ontology Smart Contract Development Tool SmartX einen neuen Vertrag erstellen und die folgenden Anweisungen befolgen. Wie üblich werde ich am Ende des Artikels einen Link zum Quellcode bereitstellen.

Verwendung der nativen API


Wie üblich müssen Sie die beiden Funktionen wie folgt importieren, bevor Sie sie verwenden können.

from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state 

Liste der Ontology Native Contract


Derzeit sind 6 native Ontology-Verträge für Entwickler verfügbar. Unten finden Sie eine Liste der 6 nativen Verträge, die von der nativen API aufgerufen werden können.

Bild

Im Vertrag müssen Sie nur die Vertragsadresse in ein Bytearray-Format konvertieren und aufrufen.

Wenn Sie beispielsweise einen ONT-Token-Vertrag aufrufen müssen, können Sie zuerst die Adresse des ONT-Token-Vertrags in das Bytearray-Format konvertieren und dann die Invoke-Funktion aufrufen. Beim Aufruf der Invoke-Funktion sind die importierten Parameter die Versionsnummer, die Vertragsadresse, die aufgerufene Vertragsmethode und die von der Statusfunktion gekapselten transferbezogenen Parameter.

Ein besonderer Punkt, der hier zu beachten ist, ist, dass bei einer Vertragsübertragung für ONG die gefüllte Menge das 10-fache der tatsächlichen Menge beträgt. Das heißt, wenn Sie 10 ONG übertragen müssen, muss die Menge 10¹⁰ eingegeben werden. Wenn Sie eine Brieftasche wie ONTO oder Cyano zum Überweisen verwenden, geben Sie als Überweisungsbetrag ein.

 contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param]) 

Vertragscode übertragen


Im Folgenden finden Sie ein detailliertes Beispiel für die Verwendung von Python zur Übertragung von ONT und ONG . Im folgenden Code ist der Parametertyp des importierten Sendekontos und der Empfangsadresse eine Zeichenfolge. Darüber hinaus kann es auch mit einer Adresse mit Kontoparameter geliefert werden, wodurch die Gasgebühr für das Aufrufen des Vertrags gespart wird. Der Prozess ist wie folgt:

  1. Definieren Sie die Vertragsadressvariablen contract_address_ONT und contract_address_ONG.
  2. Konvertieren Sie die Sende- und Empfangsadresse vom base58-Format in das bytearray-Format.
  3. Überprüfen Sie die Unterschrift und stellen Sie sicher, dass die Absenderadresse mit der Vertragsaufrufadresse übereinstimmt.
  4. Die Statusfunktion kapselt die Übertragungsparameter.
  5. Die Invoke-Funktion ruft den nativen Vertrag ONT Token und ONG Token zur Übertragung auf.
  6. Stellen Sie fest, ob die Übertragung erfolgreich war, indem Sie res zurückgeben. Wenn der Rückgabewert b '\ x01' ist, ist die Übertragung erfolgreich und das Ereignis "Übertragung erfolgreich" wird ausgegeben.

 from ontology.interop.System.Runtime import Notify, CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state # contract address contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') contract_address_ONG = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') def Main(operation, args): if operation == 'transfer': from_acct = args[0] to_acct = args[1] ont_amount = args[2] ong_amount = args[3] return transfer(from_acct,to_acct,ont_amount,ong_amount) return False def transfer(from_acct, to_acct, ont_amount, ong_amount): # convert base58 address to address in the form of byte array from_acct=Base58ToAddress(from_acct) to_acct=Base58ToAddress(to_acct) # check whether the sender is the payer if CheckWitness(from_acct): # transfer ONT if ont_amount > 0: param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param]) if res and res == b'\x01': Notify('transfer succeeded') else: Notify('transfer failed') # transfer ONG if ong_amount > 0: param = state(from_acct, to_acct, ong_amount) res = Invoke(1, contract_address_ONG, 'transfer', [param]) if res and res == b'\x01': Notify('transfer succeeded') else: Notify('transfer failed') else: Notify('CheckWitness failed') 

Übe auf SmartX


Sie können das obige Codebeispiel auch unter SmarX kompilieren und ausführen, indem Sie die folgenden Schritte ausführen :

  • Kompilieren Sie den Vertrag. Erstellen Sie zunächst ein Projekt unter SmartX und kompilieren Sie den Code in diesem Projekt.

Bild
  • Stellen Sie den Vertrag bereit. Wenn Sie ein Test-Token benötigen, um den Vertrag bereitzustellen, bewerben Sie sich hier . Das Bereitstellungsergebnis lautet wie folgt:

Bild

  • Führen Sie die Übertragungsfunktion aus. Bevor Sie die Übertragungsfunktion ausführen, müssen Sie die Parameter nach Bedarf konfigurieren. Im folgenden Beispiel müssen Sie die Sende- und Empfangsadresse sowie den übertragenen ONT- und ONG-Betrag eingeben:

Bild

  • Übertragung erfolgreich. Nachdem Sie die Parameter richtig konfiguriert haben, ist die Übertragung beim Ausführen der Übertragungsfunktion erfolgreich. Das übertragene Token wird in der obigen Empfangsadresse angezeigt:

Bild

Zusammenfassung


In diesem Artikel haben wir die native API der Ontology-Blockchain vorgestellt. Entwickler können diese API verwenden, um native Ontology-Verträge aufzurufen. Im nächsten Artikel werden wir die Upgrade-API vorstellen, um zu untersuchen, wie Sie einen Vertrag in Ontology Smart Contracts aktualisieren können.

Das Tutorial auf GitHub finden Sie hier .



Dies ist ein offizielles Tutorial, das zuvor im Ontology Medium-Blog veröffentlicht wurde
Bist du ein Entwickler? Stellen Sie sicher, dass Sie unserer Tech-Community auf Discord beigetreten sind. Besuchen Sie auch das Developer Center auf unserer Website. Dort finden Sie Entwicklertools, Dokumentation und mehr.

Finden Sie die Ontologie woanders


Ontologie-Website
Github / Zwietracht
Telegramm Englisch / Russisch
Twitter / Reddit

Source: https://habr.com/ru/post/de471358/


All Articles