matic馬蹄鏈dapp開發(fā)原理丨matic馬蹄鏈dapp系統(tǒng)開發(fā)(方案及規(guī)則)丨matic馬蹄鏈源碼
什么是DApp
“DApp”代表去中心化應(yīng)用程序。與傳統(tǒng)應(yīng)用程序一樣,去中心化應(yīng)用程序也有前端(客戶端)和后端(服務(wù)器端)。DApp的用戶界面可以用任何語言編寫(就像傳統(tǒng)應(yīng)用程序一樣),并且可以調(diào)用其后端。那么,Dapps與傳統(tǒng)應(yīng)用程序有何不同?DApp的后端代碼運(yùn)行在分散的對等網(wǎng)絡(luò)(即區(qū)塊鏈)上。
使用web3py部署智能合約并調(diào)用
前提:啟動本地geth節(jié)點(diǎn),開啟相關(guān)rpc服務(wù),默認(rèn)端口為8545,本人是在虛擬機(jī)中配置了geth節(jié)點(diǎn)
使用solc或者solcjs編譯智能合約生成abi和bin,solc指令為控制臺輸出,solcjs會保存成文件。
solc--bin Voting.sol
solc--abi Voting.sol
安裝包web3py
pip install web3py
import json
from web3 import Web3
web3=Web3(Web3.HTTPProvider('http://ip:8545'))
print(web3.isConnected())功能及方案詳細(xì)I59需求2OO7設(shè)計(jì)3O69
account=web3.eth.accounts[0]
#讀取文件中的abi和bin,也可以當(dāng)場生成
with open('dataVoting_sol_Voting.abi','r')as f:
abi=json.load(f)
with open('dataVoting_sol_Voting.bin','r')as f:
code=f.read()
newContract=web3.eth.contract(bytecode=code,abi=abi)
#發(fā)起交易部署合約,開發(fā)合約案例唯:yy625019
option={'from':account,'gas':1000000}
web3.geth.personal.unlock_account(account,'123')
tx_hash=newContract.constructor([b'dog',b'cat',b'bird']).transact(option)
#等待挖礦使得交易成功
tx_receipt=web3.eth.waitForTransactionReceipt(tx_hash)
print(tx_receipt.contractAddress)
合約部署成功后就可以調(diào)用了,如果需要改變數(shù)據(jù)需要使用transac()發(fā)起交易,并等待挖礦確認(rèn),只是讀取則使用cal()即可
#調(diào)用合約,合約地址就是剛剛控制臺打印的
address=web3.toChecksumAddress("0x6999C68d214E1d193534601759b7F1eC534597Bf")
c=web3.eth.contract(address,abi=abi)
print(c.functions.totalVotesFor(b'dog').call())