[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK

Artikelinhalt

Verwenden des Python SDK von Hyperledger Iroha, ・ Erstellen eines Assets ・ Asset senden ・ Erfassung von Blockinformationen Ich werde versuchen.

Annahme

・ Die Umgebung kann gemäß dem offiziellen Leitfaden von iroha konstruiert werden. ・ Umgebung, die Python3 verwenden kann

Referenz

Dokumentation zur Iroha Python Library https://iroha.readthedocs.io/en/latest/develop/libraries/python.html

Der Beispielcode auf dieser Seite stammt aus dem Senden eines Assets. Er funktioniert also nur, wenn Sie zuvor ein Asset erstellen. Ich werde diesen Code auch in diesem Artikel mit Python ausprobieren.

Erstellen eines Assets

from iroha import Iroha, IrohaCrypto, IrohaGrpc

net = IrohaGrpc('Host IP Address:50051')

iroha = Iroha('admin@test')
 admin_priv_key = 'Privater Administratorschlüssel' #Privatschlüssel für das Konto, das eine Zeile zuvor angegeben wurde

# Transaktion erstellen
create_asset_tx = iroha.transaction(
    [iroha.command(
 Create'CreateAsset ', # Asset
        asset_name = 'samplecoin',
        domain_id = 'test',
        precision = 10 
    ), iroha.command(
 Festlegen des anfänglichen Haltebetrags von 'AddAssetQuantity', # Asset
        asset_id = 'samplecoin#test',
        amount = '100000000'
    )]
)

# Transaktion unterzeichnen
IrohaCrypto.sign_transaction(create_asset_tx, admin_priv_key)

# Transaktion senden
net.send_tx(create_asset_tx)

# Überprüfen Sie das Ergebnis
for status in net.tx_status_stream(create_asset_tx):
    print(status)

Dieser Code erstellt ein Asset mit dem Konto "admin @ test" und legt die Anzahl der Assets fest, die das Konto "admin @ test" enthält.

Der Ablauf der Verarbeitung ist wie folgt: Erstellung der Transaktion → Signieren → Senden → Bestätigen des Ergebnisses.

Wenn es normal ausgeführt wird, ist das Ergebnis wie folgt.

('ENOUGH_SIGNATURES_COLLECTED', 9, 0)
('STATEFUL_VALIDATION_SUCCESS', 3, 0)
('COMMITTED', 5, 0)

Im Verzeichnis "/ tmp / block_store" des iroha-Containers wurde ein Block hinzugefügt.

{
  "blockV1": {
    "payload": {
      "transactions": [
        {
          "payload": {
            "reducedPayload": {
              "commands": [
                {
                  "createAsset": {
                    "assetName": "samplecoin",
                    "domainId": "test",
                    "precision": 10
                  }
                },
                {
                  "addAssetQuantity": {
                    "assetId": "samplecoin#test",
                    "amount": "100000000"
                  }
                }
              ],
              "creatorAccountId": "admin@test",
              "createdTime": "1578361629026",
              "quorum": 1
            }
          },
          "signatures": [
            {
              "publicKey": "313a07e6384776ed95447710d15e59148473ccfc052a681317a72a69f2a49910",
              "signature": "a414d71e6b2022a81d375d2a367827800a072b465ace7e919c23336b572e5c7511854c2abcff08736d6a687e261a21e1121180f561b8e18729a0fdeaffbbc401"
            }
          ]
        }
      ],
      "height": "2",
      "prevBlockHash": "9debdb1a70db2cede2222427b849f6bf7ab20845da7c3db1837c0df25ec1c61a",
      "createdTime": "1578361629022"
    },
    "signatures": [
      {
        "publicKey": "bddd58404d1315e0eb27902c5d7c8eb0602c16238f005773df406bc191308929",
        "signature": "20a900f3587ccdadcb128a6d597cd0406e90882cbc9b12017c938d4f0c4a4cd6bd6cd09b674289c5146f1026bfdfc33a922a6cb925429db29e49605ffc392c09"
      }
    ]
  }
}

Asset senden

Der Code hier bleibt der Code, der in der offiziellen Dokumentation zu den oben genannten Referenzen enthalten ist.

from iroha import Iroha, IrohaCrypto, IrohaGrpc

net = IrohaGrpc('Host IP Address:50051')

iroha = Iroha('admin@test')
 admin_priv_key = 'Privater Administratorschlüssel' #Privatschlüssel für das Konto, das eine Zeile zuvor angegeben wurde

# Transaktion erstellen
transfer_asset_tx = iroha.transaction(
 [iroha.command(
     'TransferAsset',
     src_account_id='admin@test',
     dest_account_id='test@test',
     asset_id='samplecoin#test',
     description='test',
     amount='10000'
 )]
)

# Transaktionssignatur
IrohaCrypto.sign_transaction(transfer_asset_tx, admin_priv_key)

# Transaktion senden
net.send_tx(transfer_asset_tx)

# Überprüfen Sie das Ergebnis
for status in net.tx_status_stream(transfer_asset_tx):
    print(status)

Ändern Sie das Quellkonto (src_account_id), das Zielkonto (dest_account_id) und die Asset-ID (Asset_name # domain_id) entsprechend Ihrer Umgebung.

Wenn es normal ausgeführt wird, ist das Ergebnis wie folgt.

('ENOUGH_SIGNATURES_COLLECTED', 9, 0)
('STATEFUL_VALIDATION_SUCCESS', 3, 0)
('COMMITTED', 5, 0)

Im Verzeichnis "/ tmp / block_store" des iroha-Containers wurde ein Block hinzugefügt.

{
  "blockV1": {
    "payload": {
      "transactions": [
        {
          "payload": {
            "reducedPayload": {
              "commands": [
                {
                  "transferAsset": {
                    "srcAccountId": "admin@test",
                    "destAccountId": "test@test",
                    "assetId": "samplecoin#test",
                    "description": "test",
                    "amount": "10000"
                  }
                }
              ],
              "creatorAccountId": "admin@test",
              "createdTime": "1578362174344",
              "quorum": 1
            }
          },
          "signatures": [
            {
              "publicKey": "313a07e6384776ed95447710d15e59148473ccfc052a681317a72a69f2a49910",
              "signature": "7bf5bec8110cbe618b05cd3bf8b69d0eb1e6e2eb4f3efcc41d0573b8e3638bc220b49c251c0f3238bb753d85d4b7a3e032f420f5c0e4f0e8fe18a72c9ec0800e"
            }
          ]
        }
      ],
      "height": "3",
      "prevBlockHash": "ac0f2ad5cdbea3c6cd8eb0e4e1b7679b595a9c26ddda1acc75a5ff031abf9c91",
      "createdTime": "1578362175915"
    },
    "signatures": [
      {
        "publicKey": "bddd58404d1315e0eb27902c5d7c8eb0602c16238f005773df406bc191308929",
        "signature": "507a96cbb0ac99fada62cf36097204fc166a4635b70e68b9c87d007300ca0f7b231f4787cc9fe8751cc640a9cf2b7c161cc0bedb31e606363d4c18256268660f"
      }
    ]
  }
}

Blockinformationen abrufen

Der Code zum Abrufen von Blockinformationen unterscheidet sich geringfügig von zuvor.

from iroha import Iroha, IrohaCrypto, IrohaGrpc

net = IrohaGrpc('Host IP Address:50051')

iroha = Iroha('admin@test')
 admin_priv_key = 'Privater Administratorschlüssel' #Privatschlüssel für das Konto, das eine Zeile zuvor angegeben wurde

# Abfrage erstellen
get_block_query = iroha.query(
        'GetBlock',
 height = 3 # Geben Sie die Blockhöhe (Anzahl) an, die abgerufen werden soll
)

# Abfrage signieren
IrohaCrypto.sign_query(get_block_query, admin_priv_key)

# Anfrage senden
response = net.send_query(get_block_query)

# Antwortausgabe
print(response)

Sie erstellen eine Abfrage → Signieren → Senden → Überprüfen des Ergebnisses. Dies entspricht dem Senden einer Transaktion. Die zu verwendende Funktion ändert sich geringfügig.

Ausführungsergebnis

query_hash: "eb7035cdde49e26f2271b7991933a5eb8321f1a3176014a73f53a1c86d91b8bc"
block_response {
  block {
    block_v1 {
      payload {
        transactions {
          payload {
            reduced_payload {
              commands {
                transfer_asset {
                  src_account_id: "admin@test"
                  dest_account_id: "test@test"
                  asset_id: "samplecoin#test"
                  description: "test"
                  amount: "10000"
                }
              }
              creator_account_id: "admin@test"
              created_time: 1578362174344
              quorum: 1
            }
          }
          signatures {
            public_key: "313a07e6384776ed95447710d15e59148473ccfc052a681317a72a69f2a49910"
            signature: "7bf5bec8110cbe618b05cd3bf8b69d0eb1e6e2eb4f3efcc41d0573b8e3638bc220b49c251c0f3238bb753d85d4b7a3e032f420f5c0e4f0e8fe18a72c9ec0800e"
          }
        }
        height: 3
        prev_block_hash: "ac0f2ad5cdbea3c6cd8eb0e4e1b7679b595a9c26ddda1acc75a5ff031abf9c91"
        created_time: 1578362175915
      }
      signatures {
        public_key: "bddd58404d1315e0eb27902c5d7c8eb0602c16238f005773df406bc191308929"
        signature: "507a96cbb0ac99fada62cf36097204fc166a4635b70e68b9c87d007300ca0f7b231f4787cc9fe8751cc640a9cf2b7c161cc0bedb31e606363d4c18256268660f"
      }
    }
  }
}

Ich konnte Informationen mit einer Blockhöhe (Nummer) von 3 erhalten.

Soweit ich das Dokument gelesen habe, scheint es keine Bibliothek zu geben, um den neuesten Block und die neueste Blockhöhe (Nummer) zu erhalten. Wenn im obigen Code "Höhe" der Abfrage angegeben wurde, ist ein Fehler aufgetreten, da die erforderlichen Elemente nicht eingegeben wurden.

Impressionen

Ich habe einen Artikel über die Verwendung von Irohas Java SDK geschrieben, aber selbst ich, ein Anfänger von Python, könnte Python leichter verwenden. Die Details zum Zusammenstellen des Befehls werden auch auf der API-Seite des offiziellen Dokuments beschrieben, sodass es relativ einfach zu verstehen ist.

Offizielle Dokumentation https://iroha.readthedocs.io/en/latest/develop/api.html

Blockinformationen mit dem Java SDK von Hyperledger Iroha abrufen

Recommended Posts

[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Hinweise zur Verwendung von Pywinauto
Hinweise zur Verwendung von featuretools
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
Memorandum über die Verwendung von Gremlin Python
Verwendung der C-Bibliothek in Python
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
[Algorithmus x Python] Verwendung der Liste
python3: Verwendung der Flasche (2)
Verwendung des Generators
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
Verwendung von Raspeye Relay Module Python
[Python] Verwendung der Diagrammerstellungsbibliothek Altair
[Einführung in die Udemy Python3 + -Anwendung] 27. Verwendung des Wörterbuchs
Autoencoder im Chainer (Hinweise zur Verwendung von + Trainer)
[Einführung in die Udemy Python3 + -Anwendung] 30. Verwendung des Sets
Verwendung von Django mit Google App Engine / Python
Verwendung des in Lobe in Python erlernten Modells
Wie man Python auf Android genießt !! Programmieren für unterwegs !!
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os
Python: So verwenden Sie Async mit
Verwendung der Zip-Funktion
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
[Python] Verwendung der Pandas-Serie
Verwendung von Dataiku unter Windows
Verwendung der Methode __call__ in der Python-Klasse
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
So erhalten Sie die Python-Version
So stellen Sie Pybot, das einfachste Python-Lehrbuch, auf Heroku bereit
Wie benutzt man Homebrew in Debian?
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Hinweise zur Verwendung von StatsModels, die lineare Regression und GLM in Python verwenden können
Verwendung der Zip-Funktion von Python
Sakura Verwenden von Python im Internet
Verwendung des ConfigParser-Moduls
Hinweise zum Schreiben von require.txt
[Python] Verwendung der Typetalk-API
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
So ändern Sie die Protokollstufe von Azure SDK für Python
So verwenden Sie Python in Pyenv unter MacOS mit PyCall