matic马蹄链dapp开发原理丨matic马蹄链dapp系统开发(方案及规则)丨matic马蹄链源码
什么是DApp
“DApp”代表去中心化应用程序。与传统应用程序一样,去中心化应用程序也有前端(客户端)和后端(服务器端)。DApp的用户界面可以用任何语言编写(就像传统应用程序一样),并且可以调用其后端。那么,Dapps与传统应用程序有何不同?DApp的后端代码运行在分散的对等网络(即区块链)上。
使用web3py部署智能合约并调用
前提:启动本地geth节点,开启相关rpc服务,默认端口为8545,本人是在虚拟机中配置了geth节点
使用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())功能及方案详细I59需求2OO7设计3O69
account=web3.eth.accounts[0]
#读取文件中的abi和bin,也可以当场生成
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)
#发起交易部署合约,开发合约案例唯: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)
合约部署成功后就可以调用了,如果需要改变数据需要使用transac()发起交易,并等待挖矿确认,只是读取则使用cal()即可
#调用合约,合约地址就是刚刚控制台打印的
address=web3.toChecksumAddress("0x6999C68d214E1d193534601759b7F1eC534597Bf")
c=web3.eth.contract(address,abi=abi)
print(c.functions.totalVotesFor(b'dog').call())