이번엔 이더리움 네트워크에 스마트 컨트랙트를 배포해보자. 그러기 위해서는 이더리움 서버가 있어야한다. 여기서는 특별히 POA방식의 프라이빗 이더리움 네트워크를 이용해 배포하는것을 해볼거다. 다른 포스트 참조해서 프라이빗 네트워크를 만들고 작업해라.
아래 소스를 이용한다.
import sys
import json
from web3 import Web3, HTTPProvider
from web3.middleware import geth_poa_middleware
from web3.contract import ConciseContract
from solc import compile_source
# Solidity source code
source = """
pragma solidity ^0.4.2;
contract Example { string s="Hello World!";
function set_s(string new_s) {
s = new_s;
}
function get_s() returns (string) {
return s;
}
}"""
# 이더리움 연결
rpc_url = "http://127.0.0.1:8545"
w3 = Web3(HTTPProvider(rpc_url))
w3.middleware_stack.inject(geth_poa_middleware, layer=0)
compiled_sol = compile_source(source)
contract_interface = compiled_sol["<stdin>:Example"]
print(contract_interface['abi'])
print(contract_interface['bin'])
contract = w3.eth.contract(abi= contract_interface['abi'],
bytecode= contract_interface['bin'],
bytecode_runtime= contract_interface['bin-runtime'])
tx_hash = contract.deploy(transaction={'from': w3.eth.accounts[0]})
print(tx_hash.hex())
tx_receipt = w3.eth.getTransactionReceipt(tx_hash)
print(tx_receipt)
contract_address = tx_receipt['contractAddress']
print(contract_address)
이렇게 하면 배포한 contract_address를 알 수 있다.
쉽다...
tx_receipt 값을 첨부한다.
AttributeDict({'blockHash': HexBytes('0xb0f87d5b6a4ebbce800705e290792a2dd1fa1e04c169e291fd8e5a8e4ccaecfb'), 'blockNumber': 405394, 'contractAddress': '0x520616968dF85B5096Be115F674fe6C6fB7e3a2C', 'cumulativeGasUsed': 284156, 'from': '0x6900ffcd06f4909f325c0886930bac391b21ede6', 'gasUsed': 284156, 'logs': [], 'logsBloom': HexBytes('0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'), 'status': 1, 'to': None, 'transactionHash': HexBytes('0xed5ab62047c7e4363156e1cfa972cce0688c8a12e286c3fe65c437f253b8c7d6'), 'transactionIndex': 0})
'파이썬' 카테고리의 다른 글
파이썬 백그라운드 실행 (0) | 2019.08.12 |
---|---|
파이썬으로 카프카 토픽 가져와서 블록체인에 전송하고 txid 받아서 디비에 넣기 (0) | 2019.08.01 |
파이썬으로 스마트컨트랙트 배포하기 feat POA 1/2 (0) | 2019.07.23 |
파이썬으로 크롤링하는 서버는 용량체크에 신경써라 (0) | 2019.06.14 |
파이썬으로 코인 전송하고 트랜잭션 확인하기 feat web3 (0) | 2019.06.04 |