ITPub博客

首页 > 区块链 > 区块链 > 九星创客系统丨九星创客系统开发(互助公排模式)丨九星创客源码及案例

九星创客系统丨九星创客系统开发(互助公排模式)丨九星创客源码及案例

原创 区块链 作者:Tg_StPv888 时间:2023-02-28 17:48:18 0 删除 编辑

  区块被增加到区块链之前,并不是所有区块都可以生成区块数据,也不是所有区块数据都能被增加到区块链成为最新的数据,这个过程有一定的门槛,需要筛选出一个值得信任的节点来生成数据,然后由其他节点来验证其生成数据的有效性。这个生产区块的过程会得到数字货币的激励,因此很多节点会加入生产区块的竞争。如果某个节点生产的区块数据得到了其他节点的验证,则其他节点会将最新的区块存储到本地,然后加入下一个数据块的生产竞争,这个过程被称为挖矿,而生成数据的节点被称为矿工。


  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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专业区块项目开发团队:18028578624微電

注册时间:2022-04-13

  • 博文量
    158
  • 访问量
    95693