Conecte los contratos inteligentes de Web3 a la CLI de Ganache mediante Python

Cree un script de contrato inteligente Web3 que se conecte a Ganache CLI con el fin de desarrollar y probar DApp usando Python.

Para el desarrollo de contratos inteligentes Web3.0, las pruebas o UAT son uno de los procesos más importantes antes de que el contrato inteligente viva en la red Blockchain real. Por lo tanto, voy a explorar cómo desarrollar un script usando Python y Ganache y construir un contrato inteligente probando el entorno local.

Ingredientes para construir contratos inteligentes Web3 implementados en una cadena de bloques Ethereum visual local usando Ganache y Python

Python3, Ganache, Solcx, Solidez, Web3, Json, os, dotenv

Agenda

Smart Contract de Web3: instala Solcx y Jsonify en tu Solidity File

Lo primero es lo primero, el script requiere un lenguaje para implementar contratos inteligentes en plataformas blockchain, como el Ethereum más notable. Para el lenguaje, uso Solidity y compartiré más detalles en el próximo artículo.

En términos de Solidity, podemos usar Solcx para compilar el conjunto de datos del contrato inteligente en un entorno de desarrollo de Python. Herramienta de gestión de versión y envoltorio de Python para el compilador Solc Solidity.

Si desea tener el archivo Solidity easy2digital.sol para este artículo, suscríbase a nuestro boletín dejando un mensaje “Web3.0 + 1 Solidity y Ganache” . Le enviaremos lo antes posible.

Paso 1. Instale Solcx, abra y compile su archivo Solidity en el script Python

Tomemos como ejemplo a Mac. Aquí está la instalación de Solcx en la terminal de la siguiente manera:

pip install py-solc-x

Luego, necesitamos importar Solcx y un método requerido en el script de Python.

From solcx import compile_standard

With open(“./your solidity file name.sol”, “r”) as file:

Single_contract_file = file.read()

Por último, necesitamos usar el método compile_standard para compilar la información del archivo sol en una variable.

compiled_sol = compile_standard(

{

"language": "Solidity",

"sources": {"your file name.sol": {"content": ;single_contract_file}},

"settings": {

"outputSelection": {

"*": {"*": ["abi", "metadata", "evm.bytecode", "evm.sourceMap"]}

}

},

},

solc_version="0.8.7",

)

Paso 2. Jsonify el archivo compilado

Para que sea más conveniente recuperar los datos del archivo e interactuar con la red blockchain y las transacciones, podemos jsonificar los datos compilados en un formato de datos json. Aquí está el código de la siguiente manera:

with open("compiled_solCode.json", "w") as file:

json.dump(compiled_sol, file)

Contrato inteligente Web3: código de bytes y ABI

La información ABI y Bytecode son fundamentales para interactuar con la red blockchain de Ethereum y controlar la comunicación informática.

código de bytes

El código de bytes es la información que contiene instrucciones para la computadora en binario. Cada línea de código que se escribe se divide en códigos de operación para que la computadora sepa exactamente qué hacer al ejecutar nuestro código.

En el mundo Ethereum, el código de bytes es en realidad lo que se implementa en la cadena de bloques Ethereum. Cuando implementamos en una red Ethereum y confirmamos la transacción usando una billetera basada en navegador como Metamask, podemos ver el código de bytes que se implementa.

# Get Bytecode

Bytecode = compiled_sol['contracts']['easy2digital.sol']['SingleContract']["evm"]["bytecode"]["object"]

ITB

ABI es la interfaz binaria de la aplicación. Define los métodos y variables que están disponibles en un contrato inteligente y que podemos usar para interactuar con ese contrato inteligente. Dado que los contratos inteligentes se convierten en código de bytes antes de implementarse en la cadena de bloques, necesitamos una forma de saber qué operaciones e interacciones podemos iniciar con ellos.

Entonces necesitamos una forma estandarizada de expresar esas interfaces para que se pueda utilizar cualquier lenguaje de programación para interactuar con contratos inteligentes.

Su aplicación puede interactuar con un contrato inteligente utilizando cualquier lenguaje de codificación siempre que tenga la ABI para ese contrato inteligente y una biblioteca que lo ayude a comunicarse con cualquier nodo para brindarle un punto de entrada a la red Ethereum.

Aquí está el código para generar el valor ABI en easy2digital.sol de la siguiente manera:

# Get ABI

getABI = compiled_sol['contracts']['SimpleStorage.sol']['SimpleStorage']['abi']

Instale el módulo Web3 y conéctese a Ganache

Cuando Bytecode y ABI utilizados para recuperar los métodos y variables en el archivo cumplido con el contrato inteligente estén listos, es hora de instalar un módulo para la interacción con Ethereum. Se llama módulo Web3 en Python.

En la terminal, ingresamos este comando de la siguiente manera:

pip install web3

En el script de Python, ingrese el módulo usando el código también

from web3 import Web3

ganache

Luego, para desarrollar un entorno de prueba de contratos inteligentes Web3, necesitamos una cadena de bloques Ethereum visual en lugar de conectarnos a la real a través de Metamask. Entonces aquí necesitamos un software llamado Ganache.

Ganache facilita a los desarrolladores Web3 porque les proporciona una cadena de bloques Ethereum personal que puede usar para ejecutar pruebas, ejecutar comandos e inspeccionar el estado mientras controla cómo opera la cadena.

