在這篇文章中,我們將學習如何使用 Python 的 Web3 庫來與智能合約進行互動。我們將涵蓋如何讀取和寫入智能合約的 ABI(應用程式二進位介面),並提供實際的程式碼範例,幫助你快速上手。
首先,確保你已經安裝了 `web3` 庫。如果尚未安裝,可以使用以下命令:
“`bash
pip install web3
“`
接下來,讓我們開始與 Binance Smart Chain(BSC)進行連接。
“`python
from web3 import Web3
# 連接到 BSC 測試網
bscLink = ‘https://data-seed-prebsc-2-s2.binance.org:8545’
bscWeb3 = Web3(Web3.HTTPProvider(bscLink))
# 確認是否成功連接
if bscWeb3.isConnected():
print(“成功連接到 BSC 測試網”)
else:
print(“無法連接到 BSC 測試網”)
“`
你可以在 [Chainlist](https://chainlist.org/zh) 上找到各種區塊鏈的連接資訊。

接下來,我們需要智能合約的 ABI 和地址。這裡我們以一個示範合約為例:
“`python
address = “0xB1ba07780285D26d2E90E69527dE2493a84e6C3a”
abi = ‘[{“inputs”:[],”stateMutability”:”nonpayable”,”type”:”constructor”}, … ]’ # 確保替換為實際的 ABI
contract = bscWeb3.eth.contract(address=address, abi=abi)
“`
### Web3 合約讀取
我們可以透過合約的函數來讀取資料。例如,呼叫 `getMyRobot` 函數:
“`python
reward = contract.functions.getMyRobot(‘0x01010129b1FcB9b01b3f0B345681C3rA8aa0c48A5’).call()
print(“reward = “, reward)
“`

### Web3 合約寫入
若要寫入資料到智能合約,我們需要提供一些額外的資訊,如你的地址、私鑰以及 nonce。這裡我們將呼叫 `createRobot` 函數:
“`python
myAddress = “0x01010129b1FcB9b01b3f0B345681C3A8aa0c48A5”
privateKey = “0x3e80675a40058c7efb369c510c197e22”
nonce = bscWeb3.eth.getTransactionCount(myAddress)
# 建立交易
transaction = contract.functions.createRobot(_ref=myAddress, _amount=10000000000000000000).buildTransaction({
“chainId”: 97,
“from”: myAddress,
“nonce”: nonce
})
# 簽名交易
signedTxn = bscWeb3.eth.account.sign_transaction(transaction, privateKey)
# 發送簽名交易
txHash = bscWeb3.eth.send_raw_transaction(signedTxn.rawTransaction)
# 等待交易回執
txReceipt = bscWeb3.eth.wait_for_transaction_receipt(txHash)
print(txReceipt)
“`

### 完整範例程式碼
以下是完整的程式碼範例,供你參考:
“`python
from web3 import Web3
# 連接鏈
bscLink = ‘https://data-seed-prebsc-2-s2.binance.org:8545’
bscWeb3 = Web3(Web3.HTTPProvider(bscLink))
# 連接智能合約
abi = ‘[{“inputs”:[],”stateMutability”:”nonpayable”,”type”:”constructor”}, … ]’ # 確保替換為實際的 ABI
address = “0xB1ba07780285D26d2E90E69527dE2493a84e6C3a”
contract = bscWeb3.eth.contract(address=address, abi=abi)
# 讀取智能合約
reward = contract.functions.getMyRobot(‘0x01010129b1FcB9b01b3f0B345681C3rA8aa0c48A5’).call()
print(“reward = “, reward)
# 寫入智能合約
myAddress = “0x01010129b1FcB9b01b3f0B345681C3A8aa0c48A5”
privateKey = “0x3e80675a40058c7efb369c510c197e22”
nonce = bscWeb3.eth.getTransactionCount(myAddress)
transaction = contract.functions.createRobot(_ref=myAddress, _amount=10000000000000000000).buildTransaction({
“chainId”: 97,
“from”: myAddress,
“nonce”: nonce
})
signedTxn = bscWeb3.eth.account.sign_transaction(transaction, privateKey)
txHash = bscWeb3.eth.send_raw_transaction(signedTxn.rawTransaction)
txReceipt = bscWeb3.eth.wait_for_transaction_receipt(txHash)
print(txReceipt)
“`
這篇文章提供了一個簡單的入門指南,幫助你快速上手 Python 與 Web3 的結合。希望對你有所幫助,歡迎在下方留言分享你的想法或任何問題!
—