[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python

Contenu de l'article

À l'aide du SDK Python d'Hyperledger Iroha, ・ Création d'un actif ・ Envoyer un élément ・ Acquisition des informations de bloc Je vais essayer.

supposition

・ L'environnement peut être construit selon le guide officiel d'iroha. ・ Environnement pouvant utiliser Python3

référence

Documentation de la bibliothèque Iroha Python https://iroha.readthedocs.io/en/latest/develop/libraries/python.html

L'exemple de code sur cette page est écrit à partir de l'envoi d'un actif, il ne fonctionnera donc que si vous créez un actif à l'avance. J'essaierai également ce code en utilisant Python dans cet article.

Créer un actif

from iroha import Iroha, IrohaCrypto, IrohaGrpc

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

iroha = Iroha('admin@test')
 admin_priv_key = 'Admin Private Key' #Private Key pour le compte spécifié une ligne avant

# Créer une transaction
create_asset_tx = iroha.transaction(
    [iroha.command(
 Create'CreateAsset ', # Asset
        asset_name = 'samplecoin',
        domain_id = 'test',
        precision = 10 
    ), iroha.command(
 Définition du montant de détention initial de'AddAssetQuantity ', # Asset
        asset_id = 'samplecoin#test',
        amount = '100000000'
    )]
)

# Transaction de signature
IrohaCrypto.sign_transaction(create_asset_tx, admin_priv_key)

# Envoyer la transaction
net.send_tx(create_asset_tx)

# Vérifiez le résultat
for status in net.tx_status_stream(create_asset_tx):
    print(status)

Ce code crée un actif avec le compte "admin @ test" et définit le montant des actifs que le compte "admin @ test" détient.

Le déroulement du traitement est le suivant: Création de la transaction → Signature → Envoi → Confirmation du résultat.

S'il est exécuté normalement, le résultat sera le suivant.

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

Un bloc a été ajouté sous le répertoire "/ tmp / block_store" du conteneur iroha.

{
  "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"
      }
    ]
  }
}

Envoyer l'élément

Le code ici reste le code trouvé dans la documentation officielle mentionnée dans les références ci-dessus.

from iroha import Iroha, IrohaCrypto, IrohaGrpc

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

iroha = Iroha('admin@test')
 admin_priv_key = 'Admin Private Key' #Private Key pour le compte spécifié une ligne avant

# Créer une transaction
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'
 )]
)

# Signature de transaction
IrohaCrypto.sign_transaction(transfer_asset_tx, admin_priv_key)

# Envoyer la transaction
net.send_tx(transfer_asset_tx)

# Vérifiez le résultat
for status in net.tx_status_stream(transfer_asset_tx):
    print(status)

Modifiez le compte source (src_account_id), le compte de destination (dest_account_id) et l'ID d'actif (asset_name # domain_id) en fonction de votre environnement.

S'il est exécuté normalement, le résultat sera le suivant.

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

Un bloc a été ajouté sous le répertoire "/ tmp / block_store" du conteneur iroha.

{
  "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"
      }
    ]
  }
}

Obtenir des informations sur le bloc

Le code pour obtenir les informations de bloc est légèrement différent de celui d'avant.

from iroha import Iroha, IrohaCrypto, IrohaGrpc

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

iroha = Iroha('admin@test')
 admin_priv_key = 'Admin Private Key' #Private Key pour le compte spécifié une ligne avant

# Créer une requête
get_block_query = iroha.query(
        'GetBlock',
 height = 3 # Spécifiez la hauteur de bloc (nombre) à obtenir
)

# Requête de signe
IrohaCrypto.sign_query(get_block_query, admin_priv_key)

# Envoyer la requête
response = net.send_query(get_block_query)

# Sortie de réponse
print(response)

Ce que vous faites, c'est créer une requête → signature → envoi → vérification du résultat, c'est donc la même chose que l'envoi d'une transaction. La fonction à utiliser changera un peu.

Résultat d'exécution

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"
      }
    }
  }
}

J'ai pu obtenir des informations avec une hauteur de bloc (nombre) de 3.

Autant que j'ai lu le document, il semble qu'il n'y ait pas de bibliothèque pour obtenir le dernier bloc et la dernière hauteur de bloc (numéro). Lorsque la "hauteur" de la requête a été spécifiée dans le code ci-dessus, une erreur s'est produite car les éléments requis n'ont pas été saisis.

Impressions

J'ai écrit un article sur l'utilisation du SDK Java d'Iroha, mais même moi, qui suis un débutant en Python, pourrais utiliser Python plus facilement. Les détails sur la façon d'assembler la commande sont également décrits sur la page API du document officiel, il est donc relativement facile à comprendre.

Documentation officielle https://iroha.readthedocs.io/en/latest/develop/api.html

Obtenez des informations de bloc avec le SDK Java d'Hyperledger Iroha

Recommended Posts

[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
Remarques sur l'utilisation de pywinauto
Remarques sur l'utilisation des featuretools
Remarques sur l'utilisation de la guimauve dans la bibliothèque de schémas
Mémorandum sur l'utilisation du python gremlin
Comment utiliser la bibliothèque C en Python
Comment utiliser Python Kivy ④ ~ Exécution sur Android ~
[Algorithm x Python] Comment utiliser la liste
python3: Comment utiliser la bouteille (2)
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser le décorateur
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Comment utiliser Raspeye Relay Module Python
[Python] Comment utiliser la bibliothèque de création de graphes Altair
[Introduction à Udemy Python3 + Application] 27. Comment utiliser le dictionnaire
Autoencoder dans Chainer (Remarques sur l'utilisation de + trainer)
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
Comment utiliser Django avec Google App Engine / Python
Comment utiliser le modèle appris dans Lobe en Python
Comment profiter de Python sur Android !! Programmation en déplacement !!
[2015/11/19] Comment enregistrer un service localement à l'aide du SDK python avec naoqi os
Python: comment utiliser async avec
Comment utiliser la fonction zip
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
[Python] Comment utiliser la série Pandas
Comment utiliser Dataiku sous Windows
Comment utiliser la méthode __call__ dans la classe Python
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
Comment obtenir la version Python
Comment déployer Pybot, le manuel Python le plus simple, sur Heroku
Comment utiliser l'homebrew dans Debian
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Je ne savais pas comment utiliser l'instruction [python] for
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Remarques sur l'utilisation de StatsModels qui peuvent utiliser la régression linéaire et GLM en python
Comment utiliser la fonction zip de python
Sakura utilisant Python sur Internet
Comment utiliser le module ConfigParser
Remarques sur la rédaction de requirements.txt
[Python] Comment utiliser l'API Typetalk
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
Comment modifier le niveau de journalisation d'Azure SDK pour Python
Pour utiliser python, mettez pyenv sur macOS avec PyCall