Brownie FundMe Smart Contract wird mit Python auf der ETH bereitgestellt

0

Dieser Artikel befasst sich mit dem Brownie FundMe-Smart-Vertrag und erläutert, wie er mithilfe des Web3-Moduls und Python in einem Ethereum-Netzwerk bereitgestellt wird.

Eines der wichtigsten Wertversprechen von Web3.0-Produkten ist die Dezentralisierung von Zahlungen durch die Zentralbank mithilfe von Kryptowährung und Blockchain. Der Wert ist einigermaßen vorstellbar, da Sie über Ihr eigenes entwickeltes Crypto-Zahlungsgateway Geld senden oder empfangen können. Darüber hinaus ist es unwahrscheinlich, dass das traditionelle Bankensystem alle Transaktionen direkt erfasst. Das impliziert in der Tat eine ganze Menge im Hinblick auf das Unternehmensvermögen und die Finanzgeschäfte.

In diesem Artikel werde ich einen Brownie FundMe-Smart-Vertrag vorstellen und erläutern, wie man ihn in einem Ethereum-Netzwerk bereitstellt.

Zutat zur Bereitstellung eines Brownie FundMe Smart Contract auf Ethereum mit Python und Web3

Python3, Brownie, Solidity, ChainLink

Inhaltsverzeichnis

Fügen Sie einen Brownie FundMe Smart Contract .sol hinzu

Als Erstes erstellen wir einen Smart Contract, der das Senden oder Empfangen von Geldern verarbeiten und im Rahmen des neuen Brownie-Projekts hinzufügen kann. Es gab bereits einen von uns entwickelten Smart Contract. Wenn Sie daran interessiert sind, abonnieren Sie bitte den Easy2Digital-Newsletter, indem Sie eine Nachricht „Brownie FundMe Smart Contract Script“ hinterlassen. Wir senden Ihnen dann so schnell wie möglich zu.

Kontaktiere uns

Stellen Sie über .yaml eine Verbindung zu einem Drittanbieter-Repository her

Externe Repository-Quellen und Datenfeeds von Drittanbietern können von Brownie nicht gelesen werden, wenn Sie sie einfach zum Smart Contract hinzufügen. Hier sind die für die Verbindung mit externen Quellen hinzugefügten Komponenten wie folgt:

1. Erstellen Sie eine brownie-config.YAML und fügen Sie Abhängigkeiten hinzu – Organisation und Version

Als Erstes müssen wir eine Konfigurations-YAML-Datei im Stammverzeichnis hinzufügen. Diese Datei teilt Brownies nämlich mit, dass einige interne oder externe Quellen verbunden werden müssen. In unserem Fall verwenden wir Chainlink.

Bitte überprüfen Sie unbedingt die aktuelle Nummer des Brownie-Smart-Vertrags, die hier 0.5.1 lautet. Das liegt daran, dass es Brownies sagt, mit welcher Version wir uns verbinden. Für weitere Details führen Sie einfach eine Suche in Google durch und es wird angezeigt. Hier ist also das Codebeispiel in der YAML-Datei wie folgt unter Verwendung von Abhängigkeiten:

Dependencies:

smartcontractkit/chainlink-brownie-contracts@0.5.1

2. Compiler, solc, remapping

Nachdem wir das Ziel eingerichtet haben, müssen wir Brownie mitteilen, welches Modul wir der externen Quelle zuordnen möchten. Wie Sie in unserem fertigen Brownie FundMe .sol sehen können, verwenden wir @chainlink im Modulimportabschnitt

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

Hier sind also die folgenden Codes für die Zuordnung zur externen Quelle mithilfe von ompiler, solc and remappings

compiler:

solc:

remappings:

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

Bitte überprüfen Sie unbedingt die Version der externen Quelle, ob diese mit der Version übereinstimmt oder im Geltungsbereich der Version liegt, die Sie im Smart Contract verwenden. Beispielsweise importieren wir die V8-Version der Schnittstelle und der Soliditätsversionsbereich sollte V8 wie folgt abdecken:

pragma solidity >=0.6.0 <0.9.0;

3. Brownie-Kompilierung

Sobald die Dinge, wie bereits erwähnt, abgeschlossen sind, können wir „Brownie Compile“ eingeben und es zeigt an, dass das Projekt kompiliert wurde. Dann können Sie sehen, dass im Vertragsordner eine neue JSON-Datei hinzugefügt wurde.

Brownie Fundme

Brownie Fundme

Erstellen Sie eine get_account-Funktion mit einem eigenständigen Python-Skript