El método de instalación es súper fácil. Luego, puede abrir un Ethereum rápido y abrir el panel visual de la red ETH. En el panel, hay varios elementos que son necesarios para usar en el script de Python. Aquí está la lista de artículos de la siguiente manera:

  • URL HTTP
  • ID de cadena
  • La dirección visual de la billetera criptográfica
  • La clave privada de la billetera

Para la identificación de la cadena, Ganache a veces puede tener errores y es posible que su identificación única no funcione. Si le sucede este caso, intente con el ID de cadena 1337.

Luego, aquí están los códigos para usar el módulo Web3 que se conecta a Ganache.

w3 = Web3(Web3.HTTPProvider("your ganache HTTP URL"))

gasPrice = w3.eth.gas_price

chain_id = "your ganache chain id"

my_address = "select a key and copy and paste the address here"

Ocultar la clave privada de la billetera de criptomonedas

De hecho, Ganache simula un entorno que conecta su Web3 con una cadena de bloques real de Ethereum. Tome Metamask, por ejemplo, la dirección es igual a la dirección de la billetera real y la clave privada es la clave privada de la billetera real. Sin embargo, no desea divulgar su clave privada en el servidor porque es arriesgado perder todos sus fondos.

Entonces, en DApp o Web3, debemos ocultar la clave privada en el script de Python. Aquí usaríamos . env and gitignore.

Lo primero es lo primero, necesitamos crear un archivo.env y colocarlo en la misma carpeta que el script de Python.

Aquí está el código en el archivo env:

export PRIVATE_KEY="0x + your private key"
En segundo lugar, agregue un archivo .gitinore en la misma carpeta también
Por último, pero no menos importante, podemos importar os, dotenv y usar el método getenv() para llamar a la variable en el archivo env
import os
from dotenv import load_dotenv
private_key = os.getenv("PRIVATE_KEY")

Cree un contrato inteligente en la cadena de bloques de Ethereum

Como se mencionó anteriormente, hemos utilizado Solidity para escribir una lógica de contrato inteligente. Por lo tanto, la pregunta es cómo implementar esta lógica en la cadena de bloques. El módulo Web3 proporciona contract() y nos facilita completar el procedimiento.

singleContractA = w3.eth.contract(abi=getABI, bytecode=Bytecode)
Si desea generar el ID del recuento de transacciones, podemos usar getTransactionCount()
nonceA = w3.eth.getTransactionCount(my_address)

Activar funciones de transacción: crear, firmar, enviar y confirmar una transacción

El valor central de Web3.0 es el procesamiento descentralizado de transacciones y pagos. De ahora en adelante, siempre que tanto su empresa como sus clientes estén dispuestos a negociar utilizando criptomonedas, ambos no necesitarán pasar por el sistema bancario tradicional. ¡Eso implica y significa mucho!

Por lo tanto, una de las partes clave de la interacción con blockchain es crear un flujo de transacciones. No importa qué tipo de negocio o transacción realices habitualmente, básicamente existen cuatro pasos básicos, que son los siguientes:

# Build a transaction
transactionA = singleContractA.constructor().buildTransaction(
{"gasPrice": gasPrice, "chainId": int(chain_id), "from": my_address, "nonce": nonceA})
# Sign a transaction
signedTransaction = w3.eth.account.sign_transaction(
transactionA, private_key=private_key)
# Send a transaction
transactionHash = w3.eth.send_raw_transaction(signedTransaction.rawTransaction)
# Wait for the pending and confirmed transaction response
transactionReceipt = w3.eth.wait_for_transaction_receipt(transactionHash)

Agregar valor específico y actualizar el contrato

Además, también puede actualizar la transacción existente y agregar un valor específico.

singleContractB = w3.eth.contract(
address=transactionReceipt.contractAddress, abi=getABI)

print("Updating the contract.....")
contractTransaction = singleContractB.functions.store(75).buildTransaction(
{"gasPrice": gasPrice, "chainId": int(chain_id), "from": my_address, "nonce": nonceA + 1})
signedcontractTransaction = w3.eth.account.sign_transaction(
contractTransaction, private_key=private_key)
# Send the transaction
print("Deploying the contract.....")
sendcontractTransaction = w3.eth.send_raw_transaction(signedcontractTransaction.rawTransaction)
# Wait for the pending and confirmed transaction response
print("Deployed!!!")
transactionReceipt = w3.eth.wait_for_transaction_receipt(sendcontractTransaction)
print(singleContractB.functions.retrieve().call())

Script Python completo del contrato inteligente Web3 que se conecta a Ganache

Si está interesado en el tutorial 1 de Web3.0: Conecte contratos inteligentes Web3 a Ganache usando Python para desarrollar y probar DApp, suscríbase a nuestro boletín agregando el mensaje "Tutorial Web3.0 1" . Le enviaremos el script inmediatamente a su buzón de correo.

Espero que disfrute leyendo el tutorial 1 de Web3.0: Conecte contratos inteligentes Web3 a Ganache usando Python para desarrollar y probar DApp. Si lo hizo, apóyenos haciendo una de las cosas que se enumeran a continuación, porque siempre ayuda a nuestro canal.