반응형

이번엔 이더리움 네트워크에 스마트 컨트랙트를 배포해보자. 그러기 위해서는 이더리움 서버가 있어야한다. 여기서는 특별히 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})

 

 

반응형

+ Recent posts