À 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.
・ L'environnement peut être construit selon le guide officiel d'iroha. ・ Environnement pouvant utiliser Python3
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.
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"
}
]
}
}
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"
}
]
}
}
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.
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