Web3.py로 가격을 스마트 구조기에 넘기다
개시하다
지난번에는 홈페이지 3.나는py로 간단한 스마트 설정을 하고python의 장점을 다시 한 번 깨달았다.
Web3.컴퓨터로 스마트 설정을 실행하다
이번에는 지난번 코드를 계속 수정해 좋아하는 인사를 스마트 구조기에 전달해 보자.
사이트 축소판 그림
공식 문서
꾸준한 이사림
각본
이번에도 쉽게 이해할 수 있도록 스마트 프레임을 제작하기로 했고, 체인에서 펼쳐지는 스크립트와 가격을 제시하는 스크립트로 나뉘었다.
지능형 구성 스크립트
contract_set.py
# ライブラリの読み込み
from web3 import Web3
from solcx import compile_source
# ローカルのイーサリアム環境(Basu)に接続
w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
# アカウントと秘密鍵の設定
account_0 = w3.toChecksumAddress('0xfe3b557e8fb62b89f4916b721be55ceb828dbd73')
private_key = '0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63'
# Solidity のソースをコンパイル
compiled_sol = compile_source(
'''
pragma solidity >0.5.0;
contract Greeter {
string public greeting;
constructor() public {
greeting = 'Hogetaro';
}
function setGreeting(string memory _greeting) public {
greeting = _greeting;
}
function greet() view public returns (string memory) {
return greeting;
}
}
''',
output_values=['abi', 'bin']
)
# コントラクトインターフェイスの取得
contract_id, contract_interface = compiled_sol.popitem()
# print(contract_interface)
# バイトコードとABI
bytecode = contract_interface['bin']
abi = contract_interface['abi']
# ABIの表示
print(abi)
# コントラクトの作成
contract = w3.eth.contract(abi=abi, bytecode=bytecode)
# トランザクションの生成
tx = contract.constructor().buildTransaction({
'from': account_0,
'nonce': w3.eth.getTransactionCount(account_0),
'gas': 1728712,
'gasPrice': w3.toWei('21', 'gwei')})
# トランザクションに署名
signed_tx = w3.eth.account.signTransaction(tx, private_key)
# トランザクションの送信
tx_hash = w3.eth.sendRawTransaction(signed_tx.rawTransaction)
# トランザクションレシート?
tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)
# コントラクトアドレスの表示
print(tx_receipt.contractAddress)
내용은 거의 지난번과 마찬가지로 setGreeting이라는 함수만 추가되었습니다.이것을 실행하면 ABI와 설정 주소가 표시됩니다.
$ python3 contract_set.py
[{'inputs': [], 'stateMutability': 'nonpayable', 'type': 'constructor'}, {'inputs': [], 'name': 'greet', 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [], 'name': 'greeting', 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [{'internalType': 'string', 'name': '_greeting', 'type': 'string'}], 'name': 'setGreeting', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'}]
0xfeae27388A65eE984F452f86efFEd42AaBD438FD
지능형 구성 값 설정 및 스크립트 호출
set_call.py
방금 표시된 ABI와 설정 주소를 사용하여 값을 전달한 후에 호출된 스크립트를 만듭니다.
이번에는 새로운 거래를 생성하고 실행해야 하기 때문에 지난번보다 더 복잡해졌다.
# ライブラリのインポート
from web3 import Web3
# 接続
w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
account_0 = w3.toChecksumAddress('0xfe3b557e8fb62b89f4916b721be55ceb828dbd73')
private_key = '0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63'
# ABI
abi = [{'inputs': [], 'stateMutability': 'nonpayable', 'type': 'constructor'}, {'inputs': [], 'name': 'greet', 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [], 'name': 'greeting', 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [{'internalType': 'string', 'name': '_greeting', 'type': 'string'}], 'name': 'setGreeting', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'}]
# コントラクトアドレス
contractAddress = '0xfeae27388A65eE984F452f86efFEd42AaBD438FD'
# コントラクトオブジェクト
contract = w3.eth.contract(address=contractAddress, abi=abi)
# 呼び出しと表示
tx = contract.functions.setGreeting('KONNICHIWA!!!!!').buildTransaction({'nonce': w3.eth.getTransactionCount(account_0)})
signed_tx = w3.eth.account.signTransaction(tx, private_key)
# トランザクションの送信
tx_hash = w3.eth.sendRawTransaction(signed_tx.rawTransaction)
tx_receipt = w3.eth.waitForTransactionReceipt(tx_hash)
print(contract.functions.greet().call())
이렇게 하면 원래 구조자의 인사를 덮어쓰고 설정된 인사를 답장할 수 있다.$ python3 set_call.py
KONNICHIWA!!!!!
너무 좋아요!역시python!!매개 변수로 인사말을 딱딱하게 인코딩하면 지난번과의 차이를 쉽게 알 수 있고 어쨌든 만족할 수 있다.
Reference
이 문제에 관하여(Web3.py로 가격을 스마트 구조기에 넘기다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/syucchin/articles/242f0bc9707fdd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)