校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Python創(chuàng)建自己的加密貨幣的示例

Python創(chuàng)建自己的加密貨幣的示例

熱門標簽:舉辦過冬奧會的城市地圖標注 qt百度地圖標注 地圖地圖標注有嘆號 阿里電話機器人對話 螳螂科技外呼系統(tǒng)怎么用 電銷機器人系統(tǒng)廠家鄭州 正安縣地圖標注app 400電話申請資格 遼寧智能外呼系統(tǒng)需要多少錢

隨著當前加密貨幣的興起,區(qū)塊鏈在技術界引起了轟動。 

這項技術之所以吸引了如此多的關注,主要是因為它具有保證安全,強制分權和加快多個行業(yè)(尤其是金融行業(yè))流程的能力。

本質(zhì)上,區(qū)塊鏈是一個公共數(shù)據(jù)庫,它不可逆地記錄和認證數(shù)字資產(chǎn)的擁有和傳輸。像比特幣和以太坊這樣的數(shù)字貨幣就是基于這個概念。 

區(qū)塊鏈是一項令人興奮的技術,可用于轉換應用程序的功能。

最近,我們看到政府,組織和個人使用區(qū)塊鏈技術來創(chuàng)建自己的加密貨幣。值得注意的是,當Facebook提出自己的加密貨幣Libra時,這一公告激起了全世界的許多熱潮。

如果您也可以效仿并創(chuàng)建自己的加密貨幣版本,你應該如何著手?

我考慮了這一點,決定開發(fā)一種可以創(chuàng)建加密貨幣的算法。

我決定將加密貨幣稱為fccCoin。 

在本教程中,我將逐步說明構建數(shù)字貨幣的過程(我使用了Python編程語言的面向?qū)ο蟾拍睿?nbsp;

這是用于創(chuàng)建fccCoin的區(qū)塊鏈算法的基本藍圖:

class Block:

 def __init__():

 #first block class

  pass
 
 def calculate_hash():
 
 #calculates the cryptographic hash of every block
  
 
class BlockChain:
 
 def __init__(self):
  # constructor method
 pass
 
 def construct_genesis(self):
  # constructs the initial block
  pass

 def construct_block(self, proof_no, prev_hash):
  # constructs a new block and adds it to the chain
  pass

 @staticmethod
 def check_validity():
  # checks whether the blockchain is valid
  pass

 def new_data(self, sender, recipient, quantity):
  # adds a new transaction to the data of the transactions
  pass

 @staticmethod
 def construct_proof_of_work(prev_proof):
  # protects the blockchain from attack
  pass
 
 @property
 def last_block(self):
  # returns the last block in the chain
  return self.chain[-1]

現(xiàn)在,讓我解釋一下接下來應該怎么做……

1.建立第一個Block類

區(qū)塊鏈由幾個相互連接的塊組成,因此,如果一個塊被篡改,則鏈將變?yōu)闊o效。

在應用上述概念時,我創(chuàng)建了以下初始塊類:

import hashlib
import time

class Block:

 def __init__(self, index, proof_no, prev_hash, data, timestamp=None):
  self.index = index
  self.proof_no = proof_no
  self.prev_hash = prev_hash
  self.data = data
  self.timestamp = timestamp or time.time()

 @property
 def calculate_hash(self):
  block_of_string = "{}{}{}{}{}".format(self.index, self.proof_no,
            self.prev_hash, self.data,
            self.timestamp)

  return hashlib.sha256(block_of_string.encode()).hexdigest()

 def __repr__(self):
  return "{} - {} - {} - {} - {}".format(self.index, self.proof_no,
            self.prev_hash, self.data,
            self.timestamp)

從上面的代碼中可以看到,我定義了__init __()函數(shù),該函數(shù)將在啟動Block類時執(zhí)行,就像在其他任何Python類中一樣。

我為啟動函數(shù)提供了以下參數(shù):

  • self-引用Block類的實例,從而可以訪問與該類關聯(lián)的方法和屬性;
  • 索引—跟蹤區(qū)塊鏈在區(qū)塊鏈中的位置;
  • proof_no-這是在創(chuàng)建新塊(稱為挖礦)期間產(chǎn)生的數(shù)量;
  • prev_hash —這是指鏈中上一個塊的哈希值;
  • 數(shù)據(jù)-提供所有已完成交易的記錄,例如購買數(shù)量;
  • 時間戳記-為事務放置時間戳記。

類中的第二個方法calculate_hash將使用上述值生成塊的哈希。SHA-256模塊被導入到項目中,以幫助獲得塊的哈希值。

將值輸入到密碼哈希算法后,該函數(shù)將返回一個256位字符串,表示該塊的內(nèi)容。

這就是在區(qū)塊鏈中實現(xiàn)安全性的方式-每個塊都將具有哈希,并且該哈希將依賴于前一個塊的哈希。

因此,如果有人試圖破壞鏈中的任何區(qū)塊,其他區(qū)塊將具有無效的哈希值,從而導致整個區(qū)塊鏈網(wǎng)絡的破壞。

最終,一個塊將如下所示:

{
 "index": 2,
 "proof": 21,
 "prev_hash": "6e27587e8a27d6fe376d4fd9b4edc96c8890346579e5cbf558252b24a8257823",
 "transactions": [
  {'sender': '0', 'recipient': 'Quincy Larson', 'quantity': 1}
 ],
 "timestamp": 1521646442.4096143
}

2.建立區(qū)塊鏈類

顧名思義,區(qū)塊鏈的主要思想涉及將多個區(qū)塊相互“鏈接”。

因此,我將構建一個對管理整個鏈的工作很有用的Blockchain類。這是大多數(shù)動作將要發(fā)生的地方。

該Blockchain類將在blockchain完成各種任務的各種輔助方法。

讓我解釋一下每個方法在類中的作用。

A.構造方法

此方法確保實例化區(qū)塊鏈。

class BlockChain:

 def __init__(self):
  self.chain = []
  self.current_data = []
  self.nodes = set()
        self.construct_genesis()

以下是其屬性的作用:

  • self.chain-此變量保留所有塊;
  • self.current_data-此變量將所有已完成的事務保留在該塊中;
  • self.construct_genesis() -此方法將負責構造初始塊。

B.構建創(chuàng)世塊

區(qū)塊鏈需要一個construct_genesis方法來構建鏈中的初始塊。在區(qū)塊鏈慣例中,此塊是特殊的,因為它象征著區(qū)塊鏈的開始。

在這種情況下,讓我們通過簡單地將一些默認值傳遞給Construct_block方法來構造它。

盡管您可以提供所需的任何值,但我都給了proof_no和prev_hash一個零值。

def construct_genesis(self):
 self.construct_block(proof_no=0, prev_hash=0)


def construct_block(self, proof_no, prev_hash):
 block = Block(
  index=len(self.chain),
  proof_no=proof_no,
  prev_hash=prev_hash,
  data=self.current_data)
 self.current_data = []

 self.chain.append(block)
 return block

C.建造新的街區(qū)

該construct_block 方法用于在blockchain創(chuàng)造新的塊。

這是此方法的各種屬性所發(fā)生的情況:

  • 索引-代表區(qū)塊鏈的長度;
  • proof_nor&prev_hash —調(diào)用者方法傳遞它們;
  • 數(shù)據(jù)-包含節(jié)點上任何塊中未包含的所有事務的記錄;
  • self.current_data-用于重置節(jié)點上的事務列表。如果已經(jīng)構造了一個塊并將事務分配給該塊,則會重置該列表以確保將來的事務被添加到該列表中。并且,該過程將連續(xù)進行;
  • self.chain.append()-此方法將新構建的塊連接到鏈;
  • return-最后,返回一個構造的塊對象。

D.檢查有效性

該check_validity方法是評估blockchain的完整性,確保異常是絕對重要。

如上所述,散列對于區(qū)塊鏈的安全至關重要,因為即使對象發(fā)生任何細微變化也將導致生成全新的哈希。 

因此,此check_validity 方法使用if語句檢查每個塊的哈希是否正確。

它還通過比較其哈希值來驗證每個塊是否指向正確的上一個塊。如果一切正確,則返回true;否則,返回true。否則,它返回false。

@staticmethod
def check_validity(block, prev_block):
 if prev_block.index + 1 != block.index:
  return False

 elif prev_block.calculate_hash != block.prev_hash:
  return False

 elif not BlockChain.verifying_proof(block.proof_no, prev_block.proof_no):
  return False

 elif block.timestamp = prev_block.timestamp:
  return False

 return True

E.添加交易數(shù)據(jù)

該NEW_DATA方法用于添加事務的數(shù)據(jù)的塊。這是一種非常簡單的方法:它接受三個參數(shù)(發(fā)送者的詳細信息,接收者的詳細信息和數(shù)量),并將交易數(shù)據(jù)附加到self.current_data列表中。

每當創(chuàng)建新塊時,都會將該列表分配給該塊,并再次按Construct_block方法中的說明進行重置。

將交易數(shù)據(jù)添加到列表后,將返回要創(chuàng)建的下一個塊的索引。

該索引是通過將當前塊的索引(即區(qū)塊鏈中的最后一個)的索引加1來計算的。數(shù)據(jù)將幫助用戶將來提交交易。

def new_data(self, sender, recipient, quantity):
 self.current_data.append({
  'sender': sender,
  'recipient': recipient,
  'quantity': quantity
 })
 return True

F.添加工作證明

工作量證明是防止區(qū)塊鏈濫用的概念。簡而言之,其目的是在完成一定數(shù)量的計算工作后,確定一個可以解決問題的編號。

如果識別數(shù)字的難度很高,則不鼓勵發(fā)送垃圾郵件和篡改區(qū)塊鏈。

在這種情況下,我們將使用一種簡單的算法來阻止人們挖掘區(qū)塊或輕松創(chuàng)建區(qū)塊。

@staticmethod
def proof_of_work(last_proof):
 '''this simple algorithm identifies a number f' such that hash(ff') contain 4 leading zeroes
   f is the previous f'
   f' is the new proof
  '''
 proof_no = 0
 while BlockChain.verifying_proof(proof_no, last_proof) is False:
  proof_no += 1

 return proof_no


@staticmethod
def verifying_proof(last_proof, proof):
 #verifying the proof: does hash(last_proof, proof) contain 4 leading zeroes?

 guess = f'{last_proof}{proof}'.encode()
 guess_hash = hashlib.sha256(guess).hexdigest()
 return guess_hash[:4] == "0000"

G.得到最后一塊

最后,latest_block 方法是一種幫助程序方法,可幫助獲取區(qū)塊鏈中的最后一個塊。請記住,最后一個塊實際上是鏈中的當前塊。

@property
 def latest_block(self):
  return self.chain[-1]

總結

這是用于創(chuàng)建fccCoin加密貨幣的完整代碼。

import hashlib
import time


class Block:

 def __init__(self, index, proof_no, prev_hash, data, timestamp=None):
  self.index = index
  self.proof_no = proof_no
  self.prev_hash = prev_hash
  self.data = data
  self.timestamp = timestamp or time.time()

 @property
 def calculate_hash(self):
  block_of_string = "{}{}{}{}{}".format(self.index, self.proof_no,
            self.prev_hash, self.data,
            self.timestamp)

  return hashlib.sha256(block_of_string.encode()).hexdigest()

 def __repr__(self):
  return "{} - {} - {} - {} - {}".format(self.index, self.proof_no,
            self.prev_hash, self.data,
            self.timestamp)


class BlockChain:

 def __init__(self):
  self.chain = []
  self.current_data = []
  self.nodes = set()
  self.construct_genesis()

 def construct_genesis(self):
  self.construct_block(proof_no=0, prev_hash=0)

 def construct_block(self, proof_no, prev_hash):
  block = Block(
   index=len(self.chain),
   proof_no=proof_no,
   prev_hash=prev_hash,
   data=self.current_data)
  self.current_data = []

  self.chain.append(block)
  return block

 @staticmethod
 def check_validity(block, prev_block):
  if prev_block.index + 1 != block.index:
   return False

  elif prev_block.calculate_hash != block.prev_hash:
   return False

  elif not BlockChain.verifying_proof(block.proof_no,
           prev_block.proof_no):
   return False

  elif block.timestamp = prev_block.timestamp:
   return False

  return True

 def new_data(self, sender, recipient, quantity):
  self.current_data.append({
   'sender': sender,
   'recipient': recipient,
   'quantity': quantity
  })
  return True

 @staticmethod
 def proof_of_work(last_proof):
  '''this simple algorithm identifies a number f' such that hash(ff') contain 4 leading zeroes
   f is the previous f'
   f' is the new proof
  '''
  proof_no = 0
  while BlockChain.verifying_proof(proof_no, last_proof) is False:
   proof_no += 1

  return proof_no

 @staticmethod
 def verifying_proof(last_proof, proof):
  #verifying the proof: does hash(last_proof, proof) contain 4 leading zeroes?

  guess = f'{last_proof}{proof}'.encode()
  guess_hash = hashlib.sha256(guess).hexdigest()
  return guess_hash[:4] == "0000"

 @property
 def latest_block(self):
  return self.chain[-1]

 def block_mining(self, details_miner):

  self.new_data(
   sender="0", #it implies that this node has created a new block
   receiver=details_miner,
   quantity=
   1, #creating a new block (or identifying the proof number) is awarded with 1
  )

  last_block = self.latest_block

  last_proof_no = last_block.proof_no
  proof_no = self.proof_of_work(last_proof_no)

  last_hash = last_block.calculate_hash
  block = self.construct_block(proof_no, last_hash)

  return vars(block)

 def create_node(self, address):
  self.nodes.add(address)
  return True

 @staticmethod
 def obtain_block_object(block_data):
  #obtains block object from the block data

  return Block(
   block_data['index'],
   block_data['proof_no'],
   block_data['prev_hash'],
   block_data['data'],
   timestamp=block_data['timestamp'])

現(xiàn)在,讓我們測試我們的代碼,看看它是否有效。

blockchain = BlockChain()

print("***Mining fccCoin about to start***")
print(blockchain.chain)

last_block = blockchain.latest_block
last_proof_no = last_block.proof_no
proof_no = blockchain.proof_of_work(last_proof_no)

blockchain.new_data(
 sender="0", #it implies that this node has created a new block
 recipient="Quincy Larson", #let's send Quincy some coins!
 quantity=
 1, #creating a new block (or identifying the proof number) is awarded with 1
)

last_hash = last_block.calculate_hash
block = blockchain.construct_block(proof_no, last_hash)

print("***Mining fccCoin has been successful***")
print(blockchain.chain)

有效!

這是挖掘過程的輸出:

***Mining fccCoin about to start***
[0 - 0 - 0 - [] - 1566930640.2707076]
***Mining fccCoin has been successful***
[0 - 0 - 0 - [] - 1566930640.2707076, 1 - 88914 - a8d45cb77cddeac750a9439d629f394da442672e56edfe05827b5e41f4ba0138 - [{'sender': '0', 'recipient': 'Quincy Larson', 'quantity': 1}] - 1566930640.5363243]

結論

以上就是使用Python創(chuàng)建自己的區(qū)塊鏈的方式。

如果按原樣部署該代幣,它將無法滿足當前市場對穩(wěn)定,安全且易于使用的加密貨幣的需求。

因此,仍可以通過添加其他功能來增強其挖掘和發(fā)送財務交易的功能,從而對其進行改進。

以上就是Python創(chuàng)建自己的加密貨幣的示例的詳細內(nèi)容,更多關于Python創(chuàng)建自己的加密貨幣的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python 逆向爬蟲正確調(diào)用 JAR 加密邏輯
  • Python3 使用cookiejar管理cookie的方法
  • python調(diào)用java的jar包方法
  • Java實現(xiàn)的執(zhí)行python腳本工具類示例【使用jython.jar】
  • Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)
  • python通過cython加密代碼
  • python 實現(xiàn)aes256加密
  • Python 正確調(diào)用 jar 包加密得到加密值的操作方法

標簽:信陽 隨州 合肥 昭通 濟源 興安盟 阜新 淘寶好評回訪

巨人網(wǎng)絡通訊聲明:本文標題《Python創(chuàng)建自己的加密貨幣的示例》,本文關鍵詞  Python,創(chuàng)建,自己的,加密,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python創(chuàng)建自己的加密貨幣的示例》相關的同類信息!
  • 本頁收集關于Python創(chuàng)建自己的加密貨幣的示例的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    天天色图综合网| 7777精品伊人久久久大香线蕉| 成人久久视频在线观看| 欧美日韩久久久久久| 国产亚洲精品超碰| 亚洲国产另类av| 波多野结衣亚洲一区| 欧美三区免费完整视频在线观看| 精品三级在线观看| 亚洲国产精品一区二区www在线| 久久av中文字幕片| 欧美日韩午夜在线视频| 欧美极品xxx| 天天影视网天天综合色在线播放| 99视频国产精品| 国产欧美一区二区精品久导航| 免费人成精品欧美精品| 欧美午夜精品久久久久久超碰| 中文字幕一区二区三区在线观看| 久久se这里有精品| 日韩精品一区二区三区蜜臀| 亚洲一区免费视频| 成人av小说网| 欧美成人aa大片| 久久国产麻豆精品| 91精品国产黑色紧身裤美女| 一级精品视频在线观看宜春院| 成人av第一页| 国产精品无码永久免费888| 韩国精品一区二区| 欧美精品一区二区蜜臀亚洲| 久久成人免费电影| 精品久久一二三区| 久久精品国内一区二区三区| 日韩一区二区三区高清免费看看 | 91国产成人在线| 国产精品国产精品国产专区不蜜| 高清国产午夜精品久久久久久| 久久久三级国产网站| 高清视频一区二区| 国产精品二三区| 色av一区二区| 亚洲国产综合91精品麻豆| 91豆麻精品91久久久久久| 亚洲成人激情自拍| 欧美一区二区三区视频在线观看| 蜜臀av一区二区在线免费观看| 欧美成人精品1314www| 国产美女在线观看一区| 国产日产亚洲精品系列| 99re视频这里只有精品| 亚洲最大成人网4388xx| 337p亚洲精品色噜噜| 日本不卡一区二区三区| 欧美区视频在线观看| 一个色综合av| 欧美一区二区三区视频免费播放 | 亚洲影院理伦片| 欧美另类videos死尸| 麻豆国产欧美日韩综合精品二区 | 中文字幕在线不卡一区二区三区| 成人一区二区三区在线观看| 久久精品人人爽人人爽| 国产成人免费在线视频| 亚洲少妇最新在线视频| 91黄色免费网站| 麻豆精品国产91久久久久久| 久久天天做天天爱综合色| 国产在线观看一区二区| 亚洲欧美欧美一区二区三区| 欧美午夜宅男影院| 蜜桃一区二区三区四区| 国产精品美女久久久久av爽李琼| 91国产免费看| 国产一区二区三区蝌蚪| 亚洲一区在线看| 亚洲国产精品高清| 欧美日韩综合在线| 激情综合色综合久久| 亚洲免费在线视频| 久久噜噜亚洲综合| 欧美日韩国产精品成人| 国产精品一区二区三区网站| 亚洲宅男天堂在线观看无病毒| 精品免费国产二区三区| 欧美色图天堂网| 成人h动漫精品一区二| 久久国产精品区| 亚洲国产美女搞黄色| 国产婷婷色一区二区三区四区| 在线免费亚洲电影| 国产一区在线视频| 亚洲激情一二三区| 久久青草国产手机看片福利盒子| 成人久久视频在线观看| 免费精品视频最新在线| 久久精品日韩一区二区三区| 91精品国产品国语在线不卡| 白白色 亚洲乱淫| 天堂va蜜桃一区二区三区漫画版| 亚洲色图19p| 国产网红主播福利一区二区| 欧美精品一区二区三区蜜桃| 日韩一区二区三区三四区视频在线观看| 色又黄又爽网站www久久| 国产成人精品影视| 国产在线看一区| 精品无人码麻豆乱码1区2区| 日韩av不卡一区二区| 一区二区三区日本| 国产欧美日韩麻豆91| 91精品欧美一区二区三区综合在| 成人一级视频在线观看| 精品一区二区三区免费毛片爱| 亚洲韩国一区二区三区| 最新热久久免费视频| 久久久影视传媒| 日韩三级伦理片妻子的秘密按摩| 色综合久久综合网97色综合| 国产精品亚洲视频| 久久精品99国产国产精| 日韩精品一区第一页| 一级做a爱片久久| 亚洲人成在线观看一区二区| 中文字幕免费不卡在线| 国产午夜精品在线观看| 欧美激情在线一区二区| 1区2区3区欧美| 一区二区三区色| 亚洲午夜av在线| 亚洲成人综合在线| 午夜精品视频在线观看| 久久精品国产免费| 国产乱对白刺激视频不卡| 国产成人高清视频| 色哟哟在线观看一区二区三区| 在线免费观看日本欧美| 欧美一区二区三区四区五区 | 精品日韩一区二区三区| 日韩视频免费直播| 日韩久久免费av| 精品国产乱码久久久久久夜甘婷婷| 欧美一级生活片| 中文字幕不卡一区| 亚洲免费观看高清在线观看| 一区二区三区在线播放| 午夜精品福利一区二区三区av| 久久99精品久久久久久动态图 | 欧美日韩一区 二区 三区 久久精品| 欧美日韩一级视频| 日本一区二区三区免费乱视频| 中文字幕成人av| 亚洲成人动漫在线观看| 日日欢夜夜爽一区| 久草精品在线观看| 国产东北露脸精品视频| 国产一二精品视频| 91国产成人在线| 久久久久9999亚洲精品| 亚洲在线观看免费| 日韩中文字幕一区二区三区| 国产精品亚洲一区二区三区妖精| 99精品视频一区| 欧美精品18+| 久久久精品国产免大香伊| 亚洲人午夜精品天堂一二香蕉| 日本一区中文字幕| 国产在线播放一区三区四| 日本精品视频一区二区三区| 欧美v国产在线一区二区三区| 中文字幕久久午夜不卡| 亚洲动漫第一页| 国产在线一区二区| 欧美午夜免费电影| 久久网站最新地址| 亚洲欧美另类图片小说| 美女在线视频一区| 色综合久久88色综合天天免费| 精品国产髙清在线看国产毛片 | 欧美中文字幕不卡| 久久综合久久综合亚洲| 亚洲国产综合91精品麻豆| 国产91高潮流白浆在线麻豆| 91精品久久久久久久91蜜桃| 国产精品私人影院| 国产一区二区三区不卡在线观看 | 国产精品欧美一区喷水| 午夜电影一区二区三区| 97久久精品人人做人人爽50路| 日韩欧美一区二区视频| 亚洲激情图片小说视频| 成人av在线播放网站| 久久久久国产成人精品亚洲午夜| 奇米四色…亚洲| 欧美日韩国产精品自在自线| 亚洲成av人片一区二区三区| 91在线免费播放| 中文字幕高清一区| 国产精品1区二区.| 精品国产乱码久久久久久图片 |