Python을 사용하여 ETH에 배포된 Brownie FundMe 스마트 계약

이 기사는 Brownie FundMe 스마트 계약에 관한 것이며 Web3 모듈과 Python을 사용하여 Ethereum 네트워크에 배포하는 방법을 공유합니다.

주요 Web3.0 제품 가치 제안 중 하나는 암호화폐와 블록체인을 사용하는 중앙 은행의 지불 분산화입니다. 자체 개발한 Crypto 지불 게이트웨이를 사용하여 돈을 주고받을 수 있기 때문에 그 가치는 상상할 수 있습니다. 게다가 전통적인 은행 시스템은 모든 거래를 직접적으로 기록할 가능성이 없습니다. 이는 실제로 비즈니스 자산 및 재무 운영 측면에서 상당히 많은 것을 의미합니다.

이 기사에서는 Brownie FundMe 스마트 계약을 공유하고 Ethereum 네트워크에 배포하는 방법을 살펴보겠습니다.

Python 및 Web3를 사용하여 Ethereum에 Brownie FundMe 스마트 계약을 배포하기 위한 요소

Python3, 브라우니, 솔리디티, 체인링크

목차

브라우니 FundMe 스마트 계약 .sol 추가

먼저 자금 송금 또는 수령을 처리할 수 있는 스마트 계약을 생성하고 새로운 브라우니 프로젝트에 추가합니다. 이전에 우리가 개발한 스마트 계약이 있었습니다. 관심있으신 분들은 "브라우니 펀드미 스마트 컨트랙트 스크립트"라는 글을 남겨서 Easy2Digital 뉴스레터를 구독해주시면 최대한 빨리 보내드리겠습니다.

문의하기

.yaml을 사용하여 타사 저장소와 연결

외부 제3자 리포지토리 소스 및 데이터 피드는 스마트 계약에 추가하기만 하면 Brownie에서 읽을 수 없습니다. 다음은 외부 소스와 연결하기 위해 추가된 구성 요소입니다.

1. brownie-config.YAML을 생성하고 종속성(조직 및 버전)을 추가합니다.

먼저 루트 디렉터리 아래에 구성 YAML 파일을 추가해야 합니다. 즉, 이 파일은 브라우니에게 연결할 내부 또는 외부 소스가 있음을 알려줍니다. 우리의 경우 Chainlink를 사용합니다.

브라우니 스마트 컨트랙트의 최신 번호인 0.5.1을 꼭 확인해주세요. 브라우니에게 우리가 연결할 버전을 알려주기 때문입니다. 자세한 내용은 구글에서 검색하시면 바로 나옵니다. 종속성을 사용하는 다음과 같은 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. 브라우니 컴파일

앞에서 언급한 대로 작업이 완료되면 브라우니 컴파일을 입력할 수 있으며 프로젝트가 컴파일되었음을 나타냅니다. 그러면 contracts 폴더 아래에 새 JSON 파일이 추가된 것을 볼 수 있습니다.

독립 실행형 Python 스크립트를 사용하여 get_account 함수 만들기

Infura 및 Metamask에 관한 이전 장에서 Python 배포 스크립트에 get_account 함수를 만들었습니다. 이 기능은 스마트 계약과 상호 작용하려는 특정 암호 화폐 계정을 얻는 데 사용됩니다. 일반적인 Python 기능 가져오기 접근 방식뿐만 아니라 Brownie는 누구나 필요한 스크립트를 추가할 수 있는 스크립트 폴더도 제공합니다. 이러한 스크립트는 서로 연결할 수도 있습니다.

다음은 Ganache CLI와 연결하는 데 사용되는 것과 동일한 get_account 함수 스크립트의 코드입니다.

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

스크립트가 생성되어 script 폴더 아래에 저장되면 다음과 같이 배포 스크립트에서 함수를 가져올 수 있습니다.

위의 코드에서 강조한 것처럼 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 Key 받기

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 블록체인 네트워크에만 있는 경우에는 어소시에이트 주소를 사용하기만 하면 됩니다. 그러나 테스트 네트워크와 실제 네트워크를 포함하는 or, 또는 multip 네트워크를 설정하는 것을 좋아하는 이유는 무엇입니까? 이 경우 모의 객체를 배포해야 합니다.

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라는 네트워크를 하나 더 추가하고 검증은 로컬 테스트 가격 피드 데이터이므로 False여야 합니다.

development:

verify: False

또한 FundMe를 가져올 뿐만 아니라 MockV3Aggregator를 가져와서 else 섹션에 코드를 작성해야 합니다. 이는 개발 모드임을 의미합니다.

from brownie import FundMe, MockV3Aggregator, network, config

else:

deploy_mocks()

price_feed_address = MockV3Aggregator[-1].address

여기에서 우리는 다음과 같이 개발 모드인 경우 Mock 계약을 사용하는 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는 개발 모드 네트워크를 사용합니다. 이제 로컬 네트워크가 하나 더 추가되었으므로 실행을 정당화하기 위해 변수를 업데이트해야 합니다.

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

자금 및 인출

스크립트 폴더 아래에 자금 및 출금 스크립트를 생성합니다. 다음과 같은 기능이 있습니다.

축적:

데프 펀드():
fund_me = FundMe[-1]
계정 = get_account()
entrance_fee = fund_me.getEntranceFee()
인쇄(입장료)
print(f"현재 입장료는 {entrance_fee}입니다.")
print("펀딩")
fund_me.fund({“from”: 계정, “value”: entrance_fee})
철회하다:
데프 인출():
fund_me = FundMe[-1]
계정 = get_account()
fund_me.withdraw({“에서”: 계정})
결과:

Brownie FundMe 스마트 계약의 전체 Python 스크립트

Python & Web3를 사용하여 Ethereum에 배포된 Brownie FundMe 스마트 계약에 관심이 있으시면, "Web3.0 tutorial 4"라는 메시지를 추가하여 뉴스레터를 구독 하십시오. . 귀하의 사서함으로 스크립트를 즉시 보내드립니다.

Python 및 Web3를 사용하여 Ethereum에 배포된 Brownie FundMe 스마트 계약을 즐겁게 읽으시기 바랍니다. 그렇다면 아래 나열된 항목 중 하나를 수행하여 지원해 주세요. 항상 채널에 도움이 되기 때문입니다.

  • PayPal( paypal.me/Easy2digital )을 통해 내 채널을 지원하고 기부하세요.
  • 제 채널 구독하시고 알림벨을 켜주세요 Easy2Digital 유튜브 채널 .
  • 내 페이지 팔로우 및 좋아요 Easy2Digital Facebook 페이지
  • #easy2digital 해시태그를 사용하여 소셜 네트워크에 기사를 공유하세요.
  • Easy2Digital 최신 기사, 비디오 및 할인 코드를 받으려면 주간 뉴스레터에 가입하십시오.
  • 독점적인 혜택을 누리려면 Patreon을 통해 월간 멤버십을 구독하세요( www.patreon.com/louisludigital ).