Im vorherigen Kapitel zu Infura und Metamask haben wir eine get_account-Funktion im Python-Bereitstellungsskript erstellt. Diese Funktion wird verwendet, um das spezifische Kryptowährungskonto zu erhalten, mit dem Sie mit Ihrem Smart Contract interagieren möchten. Neben einem allgemeinen funktionalen Python-Importansatz bietet Brownie auch einen Skriptordner, in dem jeder benötigte Skripte hinzufügen kann. Diese Skripte können auch miteinander verbunden werden.

Hier sind die Codes des Funktionsskripts get_account , das mit dem identisch ist, das für die Verbindung mit der Ganache-CLI verwendet wird.

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"])

Sobald das Skript erstellt und im Skriptordner gespeichert ist, können wir die Funktion wie folgt in das Bereitstellungsskript importieren:

Brownie Fundme

Wie im obigen Code hervorgehoben, lesen Sie bitte den vorherigen Artikel wie folgt, wenn Sie Fragen zum Erstellen und Hinzufügen wallets, from_key, and .env haben. Sie werden verwendet, um im abgesicherten Modus eine Verbindung zu Ihrem echten Wallet herzustellen.

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

Oder Sie gehen bis zum Ende dieses Artikels und abonnieren den Easy2Digital-Newsletter für das vollständige Skript.

Zu guter Letzt fügen Sie bitte unbedingt ein Python-Skript mit dem folgenden Namen hinzu. Es teilt Python mit, dass es Module miteinander importieren kann.

__init__.py

Überprüfen Sie Ihren Smart Contract auf dem Etherscan

Wenn wir überprüfen möchten, ob unsere FundMe-Smart-Contract-Verifizierung im Ethereum-Netzwerk gültig ist (Hinweis**). Bitte stellen Sie sicher, dass Sie die Einstellungen bereitstellen, die mit denen unserer Skripte identisch sind. Es sind einige Schritte erforderlich:

Schritt 1: Erstellen Sie ein Etherscan-Konto und erhalten Sie den API-Schlüssel

Gehen Sie zu etherscan.io und registrieren Sie sich für ein kostenloses Konto. Jedes Konto verfügt über 5 kostenlose API-Schlüssel. Nachdem Sie sich angemeldet haben, kopieren Sie es bitte vorab, dann können Sie es gleich nutzen.

Schritt 2: Fügen Sie den API-Schlüssel mit ETHERSCAN_TOKEN in .env hinzu

Neben der Einrichtung Ihres privaten Schlüssels würden wir auch den Etherscan-Schlüssel auf .env setzen. Hier ist also der Code, den Sie wie folgt zur .env file hinzufügen

export ETHERSCAN_TOKEN = your etherscan api key

Schritt 3: Führen Sie das Brownie-Skript aus und überprüfen Sie die Überprüfung auf Etherscan, nachdem die Überprüfung erfolgt ist

Zum Schluss führen Sie bitte das Skript erneut in Ihrem Terminal aus. Sobald Ihr Smart-Vertrag erfolgreich in das Etherscan-Netzwerk hochgeladen wurde, wird „Pass“ und „Verifiziert“ angezeigt.

Fügen Sie Parameter im Konstruktor im FundMe Smart Contract hinzu

Beim Senden oder Empfangen von Geldern werden unbedingt der Echtzeit-Wechselkurs sowie die Adresse des Geldgebers und des Absenders angezeigt. Bevor wir Funktionen für diese Funktion bereitstellen, müssen wir daher den Preis-Feed-Parameter im Konstruktor festlegen, nämlich address und _priceFeed . Hier ist das aktualisierte Konstruktorcodebeispiel im FundMe-Smart-Vertrag wie folgt:

constructor(address _priceFeed) public {

priceFeed = AggregatorV3Interface(_priceFeed);

owner = msg.sender;

}

Stellen Sie Mocks bereit

Wenn wir uns nur im Goerli-Blockchain-Netzwerk befinden, müssen wir lediglich eine assoziierte Adresse verwenden. Aber wie kommt es, dass wir gerne entweder oder oder Multip-Netzwerke einrichten, die Testnetzwerke und reale Netzwerke umfassen? In diesem Fall müssen wir Mocks bereitstellen.

Schritt 1: Fügen Sie den Netzwerkdatensatz, der die ETH enthält, zum Zielwährungspreis-Feed hinzu

Um die verschiedenen Netzwerkdatensätze abzurufen, müssen wir den Netzwerkdatensatz in .yaml konvertieren. Hier ist der Code:

networks:

goerli:

eth_usd_price_feed: '0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e'

verify: True

