Python を使用して ETH にデプロイされた Brownie FundMe スマート コントラクト

この記事は Brownie FundMe スマート コントラクトに関するもので、Web3 モジュールと Python を使用してイーサリアム ネットワークにデプロイする方法を説明します。

Web3.0 製品の主な価値提案の 1 つは、暗号通貨とブロックチェーンを使用した中央銀行からの支払いの分散化です。独自に開発した暗号決済ゲートウェイを使用して送金または受け取りができるため、その価値は想像できるものです。さらに、従来の銀行システムでは、すべての取引を直接記録することはできません。これは実際、事業資産と財務運営の面で非常に多くのことを意味します。

この記事では、Brownie FundMe スマート コントラクトを共有し、それをイーサリアム ネットワークにデプロイする方法を説明します。

Python と Web3 を使用して Ethereum に Brownie FundMe スマート コントラクトをデプロイするためのコンポーネント

Python3、ブラウニー、Solidity、ChainLink

目次

Brownie FundMe スマート コントラクト .sol を追加する

まず最初に、資金の送受信を処理し、新しい Brownie プロジェクトに追加できるスマート コントラクトを作成します。以前にも当社が開発したスマートコントラクトがありました。ご興味がございましたら、「Brownie FundMe スマート契約スクリプト」というメッセージを残して Easy2Digital ニュースレターを購読してください。できるだけ早くお送りいたします。

お問い合わせ

.yaml を使用してサードパーティのリポジトリに接続する

外部サードパーティのリポジトリ ソースとデータ フィードは、スマート コントラクトに追加しただけでは Brownie で読み取ることができません。外部ソースと接続するために追加されたコンポーネントは次のとおりです。

1. Brownie-config.YAML を作成し、依存関係 (組織とバージョン) を追加します。

まず最初に、構成 YAML ファイルをルート ディレクトリに追加する必要があります。つまり、このファイルは、接続する内部または外部ソースがあることを Brownies に伝えます。私たちの場合は、Chainlink を使用します。

ブラウニー スマート コントラクトの最新番号 (ここでは 0.5.1) を必ず確認してください。これは、接続しているバージョンをブラウニーに伝えるためです。詳細については、Google で検索するとポップアップ表示されます。したがって、依存関係を使用した YAML ファイル内のコード サンプルは次のとおりです。

Dependencies:

smartcontractkit/chainlink-brownie-contracts@0.5.1

2. Compiler, solc, remapping

宛先を設定した後、外部ソースとマッピングするモジュールを Brownie に伝える必要があります。完成した Brownie FundMe .sol でわかるように、モジュールのインポート セクションで @chainlink を使用しています。

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

したがって、 ompiler, solc and remappingsを使用して外部ソースとマッピングするためのコードは次のとおりです。

compiler:

solc:

remappings:

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

外部ソースのバージョンが一致しているか、スマート コントラクトで使用しているバージョンの範囲内であるかを必ず確認してください。たとえば、インターフェイスの V8 バージョンをインポートしているため、Solidity バージョン範囲は次のように V8 をカバーする必要があります。

pragma solidity >=0.6.0 <0.9.0;

3. ブラウニーコンパイル

前述したように作業が完了したら、brownie COMPILE と入力すると、プロジェクトがコンパイルされたことが示されます。すると、contracts フォルダーの下に新しい JSON ファイルが追加されていることがわかります。

スタンドアロンの Python スクリプトを使用して get_account 関数を作成する

Infura と Metamask に関する前の章では、Python デプロイメント スクリプトに get_account 関数を作成しました。この関数は、スマート コントラクトとやり取りする特定の暗号通貨アカウントを取得するために使用されます。一般的な Python 関数インポート アプローチと同様に、Brownie は誰でも必要なスクリプトを追加できるスクリプト フォルダーも提供します。これらのスクリプトは相互に接続することもできます。

ここにあるget_account関数スクリプトのコードは、Ganache CLI に接続するために使用されるものと同じです。

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

スクリプトが作成され、スクリプト フォルダーに保存されたら、次のようにデプロイ スクリプトに関数をインポートできます。

上記のコードで強調表示されているように、 wallets, from_key, and .env作成および追加方法に関する質問がある場合は、次の以前の記事を確認してください。これらはセーフモードで実際のウォレットに接続するために使用されます。

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

または、この記事の最後まで進み、Easy2Digital ニュースレターを購読して全スクリプトをご覧ください。

最後になりましたが、次のような名前の Python スクリプトを必ず追加してください。これは、モジュールを相互にインポートできることを Python に伝えます。

__init__.py

Etherscan でスマート コントラクトを検証する

FundMe スマート コントラクトの検証がイーサリアム ネットワーク上で有効であるかどうかを確認したい場合 (注**。必ずスクリプトと同じ設定をデプロイしてください。次のようないくつかの手順が必要です。

ステップ 1: Etherscan アカウントを作成し、API キーを取得する

etherscan.io にアクセスし、無料アカウントにサインしてください。各アカウントには 5 つの無料 API キーがあります。サインアップ後、事前にコピーしておいてください。すぐに使用できます。

ステップ 2: .env の ETHERSCAN_TOKEN を使用して API キーを追加する

秘密キーを設定するだけでなく、Etherscan キーも .env に配置します。したがって、 .env fileに追加する次のコードは次のとおりです。

export ETHERSCAN_TOKEN = your etherscan api key

ステップ 3: Brownie スクリプトを実行し、検証が行われた後に Etherscan で検証を確認します。

最後に、ターミナルでスクリプトを再度実行してください。スマート コントラクトが Etherscan ネットワークに正常にアップロードされると、合格して検証されたことが表示されます。

FundMe スマート コントラクトのコンストラクターにパラメーターを追加する

資金の送受信には、必ずリアルタイムの為替レートと資金提供者および送金者の住所が表示されます。したがって、この機能の関数をデプロイする前に、コンストラクターで価格フィード パラメーター ( address_priceFeedを設定する必要があります。 FundMe スマート コントラクトの更新されたコンストラクター コード サンプルは次のとおりです。

constructor(address _priceFeed) public {

priceFeed = AggregatorV3Interface(_priceFeed);

owner = msg.sender;

}

モックのデプロイ

goerli ブロックチェーン ネットワーク上にのみいる場合は、アソシエイト アドレスを使用するだけです。しかし、テスト ネットワークと実際のネットワークを含むネットワークを 1 つまたは複数設定するのはなぜでしょうか?この場合、モックをデプロイする必要があります。

ステップ 1: ETH を含むネットワーク データセットをターゲット通貨価格フィードに追加する

さまざまなネットワーク データセットを取得するには、ネットワーク データセットを .yaml に保存する必要があります。コードは次のとおりです。

networks:

goerli:

eth_usd_price_feed: '0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e'

verify: True

Chainlink はリアルタイムの為替レート データ フィードを提供するため、data.chain.link に移動し、ブロックチェーン ネットワークの ETH 対ターゲット通貨価格手数料キーをコピーして .yaml に貼り付けてください。

ステップ 2: ネットワーク価格フィードを動的に取得してdeploy.pyを更新する

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

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

)]["eth_usd_price_feed"]

ステップ 3: モックをデプロイする

まず最初に、テスト フォルダーとそのテスト フォルダーの下にモック .sol コントラクトを追加する必要があります。この模擬スマート コントラクトについては、web3 チュートリアル 4 から離れて Easy2Digital ニュースレターを購読してください。できるだけ早くお送りします。

次に、再度コンパイルした後、YAML ファイルに、development という名前のネットワークをもう 1 つ追加します。これはローカルのテスト価格フィード データであるため、verify は False になるはずです。

development:

verify: False

さらに、FundMe をインポートするだけでなく、MockV3Aggregator をインポートし、else セクションにコードを記述する必要があります。これは、開発モードであることを意味します。

from brownie import FundMe, MockV3Aggregator, network, config

else:

deploy_mocks()

price_feed_address = MockV3Aggregator[-1].address

ここでは、get_account スクリプト内に関数deploy_mock() を作成します。この関数は、次のように開発モードの場合にモック コントラクトを使用します。

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

新しいネットワークを追加する

Brownie が提供する既存のネットワークとは別に、テスト目的などに必要な新しいネットワークを追加できます。

