Funciones para crear cuentas en la blockchain Hive + Python / Beem

in Aliento4 months ago

image.png


¡Hola, Hivers!

Desde hace un tiempo he experimentado con la creación de cuentas en la blockchain Hive, con todo este conocimiento he creado unas funciones básicas para crear cuentas de Hive que te puede ayudar para una app privada que quieras hacer.

Para aquellos que estén considerando integrar estas funciones en un frontend, una excelente opción es utilizar Flask, un microframework de Python. Esto te permitirá desarrollar tu propia API para la creación de cuentas en Hive.

Para desarrollar estas funciones he usado la librería de Python de Hive llamada Beem porque facilita muchas cosas. Beem es una herramienta que simplifica enormemente el trabajo, facilitando la interacción con la blockchain de Hive de una manera más intuitiva y menos compleja.

Es muy importante considerar que este código requiere ajuste de seguridad y verificaciones adicionales para que evites errores.

Ahora, hablemos de la experimentación práctica. Para probar este código, necesitarás una cuenta en Hive con suficientes recursos. Esto te permitirá experimentar de manera real. Pero, ¿qué pasa si no cuentas con estos recursos? No te preocupes, hay una solución para ello:

Al establecer una conexión con la blockchain de Hive, hay un aspecto fundamental que debes modificar para llevar a cabo pruebas sin registrar las transacciones en la blockchain.

Así que debemos cambiar lo siguiente:

hive = Hive(node=hived_nodes, nobroadcast=False, keys=[wif]) 

A esto:

hive = Hive(node=hived_nodes, nobroadcast=True, keys=[wif])

Ya que nobroadcast=True te permite probar sin que se registre la transacción en la blockchain.




Aquí el código de las funciones para crear cuentas

import random
import string
import getpass
import secrets
from beemgraphenebase.account import PasswordKey
from beem import Hive
from beem.account import Account
from beem.exceptions import AccountDoesNotExistsException
from pprint import pprint
from beem.instance import set_shared_blockchain_instance
from beem.transactionbuilder import TransactionBuilder
from beembase.operations import Custom_json

# Configuraciones Globales
hived_nodes = [
    'https://api.hive.blog',
    'https://api.deathwing.me',
    'https://anyx.io',
]

wif = "youractivekey"
hiveaccount = "lacuentaconlaquecrearascuentas"

hive = Hive(node=hived_nodes, nobroadcast=False, keys=[wif])
acc_creadora = Account(hiveaccount, blockchain_instance=hive)
set_shared_blockchain_instance(hive)


def generate_random_password(length=52):
    characters = string.ascii_letters + string.digits
    return 'P5' + ''.join(secrets.choice(characters) for i in range(length - 2))

def generate_keys(new_account_name, master_key, exclude_master=False):
    keys = {"master": master_key} if not exclude_master else {}
    for key_type in ['posting', 'active', 'owner', 'memo']:
        private_key = PasswordKey(new_account_name, master_key, key_type).get_private_key()
        keys[key_type] = {"public": str(private_key.pubkey), "private": str(private_key)}
    return keys

def keyscreate(create_acc):
    return generate_keys(create_acc, generate_random_password())

# Función Principal para Crear Cuenta
def create_acc(create_acc, keyscreate):

    activecreate = keyscreate['active']['public']
    ownercreate = keyscreate['owner']['public']
    postcreate = keyscreate['posting']['public']
    memocreate = keyscreate['memo']['public']

    op = hive.create_claimed_account(
        create_acc, 
        creator=acc_creadora, 
        owner_key=ownercreate, 
        active_key=activecreate, 
        memo_key=memocreate, 
        posting_key=postcreate, 
        combine_with_claim_account=False, 
        fee=False
    )
    return op



Para crear APIs vía Flask de Python

https://flask.palletsprojects.com/en/3.0.x/

Códigos de referencias:
https://github.com/fbslo/creator
https://github.com/ecency/create-account/blob/main/index.js


Si eres desarrollador y pruebas esas funciones y encuentras problemas de lógica.

También la forma de crear Master Key puede adaptarla a otras características para generarla de manera más segura.

Espero que te ayude un poco en tu proceso de experimentar con la blockchain Hive.

Nota: Estos son códigos de pruebas, no me responsabilizo por la perdida de activos de valor en el proceso. 

Sort:  

Excelente saber que hay otro Pythonista por ahí. Tip, se puede reemplazar getrandomkey por la seed bip35 al menos para la máster, cosa que la master se pueda guardar en 12 palabras:

from hdwallet import BIP44HDWallet
from hdwallet.cryptocurrencies import BitcoinMainnet as Cryptocurrency
from hdwallet.utils import generate_mnemonic, is_mnemonic

STRENGTH: int = 128
MNEMONIC: str ="Your 12 Mnemonics words"
PASSPHRASE: str = "Your passphrase"
LANGUAGE: str = "english" 

def generate_passwordForMaster(length:int =52,MNEMONIC: str):
    assert is_mnemonic(mnemonic=MNEMONIC, language=LANGUAGE)
    bip44_hdwallet: BIP44HDWallet = BIP44HDWallet(
        cryptocurrency=Cryptocurrency, account=0, change=False, address=0)
       
        return 'P5' + ''.join( bip44_hdwallet.private_key()[3:length+1])

master_key=generate_passwordForMaster(52,MNEMONIC)

El resto más o menos igual, cifrando las demás claves con la máster.

Si también puedes usar ecdsa, base58 y hashlib para construir una con estructura más criptográfica

Que tan seguro seria usar esto ?

¡Excelente publicación Enrique! Muchas gracias por explicarnos como crear cuentas usando Python y la librería Beem, está muy bien explicado y fácil de entender, sin duda, Python permite tener un código corto, legible y funcional,

Que rápido se crean las claves privadas, en pocas líneas

Gracias por compartirnos estos recursos

Saludos 😁