Python을 사용하여 Web3 스마트 계약을 Ganache CLI에 연결

Python을 사용하여 DApp을 개발하고 테스트하기 위해 Ganache CLI에 연결하는 Web3 스마트 계약 스크립트를 빌드합니다.

Web3.0 스마트 계약 개발의 경우 테스트 또는 UAT는 스마트 계약이 실제 블록체인 네트워크에 적용되기 전 가장 중요한 프로세스 중 하나입니다. 그래서 Python과 Ganache를 이용하여 스크립트를 개발하는 방법과 로컬 환경을 테스트하는 스마트 컨트랙트를 구축하는 방법을 알아보겠습니다.

Ganache 및 Python을 사용하여 로컬 시각적 Ethereum 블록체인에 배포된 Web3 스마트 계약을 구축하기 위한 요소

Python3, Ganache, Solcx, Solidity, Web3, Json, os, dotenv

의제

Web3 스마트 계약 – Solcx 설치 및 Solidity 파일 Jsonify

우선, 스크립트에는 가장 유명한 Ethereum과 같은 블록체인 플랫폼에서 스마트 계약을 구현하는 언어가 필요합니다. 언어의 경우 Solidity를 사용하며 다음 기사에서 자세한 내용을 공유하겠습니다.

Solidity 측면에서 Solcx를 사용하여 Python 개발 환경에서 스마트 계약 데이터 세트를 컴파일할 수 있습니다. Solc Solidity 컴파일러용 Python 래퍼 및 버전 관리 도구입니다.

이 기사에 대한 Solidity 파일 easy2digital.sol을 원하시면 "Web3.0 + 1 Solidity and Ganache" 메시지를 남기는 뉴스레터를 구독 하세요 . 최대한 빨리 보내드리겠습니다.

1단계. Solcx 설치, Python 스크립트에서 Solidity 파일 열기 및 컴파일

Mac을 예로 들어 보겠습니다. 터미널에 Solcx를 설치하는 방법은 다음과 같습니다.

pip install py-solc-x

그런 다음 Python 스크립트에서 Solcx와 필수 메소드를 가져와야 합니다.

From solcx import compile_standard

With open(“./your solidity file name.sol”, “r”) as file:

Single_contract_file = file.read()

마지막으로 compile_standard 메소드를 사용하여 sol 파일 정보를 변수로 컴파일해야 합니다.

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",

)

2단계. 컴파일된 파일을 Jsonify

파일 데이터를 더 편리하게 가져오고 블록체인 네트워크 및 트랜잭션과 상호 작용하기 위해 컴파일된 데이터를 json 데이터 형식으로 json화할 수 있습니다. 다음과 같은 코드가 있습니다.

with open("compiled_solCode.json", "w") as file:

json.dump(compiled_sol, file)

Web3 스마트 계약 – 바이트코드 및 ABI

ABI 및 바이트코드 정보는 모두 Ethereum 블록체인 네트워크와 상호 작용하고 컴퓨터 통신을 제어하는 ​​데 중요합니다.

바이트코드

바이트코드는 컴퓨터에 대한 명령을 바이너리로 담고 있는 정보이다. 작성된 모든 코드 줄은 opcode로 분류되어 컴퓨터가 코드를 실행할 때 수행할 작업을 정확히 알 수 있습니다.

Ethereum 세계에서 바이트코드는 실제로 Ethereum 블록체인에 배포되는 것입니다. Ethereum 네트워크에 배포하고 Metamask와 같은 브라우저 기반 지갑을 사용하여 트랜잭션을 확인하면 실제로 배포되는 바이트 코드를 볼 수 있습니다.

# Get Bytecode

Bytecode = compiled_sol['contracts']['easy2digital.sol']['SingleContract']["evm"]["bytecode"]["object"]

ABI

ABI는 애플리케이션 바이너리 인터페이스입니다. 이는 스마트 계약에서 사용할 수 있고 해당 스마트 계약과 상호 작용하는 데 사용할 수 있는 방법과 변수를 정의합니다. 스마트 계약은 블록체인에 배포되기 전에 바이트코드로 변환되므로 이를 통해 시작할 수 있는 작업과 상호 작용이 무엇인지 알 수 있는 방법이 필요합니다.

그런 다음 모든 프로그래밍 언어를 사용하여 스마트 계약과 상호 작용할 수 있도록 해당 인터페이스를 표현하는 표준화된 방법이 필요합니다.

해당 스마트 계약에 대한 ABI와 Ethereum 네트워크에 대한 진입점을 제공하기 위해 하나의 노드와 통신하는 데 도움이 되는 라이브러리가 있는 한 귀하의 애플리케이션은 모든 코딩 언어를 사용하여 스마트 계약과 상호 작용할 수 있습니다.

easy2digital.sol에서 ABI 값을 생성하는 코드는 다음과 같습니다.

# Get ABI

getABI = compiled_sol['contracts']['SimpleStorage.sol']['SimpleStorage']['abi']

Web3 모듈 설치 및 Ganache에 연결

