九星創客系統丨九星創客系統開發(互助公排模式)丨九星創客原始碼及案例

Tg_StPv888發表於2023-02-28

  區塊被增加到區塊鏈之前,並不是所有區塊都可以生成區塊資料,也不是所有區塊資料都能被增加到區塊鏈成為最新的資料,這個過程有一定的門檻,需要篩選出一個值得信任的節點來生成資料,然後由其他節點來驗證其生成資料的有效性。這個生產區塊的過程會得到數字貨幣的激勵,因此很多節點會加入生產區塊的競爭。如果某個節點生產的區塊資料得到了其他節點的驗證,則其他節點會將最新的區塊儲存到本地,然後加入下一個資料塊的生產競爭,這個過程被稱為挖礦,而生成資料的節點被稱為礦工。


  from web3 import Web3


  import web3


  CONTRACT='0x22C1f6050E56d2876009903609a2cC3fEf83B415'#合約地址


  HTTPProvider="主網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部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2937484/,如需轉載,請註明出處,否則將追究法律責任。

相關文章