以下は、ターミナルに ganache-local ネットワークを追加するサンプルです。

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

デフォルトでは、Brownie は開発モード ネットワークを使用します。ローカル ネットワークがもう 1 つ追加されたため、実行を正当化するために変数を更新する必要があります。

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

入金と出金

スクリプト フォルダーの下に、資金と引き出しのスクリプトを作成します。ここでは次のような機能を紹介します。

基金:

def ファンド():
ファンドミー = ファンドミー[-1]
アカウント = get_account()
入場料 = Fund_me.getEntranceFee()
プリント(入場料)
print(f”現在の入場料は {entrance_fee}”)
print(「資金調達」)
Fund_me.fund({“from”: アカウント, “value”: 入場料})
撤回する:
defdraw():
ファンドミー = ファンドミー[-1]
アカウント = get_account()
Fund_me.withdraw({“from”: アカウント})
結果:

Brownie FundMe スマート コントラクトの完全な Python スクリプト

Python と Web3 を使用してイーサリアム上にデプロイされた Brownie FundMe スマート コントラクトに興味がある場合は、 「Web3.0 チュートリアル 4」というメッセージを追加してニュースレターを購読してください。 。スクリプトはすぐにあなたのメールボックスに送信されます。

Brownie FundMe スマート コントラクトを Python と Web3 を使用してイーサリアムにデプロイする をお読みいただければ幸いです。もしそうなら、以下にリストされているいずれかの方法で私たちをサポートしてください。それは常に私たちのチャンネルに役立ちます。

  • PayPal を通じて私のチャンネルをサポートし、寄付してください ( paypal.me/Easy2digital )
  • 私のチャンネルを購読し、 Easy2Digital Youtube チャンネルの通知ベルをオンにしてください。
  • Easy2Digital Facebook ページをフォローして「いいね!」してください
  • ハッシュタグ #easy2digital を付けて記事をソーシャル ネットワークで共有してください
  • Easy2Digital の最新記事、ビデオ、割引コードを受け取るには、毎週のニュースレターに登録してください。
  • Patreon を通じて月額メンバーシップに登録すると、限定特典をお楽しみいただけます ( www.patreon.com/louisludigital )

よくある質問:

Q1: ブラウニーファンドミーとは何ですか?

A: ブラウニーファンドミーは、オンラインで寄付を募るためのプラットフォームです。

Q2: どのように寄付を行えますか?

A: ブラウニーファンドミーでは、クレジットカードやPayPalを使用して寄付を行うことができます。

Q3: 寄付金はどのように利用されますか?

A: 寄付金は、寄付者が指定した受益者やプロジェクトに直接送られます。ブラウニーファンドミーは手数料を取らず、全額が受益者に届けられます。

Q4: 寄付金の返金は可能ですか?

A: 寄付金の返金は基本的には行われません。寄付者が返金を希望する場合は、直接受益者にお問い合わせください。

Q5: プロジェクトを作成するにはどうすればいいですか?

A: プロジェクトを作成するには、ブラウニーファンドミーのウェブサイトにアクセスし、アカウントを作成してください。その後、プロジェクトの詳細を入力し、寄付金を募ることができます。

Q6: プロジェクト作成には費用がかかりますか?

A: プロジェクト作成には費用はかかりません。ブラウニーファンドミーは無料で利用できます。

Q7: プロジェクトの成功率はどのくらいですか?

A: プロジェクトの成功率はプロジェクトによって異なります。成功するためには、魅力的なプロジェクトの提案と積極的な広報活動が重要です。

Q8: 寄付金は税金の控除対象ですか?

A: 寄付金が税金の控除対象となるかどうかは、地域や法律によって異なります。寄付者は税務相談などを行い、詳細を確認することをおすすめします。

Q9: 寄付金は匿名で行うことはできますか?

A: はい、ブラウニーファンドミーでは寄付を匿名で行うことができます。寄付者の個人情報は非公開になります。

Q10: 寄付金の受領証明書はもらえますか?

A: 寄付金の受領証明書は、受益者によって提供される場合があります。寄付者が受領証明書を希望する場合は、受益者に直接お問い合わせください。