본문 바로가기
블록체인/[파공이]파이썬으로 공부하는 이더리움(Web3)

[web3] 이더리움 블록체인에 나만의 메세지 입력하기!!(feat. Python)

by 일등박사 2023. 3. 28.

사람들은 흔적을 남기고 싶어합니다.

전세계 여러 관광지에서는 이런 욕구에 따라 다양한 낙서들을 발견할 수 있는데요!!

 

이번 포스팅에서는 합법적으로 이더리움 네트워크에 나만의 낙서를 남기는 시간을 가져보도록 하겠습니다!!

 


1. ETH 테스트넷에 접속하기

 > 지난 포스팅으로  ETH TestNet인 세폴리아를 메타마스크에 추가했었는데요!!

 > Python 으로 아래와 같이 연결해줍니다!!

 

from web3 import Web3
import requests
import json
from decimal import Decimal
from solcx import compile_standard, install_solc


BINANCE_ADR = "https://bsc-dataseed1.binance.org"
ETH_ADR = "https://rpc.ankr.com/eth"
BINANCETEST_ADR  = "https://data-seed-prebsc-1-s2.binance.org:8545"
##위의 3개는 각각 BSC / ETH / BSD Test Net 주소입니다!!
## 아래가 바로 이더리움 테스트넷의 주쇼!!!
ETHTEST_ADR = "https://rpc2.sepolia.org/"
# 공식 사이트의 설명에 따라 체인 아이디를 설정해줍니다!!
chain_id = 11155111


## 내 지갑 정보를 미리 세팅해둡시다!!
my_wallet = '0xEfBDBfF11A678d9F9EE881E91fDb1F713bc066BC'
my_password = "{내 지갑의 비밀번호!!}"

### 계정조회하기 USING Web3
w3 = Web3(Web3.HTTPProvider(ETHTEST_ADR))
## 지갑의 잔액 조회!@!
w3.eth.get_balance(my_wallet)
## 지갑의 잔액 조회 >> ETH 단위로!!!@!
w3.from_wei(w3.eth.get_balance(my_wallet), 'ether')

잔액은 아래와 같이 Faucet에서 받은 0.5 ETH가 잘 있음을 확인할 수 있었습니다!!

2. 내 메세지를 적은 스마트컨트랙트 만들기!!

# solc 버젼이 맞게 설치
install_solc('0.8.13')

contract_func  = '''
pragma solidity ^0.8.13;

contract MyMessage {
    string public greet = "Hello DrFirst!!";

}
'''

## solidity 언어를 컴퍼일하기!!!
compiled_sol = compile_standard(
    {
        "language": "Solidity",
        "sources": {"my_message.sol": {"content": contract_func}},
        "settings": {
            "outputSelection": {
                "*": {
                    "*": ["abi", "metadata", "evm.bytecode", "evm.bytecode.sourceMap"] # output needed to interact with and deploy contract 
                }
            }
        },
    },
    solc_version="0.8.13",
)

# 프린트를 보면 내용을 알 수 있다
print(compiled_sol)

## Bytecode와 abi 뽑기
# get bytecode
bytecode = compiled_sol["contracts"]["my_message.sol"]["MyMessage"]["evm"]["bytecode"]["object"]
# get abia
abi = json.loads(compiled_sol["contracts"]["my_message.sol"]["MyMessage"]["metadata"])["output"]["abi"]
abi

내 메세지를 적은 스마트 컨트랙트를 배포합니다!!

위 코드에서 내 메시지는 무엇일까요!???

 

바로 "Hello DrFirst!!" 입니다!!

여러분만의 메세지를 넣고싶다면 "Hello DrFirst!!" 부분을 수정해보세요!!

 

3. 스마트컨트랙트 배포하기!!

이제 스마트컨트랙트를 배포합니다!@@

이떄 소소한 가스비가 들기에 내 계정의 주소와 비밀번호를 꼭 입력해주어야합니다!

# For connecting to ganache
w3 = Web3(Web3.HTTPProvider(ETHTEST_ADR))


ContactList = w3.eth.contract(abi=abi, bytecode=bytecode)# Get the number of latest transaction
nonce = w3.eth.get_transaction_count(my_wallet)


# 거래내역을 생성하고!!
transaction = ContactList.constructor().build_transaction(
    {
        "chainId": chain_id,
        "gasPrice": w3.eth.gas_price,
        "from": my_wallet,
        "nonce": nonce,
    }
)
## 스마트컨트랙트 배포 서명!! 내지갑 및 비번 정보 입력
sign_transaction = w3.eth.account.sign_transaction(transaction, private_key=my_password)
print("Deploying Contract!")
# 거래내역을 보냅니다!
transaction_hash = w3.eth.send_raw_transaction(sign_transaction.rawTransaction)
# Wait for the transaction to be mined, and get the transaction receipt
print("Waiting for transaction to finish...")
transaction_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash)
## 최종 배포 완료!!!! 내 주소를 볼 수 있다!!
print(f"Done! Contract deployed to {transaction_receipt.contractAddress}")

배포 결과!! 

내 메세지가 적힌 주소를 알려주고!!

해당 주소를 호출 하면 나의 메세지를 볼 수 있습니다!!

(지갑의 잔액도 줄어들었음을 확인할 수 있어요!!)

 

4. 확인하기!!

그렇다면 모두가 이 메세지를 볼 수 있을까요?

여러분의 컴퓨터에서 위 주소를 호출하는 아래 코드를 실행해보세요!!

이 코드에는 지갑 주소, 비밀번호등이 필요하지 않습니다!!

from web3 import Web3
import requests
import json
from decimal import Decimal
from solcx import compile_standard, install_solc

ETHTEST_ADR = "https://rpc2.sepolia.org/"

chain_id = 11155111

### 기존 계정조회하기 USING Web3
w3 = Web3(Web3.HTTPProvider(ETHTEST_ADR))

my_abi = [{'inputs': [],
  'name': 'greet',
  'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
  'stateMutability': 'view',
  'type': 'function'}]

contact_list = w3.eth.contract(address="0x18Dd469af98B2490480C36F51aE54678E1e689Ba", abi=my_abi)
print(contact_list.functions.greet().call())

 

그 결과!! 아래와 같이 메세지를 확인할 수 있었습니다.

5. 확인하기  with block scan

block scan 사이트에서 정말 저장된것이 맞는지 다시한 번 확인해 보아요!!

세폴리아의 스캔 사이트 URL 입니다!! https://sepolia.etherscan.io/

 

TESTNET Sepolia (ETH) Blockchain Explorer

Etherscan allows you to explore and search the Sepolia blockchain for transactions, addresses, tokens, prices and other activities taking place on Sepolia (ETH)

sepolia.etherscan.io

 

이번 거래의 주소 "0x18Dd469af98B2490480C36F51aE54678E1e689Ba" 를 입력하고 검색보면!?

내 지갑에서 발생한 trqansaction 들을 확인할 수 있습니다!!

 

댓글