Contrato inteligente Brownie FundMe implementado en ETH usando Python

Este artículo trata sobre el contrato inteligente Brownie FundMe y comparte cómo implementarlo en una red Ethereum utilizando el módulo Web3 y Python.

Una de las principales propuestas de valor del producto Web3.0 es la descentralización de los pagos del banco central utilizando Criptomonedas y Blockchain. El valor es imaginable porque puede enviar o recibir dinero utilizando su propia pasarela de pago Crypto desarrollada. Además, es poco probable que el sistema bancario tradicional registre todas las transacciones de forma directa. Eso implica mucho, de hecho, en términos de activos comerciales y operaciones financieras.

En este artículo, compartiré un contrato inteligente Brownie FundMe y explicaré cómo implementarlo en una red Ethereum.

Ingrediente para implementar un contrato inteligente Brownie FundMe en Ethereum usando Python y Web3

Python3, Brownie, Solidez, ChainLink

Tabla de contenido

Agregue un contrato inteligente Brownie FundMe .sol

Lo primero es lo primero, creamos un contrato inteligente que puede procesar el envío o la recepción de fondos y agregarlos en el nuevo proyecto Brownie. Ha habido un contrato inteligente desarrollado por nosotros antes. Si está interesado, suscríbase al boletín de Easy2Digital dejando un mensaje "Script de contrato inteligente Brownie FundMe" y se lo enviaremos lo antes posible.

Contáctenos

Conéctese con un repositorio de terceros usando .yaml

Brownie no puede leer las fuentes de datos y fuentes de repositorios externos de terceros si solo los agrega al contrato inteligente. Estos son los componentes agregados para conectarse con fuentes externas de la siguiente manera:

1. Cree un brownie-config.YAML y agregue dependencias: organización y versión

Lo primero es lo primero, debemos agregar un archivo YAML de configuración en el directorio raíz. Es decir, este archivo le dice a Brownies que hay algunas fuentes internas o externas para conectarse. En nuestro caso, usamos Chainlink.

Asegúrese de verificar el último número del contrato inteligente brownie, que aquí es 0.5.1. Es porque les dice a los brownies a qué versión nos estamos conectando. Para más detalles, solo haz una búsqueda en Google y aparecerá. Así que aquí está el ejemplo de código en el archivo YAML de la siguiente manera usando dependencias:

Dependencies:

smartcontractkit/chainlink-brownie-contracts@0.5.1

2. Compiler, solc, remapping

Después de haber configurado el destino, debemos decirle a Brownie qué módulo queremos mapear con la fuente externa. Como puede ver en nuestro Brownie FundMe .sol completo, usamos @chainlink en la sección de importación del módulo

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

Así que aquí están los códigos de la siguiente manera para mapear con la fuente externa usando ompiler, solc and remappings

compiler:

solc:

remappings:

- '@chainlink=smartcontractkit/chainlink-brownie-contracts@0.5.1'

Asegúrese de verificar la versión de la fuente externa si coincide con la versión o está dentro del alcance de la versión que está utilizando en el contrato inteligente. Por ejemplo, estamos importando la versión V8 de la interfaz y el rango de versiones de Solidity debería cubrir V8 de la siguiente manera:

pragma solidity >=0.6.0 <0.9.0;

3. Compilación de brownie

Una vez que las cosas se completan como se mencionó anteriormente, podemos ingresar compilación de brownie y muestra que el proyecto ha sido compilado. Luego, puede ver que se agregó un nuevo archivo JSON en la carpeta de contratos.

Cree una función get_account utilizando un script de Python independiente

En el capítulo anterior sobre Infura y Metamask, creamos una función get_account en el script de implementación de Python. Esta función se utiliza para obtener la cuenta de criptomoneda específica que desea para interactuar con su contrato inteligente. Además de un enfoque general de importación funcional de Python, Brownie también proporciona una carpeta de secuencias de comandos para que cualquiera pueda agregar las secuencias de comandos necesarias. Estos scripts también se pueden conectar entre sí.

Estos son los códigos del script de la función get_account , que es el mismo que se usa para conectarse con la CLI de Ganache.

from brownie import network, config, accounts

def get_account():

if network.show_active() == "development":

return accounts[0]

else:

return accounts.add(config["wallets"]["from_key"])

Una vez que la secuencia de comandos se crea y se guarda en la carpeta de la secuencia de comandos, podemos importar la función en la secuencia de comandos de implementación de la siguiente manera:

Como se destaca en el código anterior, consulte el artículo anterior a continuación si tiene alguna pregunta sobre cómo crear y agregar wallets, from_key, and .env . Se utilizan para conectarse con su billetera real en un modo seguro.

https://www.easy2digital.com/web3/brownie-web3-develop-ethereum-smart-contracts-interacting-with-cryptocurrency-network-using-brownie-and-python/#4

O puede ir hasta el final de este artículo y suscribirse al boletín de Easy2Digital para obtener el guión completo.

Por último, pero no menos importante, asegúrese de agregar un script de Python con el siguiente nombre. Le dice a Python que puede importar módulos entre sí.

__init__.py

Verifique su contrato inteligente en el Etherscan

