Créez un compte à l'aide de la bibliothèque Python d'Hyperledger Iroha.
Installez les bibliothèques nécessaires pour créer une paire de clés de compte
pip install ed25519
C'est un code pour créer un compte immédiatement
from iroha import Iroha, IrohaCrypto, IrohaGrpc
import ed25519
import iroha_config
# Informations de connexion à iroha
net = IrohaGrpc(iroha_config.IROHA_HOST)
iroha = Iroha(iroha_config.ADMIN_ACCOUNT)
# Créer une paire de clés
signing_key, verifying_key = ed25519.create_keypair()
# Enregistrer la paire de clés créée
open("[email protected]","wb").write(signing_key.to_ascii(encoding="hex"))
open("[email protected]","wb").write(verifying_key.to_ascii(encoding="hex"))
# Conversion de binaire en hexadécimal
vkey_hex = verifying_key.to_ascii(encoding="hex")
# Créer une transaction
transfer_tx = iroha.transaction(
[iroha.command(
'CreateAccount',
account_name ='iroha',
domain_id = 'test',
public_key = vkey_hex
)]
)
# Signature de transaction
IrohaCrypto.sign_transaction(transfer_tx, iroha_config.ADMIN_PRIV_KEY)
# Envoyer la transaction
net.send_tx(transfer_tx)
# Vérifiez le résultat
for status in net.tx_status_stream(transfer_tx):
print(status)
Lorsque vous créez un compte en utilisant iroha-cli, les informations clés sont également créées, mais si vous créez un compte à partir de la bibliothèque, vous devez le créer vous-même. J'utilise une bibliothèque appelée "ed25519" pour le créer.
Si le résultat suivant est sorti, il réussit.
('ENOUGH_SIGNATURES_COLLECTED', 9, 0)
('STATEFUL_VALIDATION_SUCCESS', 3, 0)
('COMMITTED', 5, 0)
Je vérifierai également le contenu du bloc.
{
"blockV1": {
"payload": {
"transactions": [
{
"payload": {
"reducedPayload": {
"commands": [
{
"createAccount": {
"accountName": "iroha",
"domainId": "test",
"publicKey": "efdc215eab6dd2c4435d370da73e4b88350e1fed9d39afed503fcbee985fce1f"
}
}
],
"creatorAccountId": "admin@test",
"createdTime": "1594016319157",
"quorum": 1
}
},
"signatures": [
{
"publicKey": "313a07e6384776ed95447710d15e59148473ccfc052a681317a72a69f2a49910",
"signature": "429bf3ae70b60d31ab3fc3c15fa11cb8155b6a824f831652c1c46068feaeb866846b8048e0959cbcbeed532423f050e77d2fe192ea90d0827a6f1489bf67ec0a"
}
]
}
],
"height": "4",
"prevBlockHash": "039c70e4d990318c7373a59b14f39c9dd6199b949f1ba74b28c44d100adf8218",
"createdTime": "1594016319568"
},
"signatures": [
{
"publicKey": "bddd58404d1315e0eb27902c5d7c8eb0602c16238f005773df406bc191308929",
"signature": "e2a7dc68e837fc4bdefc2e7f60131661c9567f0f2b19af7e0069ced69a4054f7402fb93abd38e96aef850d865c760f3983632654db61fc0ab0181224e44fb20d"
}
]
}
}
J'ai pu confirmer que la transaction de la commande createAccount a été capturée dans le bloc.
Puisque le même nom d'utilisateur et le même domaine ne peuvent pas être enregistrés, si vous exécutez avec le même contenu, le résultat suivant sera obtenu et la transaction sera rejetée.
('ENOUGH_SIGNATURES_COLLECTED', 9, 0)
('STATEFUL_VALIDATION_FAILED', 2, 4)
('REJECTED', 4, 0)
{
"blockV1": {
"payload": {
"height": "5",
"prevBlockHash": "fe0c9b0e59efe7de5f67710ad66fdb5aab3f1e41b79bed8eda13f9c3d122d8cf",
"createdTime": "1594017524600",
"rejectedTransactionsHashes": [
"ef17d5f4e82c7e9690676110b3d84c9ff721fd2ac78678e1b893cf3c024c5156"
]
},
"signatures": [
{
"publicKey": "bddd58404d1315e0eb27902c5d7c8eb0602c16238f005773df406bc191308929",
"signature": "0ea48cca0b0db7ee525edafa961e6f2469989cbbb1346cc31e140a98b8260693ef939fe30bc9ef10a5ab4d0a6e7ffeccc1cc15124cb472be1d4f658b5aac1b0d"
}
]
}
}
from iroha import Iroha, IrohaCrypto, IrohaGrpc
import iroha_config
net = IrohaGrpc(iroha_config.IROHA_HOST)
iroha = Iroha(iroha_config.ADMIN_ACCOUNT)
admin_priv_key = iroha_config.ADMIN_PRIV_KEY
# Créer une requête
get_block_query = iroha.query(
'GetAccount',
account_id = 'iroha@test'
)
# 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)
La méthode d'acquisition des informations de compte est fondamentalement la même que l'envoi d'une transaction. Le contenu de la transmission n'est qu'une requête, pas une commande
account_response {
account {
account_id: "iroha@test"
domain_id: "test"
quorum: 1
json_data: "{}"
}
account_roles: "user"
}
query_hash: "a07e90ca85d9c4f0bd1b12ba8cd9c11886729fcd50ee4c2fc50e6c9a27047a2e"
J'ai pu obtenir le résultat de l'exécution
・ Référence API Iroha # create-account
・ Référence API Iroha # get-account
[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
Recommended Posts