스마트 계약 준수 파일의 메서드와 변수를 가져오는 데 사용되는 바이트코드와 ABI가 준비되면 Ethereum 상호 작용을 위한 모듈을 설치할 차례입니다. Python에서는 Web3 모듈이라고 합니다.

터미널에서는 다음과 같이 이 명령을 입력합니다.

pip install web3

Python 스크립트에서도 코드를 이용하여 모듈을 입력해주세요.

from web3 import Web3

가나슈

그런 다음 Web3 스마트 계약 테스트 환경을 개발하려면 Metamask를 통해 실제 블록체인에 연결하는 대신 시각적인 Ethereum 블록체인이 필요합니다. 여기에는 Ganache라는 소프트웨어가 필요합니다.

Ganache는 체인 작동 방식을 제어하면서 테스트 실행, 명령 실행, 상태 검사에 사용할 수 있는 개인 Ethereum 블록체인을 제공하므로 Web3 개발자를 용이하게 합니다.

설치방법은 짱 쉽습니다. 그런 다음 빠른 Ethereum을 열고 시각적 ETH 네트워크 대시보드를 열 수 있습니다. 대시보드에는 Python 스크립트에서 사용하는 데 필요한 여러 요소가 있습니다. 다음은 항목 목록입니다.

  • HTTP URL
  • 체인 ID
  • 비주얼 암호화폐 지갑 주소
  • 지갑 개인 키

체인 ID의 경우 Ganache에 버그가 있을 수 있으며 고유 ID가 작동하지 않을 수 있습니다. 이런 경우가 발생하면 체인 ID 1337을 사용해 보세요.

그러면 Ganache에 연결하는 Web3 모듈을 사용하기 위한 코드는 다음과 같습니다.

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"

암호화폐 지갑 개인 키 숨기기

실제로 Ganache는 Web3를 실제 Ethereum 블록체인과 연결하는 환경을 시뮬레이션합니다. 예를 들어 메타마스크를 사용하면 주소는 실제 지갑 주소와 동일하고 개인 키는 실제 지갑 개인 키입니다. 그럼에도 불구하고 모든 자금을 잃을 위험이 있으므로 서버에 개인 키를 공개하고 싶지 않습니다.

따라서 DApp이나 Web3에서는 Python 스크립트에서 개인 키를 숨겨야 합니다. 여기서는 . env and gitignore.

먼저, .env 파일을 생성하여 Python 스크립트와 동일한 폴더에 넣어야 합니다.

env 파일의 코드는 다음과 같습니다.

export PRIVATE_KEY="0x + your private key"
둘째, 같은 폴더에 .gitinore 파일도 추가해 주세요.
마지막으로 중요한 것은 os, dotenv 가져오고 getenv() 메서드를 사용하여 env 파일의 변수를 호출할 수 있다는 것입니다.
import os
from dotenv import load_dotenv
private_key = os.getenv("PRIVATE_KEY")

Ethereum 블록체인에서 스마트 계약 생성

앞서 언급했듯이 우리는 Solidity를 사용하여 스마트 계약 논리를 작성했습니다. 따라서 문제는 이 논리를 블록체인에 배포하는 방법입니다. Web3 모듈은 contract() 제공하고 절차를 완료하는 데 도움을 줍니다.

singleContractA = w3.eth.contract(abi=getABI, bytecode=Bytecode)
트랜잭션 수 ID를 생성하려면 getTransactionCount() 사용할 수 있습니다.
nonceA = w3.eth.getTransactionCount(my_address)

거래 기능 활성화 – 거래 구축, 서명, 전송 및 확인

Web3.0의 핵심가치는 탈중앙화된 거래와 결제 처리입니다. 이제부터 귀하의 비즈니스와 고객 모두 암호화폐를 사용하여 거래할 의향이 있는 한, 귀하는 전통적인 은행 시스템을 거칠 필요가 없습니다. 그것은 많은 것을 암시하고 의미합니다!

따라서 블록체인과 상호 작용하는 핵심 부분 중 하나는 거래 흐름을 구축하는 것입니다. 일반적으로 어떤 종류의 사업이나 거래를 하든 기본적으로 다음과 같은 네 가지 기본 단계가 있습니다.

# 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)

특정 값 추가 및 계약 업데이트

또한 기존 거래를 업데이트하고 특정 가치를 추가할 수도 있습니다.

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

Ganache에 연결하는 Web3 스마트 계약의 전체 Python 스크립트

Web3.0 튜토리얼 1 – DApp 개발 및 테스트를 위해 Python을 사용하여 Ganache에 Web3 스마트 계약 연결에 관심이 있다면, "Web3.0 tutorial 1"이라는 메시지를 추가하여 뉴스레터를 구독 해 주세요. . 우리는 즉시 귀하의 사서함으로 스크립트를 보내드립니다.

Web3.0 튜토리얼 1 – DApp 개발 및 테스트를 위해 Python을 사용하여 Ganache에 Web3 스마트 계약 연결을 재미있게 읽으시기 바랍니다. 그렇게 했다면 아래 나열된 일 중 하나를 수행하여 우리를 지원해 주세요. 이는 항상 우리 채널에 도움이 되기 때문입니다.

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