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 )