Si queremos verificar si nuestra verificación de contrato inteligente FundMe es válida en la red Ethereum (Nota**. Asegúrese de implementar la configuración que es la misma que nuestras secuencias de comandos, hay algunos pasos necesarios de la siguiente manera:

Paso 1: cree una cuenta de Etherscan y obtenga la clave API

Vaya a etherscan.io y regístrese para obtener una cuenta gratuita. Cada cuenta tiene 5 claves API gratuitas. Después de haberte registrado, por favor cópialo con anticipación y lo usarás en un momento.

Paso 2: Agregue la clave API usando ETERSCAN_TOKEN en .env

Además de configurar su clave privada, también colocaríamos la clave Etherscan en .env. Por lo tanto, aquí está el código de la siguiente manera que agrega al .env file

export ETHERSCAN_TOKEN = your etherscan api key

Paso 3: Ejecute el script Brownie y verifique la verificación en Etherscan después de que ocurra la verificación

Por último, vuelva a ejecutar el script en su terminal y verá pasar y verificar una vez que su contrato inteligente se cargue correctamente en la red Etherscan.

Agregar parámetros en el constructor en el contrato inteligente de FundMe

Enviar o recibir fondos muestra necesariamente el tipo de cambio de moneda en tiempo real y la dirección del financiador y del remitente. Por lo tanto, antes de implementar funciones para esta función, debemos establecer el parámetro de fuente de precios en el constructor, que es address y _priceFeed . Aquí está el ejemplo de código de constructor actualizado en el contrato inteligente FundMe de la siguiente manera:

constructor(address _priceFeed) public {

priceFeed = AggregatorV3Interface(_priceFeed);

owner = msg.sender;

}

Implementar simulacros

Si solo estamos en la red blockchain de goerli, es solo para que usemos una dirección asociada. Pero, ¿cómo es que nos gusta configurar redes múltiples que incluyen redes de prueba y redes reales? En este caso, necesitamos implementar simulacros.

Paso 1: agregue el conjunto de datos de red que incluye el ETH al feed de precios de la moneda de destino

Para obtener los diferentes conjuntos de datos de red, necesitamos el conjunto de datos de red en .yaml. Aquí está el código:

networks:

goerli:

eth_usd_price_feed: '0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e'

verify: True

Chainlink proporciona una fuente de datos de tasa de cambio en tiempo real, así que vaya a data.chain.link y copie, y pegue la clave de tarifa de ETH vs precio de moneda objetivo de la red blockchain en .yaml

Paso 2: actualice deploy.py con la obtención dinámica del feed de precios de la red

if network.show_active() != "development":

price_feed_address = config["networks"][network.show_active(

)]["eth_usd_price_feed"]

Paso 3: implementar simulacros

Lo primero es lo primero, debemos agregar una carpeta de prueba y un contrato .sol simulado debajo de la carpeta de prueba. Para este contrato inteligente simulado, suscríbase al boletín Easy2Digital dejando el tutorial web3 4, se lo enviaremos lo antes posible.

Luego, después de haber compilado nuevamente, en el archivo YAML, agregaremos una red más llamada desarrollo y la verificación debe ser Falso porque es una fuente de datos de precios de prueba local.

development:

verify: False

Además, además de importar FundMe, necesitamos importar MockV3Aggregator y escribir código en la sección else, lo que significa que es un modo de desarrollo.

from brownie import FundMe, MockV3Aggregator, network, config

else:

deploy_mocks()

price_feed_address = MockV3Aggregator[-1].address

Aquí creamos una función deployment_mock() en el script get_account, que usa un contrato simulado si es un modo de desarrollo de la siguiente manera:

DECIMALS = 8

STARTING_PRICE = 2000000000000000

def deploy_mocks():

print(f"The active network is {network.show_active()}")

print("Deploying Mocks......")

if len(MockV3Aggregator) <= 0:

mock_aggregator = MockV3Aggregator.deploy(

DECIMALS, STARTING_PRICE, {

"from": get_account()}

Agregar una nueva red

Además de la red existente que proporciona Brownie, podemos agregar una nueva red necesaria, por ejemplo, con fines de prueba.

Aquí hay una muestra de cómo agregar una red ganache-local en la terminal:

brownie networks add Ethereum ganache-local host=http://address chainid=yours

Por defecto, Brownie usa la red de modo de desarrollo. Como ahora se agregó una red local más, necesitamos actualizar las variables para justificar la ejecución.

LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["development", "ganache-local"]

Financiar y retirar

En la carpeta del script, creamos un fondo y retiramos el script. Aquí están las funciones de la siguiente manera:

Fondo:

fondo de definición ():
fund_me = FundMe[-1]
cuenta = obtener_cuenta()
entrada_cuota = fund_me.getEntranceFee()
imprimir (entrada_tarifa)
print(f”La tarifa de entrada actual es {entrance_fee}”)
imprimir ("Financiamiento")
fund_me.fund({"de": cuenta, "valor": entrada_cuota})
Retirar:
definitivamente retirar():
fund_me = FundMe[-1]
cuenta = obtener_cuenta()
fund_me.retirar({“de”: cuenta})
Resultados:

Script Python completo del contrato inteligente Brownie FundMe

Si está interesado en el contrato inteligente Brownie FundMe implementado en Ethereum usando Python y Web3, suscríbase a nuestro boletín de noticias agregando el mensaje "Web3.0 tutorial 4" . Le enviaremos el guión inmediatamente a su buzón.

Espero que disfrute leyendo Brownie FundMe Smart Contract Deployed on Ethereum usando Python y Web3. Si lo hiciste, apóyanos haciendo una de las cosas que se enumeran a continuación, porque siempre ayuda a nuestro canal.

  • Apoya y dona a mi canal a través de PayPal ( paypal.me/Easy2digital )
  • Suscríbete a mi canal y activa la campanita de notificaciones Easy2Digital Youtube channel .
  • Sigue y dale me gusta a mi página Easy2Digital Facebook page
  • Comparte el artículo en tu red social con el hashtag #easy2digital
  • Te suscribes a nuestro boletín semanal para recibir los últimos artículos, videos 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 )