Verwenden des Python SDK von Hyperledger Iroha, ・ Erstellen eines Assets ・ Asset senden ・ Erfassung von Blockinformationen Ich werde versuchen.
・ Die Umgebung kann gemäß dem offiziellen Leitfaden von iroha konstruiert werden. ・ Umgebung, die Python3 verwenden kann
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.
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"
}
]
}
}
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"
}
]
}
}
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.
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