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
- Instala Solcx y Jsonify tu archivo Solidity
- Código de bytes y ABI
- Instale el módulo Web3 y conéctese a Ganache
- Ocultar la clave privada de la billetera de criptomonedas
- Cree un contrato inteligente en la cadena de bloques de Ethereum
- Activar funciones de transacción: crear, firmar, enviar y confirmar una transacción
- Agregar valor específico y actualizar el contrato
- Script Python completo de Web3 Smart Contract Conexión a Ganache
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"
.gitinore
en la misma carpeta tambiénos, dotenv
y usar el método getenv()
para llamar a la variable en el archivo envimport 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)
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.
- Apoye y done a mi canal a través de PayPal ( paypal.me/Easy2digital )
- Suscríbete a mi canal y activa la campana de notificaciones del canal de Youtube Easy2Digital .
- Sigue y dale me gusta a mi página Página de Facebook de Easy2Digital
- Comparte el artículo en tu red social con el hashtag #easy2digital
- Te registras en nuestro boletín semanal para recibir los últimos artículos, vídeos y códigos de descuento de Easy2Digital.
- Suscríbase a nuestra membresía mensual a través de Patreon para disfrutar de beneficios exclusivos ( www.patreon.com/louisludigital )