Chainlink bietet Echtzeit-Wechselkursdaten-Feeds. Gehen Sie daher bitte zu data.chain.link, kopieren Sie den ETH-Preis-Gebührenschlüssel im Vergleich zur Zielwährung des Blockchain-Netzwerks und fügen Sie ihn in .yaml ein

Schritt 2: Aktualisieren Sie deploy.py , indem Sie den Netzwerkpreis-Feed dynamisch abrufen

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

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

)]["eth_usd_price_feed"]

Schritt 3: Mocks bereitstellen

Als Erstes müssen wir einen Testordner und einen simulierten .sol-Vertrag unter dem Testordner hinzufügen. Für diesen simulierten Smart-Vertrag abonnieren Sie bitte den Easy2Digital-Newsletter, indem Sie Web3-Tutorial 4 verlassen. Wir senden Ihnen so schnell wie möglich zu.

Nach der erneuten Kompilierung fügen wir dann in der YAML-Datei ein weiteres Netzwerk namens „Development“ hinzu und die Überprüfung sollte „False“ sein, da es sich um lokale Testpreis-Feed-Daten handelt.

development:

verify: False

Zusätzlich zum Import von FundMe müssen wir auch MockV3Aggregator importieren und Code in den Abschnitt „else“ schreiben, was bedeutet, dass es sich um einen Entwicklungsmodus handelt.

from brownie import FundMe, MockV3Aggregator, network, config

else:

deploy_mocks()

price_feed_address = MockV3Aggregator[-1].address

Hier erstellen wir eine Funktion „deploy_mock()“ im get_account-Skript, die einen Mock-Vertrag verwendet, wenn es sich um einen Entwicklungsmodus handelt, wie folgt:

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()}

Fügen Sie ein neues Netzwerk hinzu

Zusätzlich zum bestehenden Netzwerk, das Brownie bereitstellt, können wir ein neues Netzwerk hinzufügen, das beispielsweise zu Testzwecken benötigt wird.

Hier ist ein Beispiel für das Hinzufügen eines Ganache-lokalen Netzwerks im Terminal:

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

Standardmäßig verwendet Brownie den Entwicklungsmodus Netzwerk. Da nun ein weiteres lokales Netzwerk hinzugefügt wurde, müssen wir die Variablen aktualisieren, um die Ausführung zu rechtfertigen

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

Einzahlen und abheben

Unter dem Skriptordner erstellen wir ein Fonds- und Auszahlungsskript. Hier sind die Funktionen wie folgt:

Fonds:

def fund():
fund_me = FundMe[-1]
Konto = get_account()
Entrance_fee = fund_me.getEntranceFee()
print(entry_fee)
print(f“Der aktuelle Eintrittspreis beträgt {entrance_fee}“)
print(“Finanzierung”)
fund_me.fund({„von“: Konto, „Wert“: Eintrittsgebühr})
Zurückziehen:
auf jeden Fall zurückziehen():
fund_me = FundMe[-1]
Konto = get_account()
fund_me.withdraw({“von”: Konto})
Ergebnisse:

Vollständiges Python-Skript des Brownie FundMe-Smart-Vertrags

Wenn Sie an Brownie FundMe Smart Contract interessiert sind, der auf Ethereum mit Python und Web3 bereitgestellt wird, Bitte abonnieren Sie unseren Newsletter , indem Sie die Nachricht „Web3.0 Tutorial 4“ hinzufügen. . Wir senden Ihnen das Skript umgehend in Ihr Postfach.

Ich wünsche Ihnen viel Spaß beim Lesen von Brownie FundMe Smart Contract, bereitgestellt auf Ethereum mit Python und Web3. Wenn ja, unterstützen Sie uns bitte, indem Sie eine der unten aufgeführten Maßnahmen ergreifen, da dies unserem Kanal immer weiterhilft.

  • Unterstützen Sie meinen Kanal und spenden Sie über PayPal ( paypal.me/Easy2digital )
  • Abonnieren Sie meinen Kanal und aktivieren Sie die Benachrichtigungsglocke des Easy2Digital-Youtube-Kanals .
  • Folgen und liken Sie meine Easy2Digital-Facebook-Seite
  • Teilen Sie den Artikel in Ihrem sozialen Netzwerk mit dem Hashtag #easy2digital
  • Sie melden sich für unseren wöchentlichen Newsletter an, um die neuesten Artikel, Videos und Rabattcodes von Easy2Digital zu erhalten
  • Abonnieren Sie unsere monatliche Mitgliedschaft über Patreon, um exklusive Vorteile zu genießen ( www.patreon.com/louisludigital )

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert