区块被增加到区块链之前,并不是所有区块都可以生成区块数据,也不是所有区块数据都能被增加到区块链成为最新的数据,这个过程有一定的门槛,需要筛选出一个值得信任的节点来生成数据,然后由其他节点来验证其生成数据的有效性。这个生产区块的过程会得到数字货币的激励,因此很多节点会加入生产区块的竞争。如果某个节点生产的区块数据得到了其他节点的验证,则其他节点会将最新的区块存储到本地,然后加入下一个数据块的生产竞争,这个过程被称为挖矿,而生成数据的节点被称为矿工。
from web3 import Web3
import web3
CONTRACT='0x22C1f6050E56d2876009903609a2cC3fEf83B415'#合约地址
HTTPProvider="https://dai.poa.network"#主网HttpProvider
#---打开abi json文件
with open('contracts/contract_abi.json','r')as contract_abi:
abi=json.load(contract_abi)
#---提供HTTPProvider,链上互动的接口
w3=Web3(Web3.HTTPProvider(HTTPProvider))
#---检查HTTPProvider
print(w3.isConnected())
#---继续
#---连接合约
contract=w3.eth.contract(address=CONTRACT,abi=abi)
#---使用合约功能
ACC='0xAdA556CcC02cc968579FF5294D52DC0eBf5eE328'
balance=contract.functions.balanceOf(acc).call()
print(balance)
因为整个区块链系统是点对点的对等网络,没有统一的中心机构协调各个节点的行为,所以在生成区块时,各个节点的行为都是相互独立的,很有可能同时由多个矿工在同一区块高度生成出2个以上的区块来。这些区块打包的交易很可能是不一样的,同时满足条件的数字n不是唯一的,多个矿工之间生成的数字n是不一样的,但是同样是满足不等式的。在这种情况下,网络中的其他节点很可能同步到不同的区块数据,并且这些数据在数学上都是合法的、有效的。当不同的节点中的不同的区块作为当前最新区块时,就会存在分叉的情况,即不同的矿机对同一高度的区块生产了内存不一样的新区快,并且这些矿工都找到了满足不等式的数字n。
def transfer_eth(target_address,amount,gas_price=5,gas_limit=21000):
nonce=web3.eth.getTransactionCount(address)
params={
'nonce':nonce,
'to':target_address,
'value':web3.toWei(amount,'ether'),
'gas':gas_limit,
'gasPrice':web3.toWei(gas_price,'gwei'),
'from':address,
}
signed_tx=web3.eth.account.signTransaction(params,private_key=private_key)
tx_hash=web3.eth.sendRawTransaction(signed_tx.rawTransaction)
return tx_hash
def transfer_token(token_contract,target_address,amount,gas_price=5,gas_limit=500000):
params={
"from":address,
"value":0,
'gasPrice':web3.toWei(gas_price,'gwei'),
"gas":gas_limit,
"nonce":web3.eth.getTransactionCount(address),
}
func=token_contract.functions.transfer(target_address,web3.toWei(amount,"ether"))
tx=func.buildTransaction(params)
signed_tx=web3.eth.account.sign_transaction(tx,private_key=private_key)
tx_hash=web3.eth.sendRawTransaction(signed_tx.rawTransaction)
return tx_hash
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2937484/ ,如需转载,请注明出处,否则将追究法律责任。