怎样建立区块链(如何创造一个区块链)
免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。
小编:记得关注哦
来源:币成小助手
“学习区块链的最快方法就是自己亲手搭建一个”
如果您已经掌握了一些基础的python知识,那么跟着本文搭建区块链对您来说将不是一件难事儿。
在开始之前,有一些概念需要您先明确:
1. 区块链是一个不变的顺序记录链,称为块。它们可以包含事务,文件或任何您想要记录的数据。您只需记住,它们使用哈希值链接在一起。
2. 哈希函数就是一个简单的函数,它接受输入值,并根据该输入创建确定输入值的输出值。对于任何x输入值,只要运行哈希函数,您将始终收到相同的y输出值。这样,每个输入都有一个确定的输出。哈希函数通常是不可逆的(单向),这意味着仅知道输出就无法弄清楚输入-除非尝试所有可能的输入(也称为暴力破解)。
这是哈希函数md5,可从任何输入数据创建一个32个字符的十六进制输出
掌握了区块,哈希等基本概念之后,您还需要为搭建区块链做一些环境准备工作:请您确保您的电脑已安装 Python 3.6以上(以及pip)、Flask和Requests库。
pip install Flask==0.12.2 requests==2.18.4
Step 1 :搭建区块链
打开你最喜欢的文本编辑器或IDE,推荐使用PyCharm;创建一个新文件,名为blockchain.py
创建一个Blockchain类,创建两个初始的空列表作为构造函数,一个用于存储我们的区块链,另一个用于存储交易。
class Blockchain(object):
def __init__(self):
self.chain =
self.current_transactions =
def new_block(self):
# Creates a new Block and adds it to the chain
pass
def new_transaction(self):
# Adds a new transaction to the list of transactions
pass
@staticmethod
def hash(block):
# Hashes a Block
pass
@property
def last_block(self):
# Returns the last Block in the chain
pass
这个区块链类负责管理链。,它存储事务,并具有一些用于将新块添加到链中的辅助方法。
”Block到底长什么样?“
每个Block都有一个索引index,一个时间戳timestamp(以Unix时间表示),一个事务列表,一个proof证明(稍后会有更多介绍)以及前一个块的哈希值。如下面代码所示:
block = {
'index': 1,
'timestamp': 1506057125.900785,
'transactions': [
{
'sender': "8527147fe1f5426f9dd545de4b27ee00",
'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
'amount': 5,
}
],
'proof': 324984774000,
'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}
此时链的概念应该很明显了:每个新块本身都包含前一个块的哈希。这很关键,因为这使区块链具有不变性,即:如果攻击者破坏了链中较早的区块,则所有后续区块都将包含不正确的哈希。
”将交易添加到区块“
创建一个new_transaction方法,将交易添加到区块:
class Blockchain(object):
...
def new_transaction(self, sender, recipient, amount):
"""
Creates a new transaction to go into the next mined Block
:param sender:
:param recipient:
:param amount:
:return:
"""
self.current_transactions.append({
'sender': sender,
'recipient': recipient,
'amount': amount,
})
return self.last_block['index'] + 1
在new_transaction将事务添加到列表之后,它将返回要添加该事务的块的索引:即下一个要挖掘的块。这对于提交事务的用户很有用。
”创建一个新区块“
实例化我们的区块链时,我们需要使用创世区块(就是前面没有任何区块)。
我们还需要在创世区块中添加“证明”,这是挖矿(或工作量证明Proof of Work)的结果。 关于Pow可以参考我之前写过的文章:金融小课堂 | 加密货币一级市场概述(上)。
除了在构造函数中创建创世区块之外,我们还需要实例化new_block,new_transaction和hash这三个方法:
import hashlib
import json
from time import time
class Blockchain(object):
def __init__(self):
self.current_transactions =
self.chain =
# Create the genesis block
self.new_block(previous_hash=1, proof=100)
def new_block(self, proof, previous_hash=None):
"""
Create a new Block in the Blockchain
:param proof:
:param previous_hash: (Optional)
:return:
"""
block = {
'index': len(self.chain) + 1,
'timestamp': time,
'transactions': self.current_transactions,
'proof': proof,
'previous_hash': previous_hash or self.hash(self.chain[-1]),
}
# Reset the current list of transactions
self.current_transactions =
self.chain.append(block)
return block
def new_transaction(self, sender, recipient, amount):
"""
Creates a new transaction to go into the next mined Block
:param sender:
:param recipient:
:param amount:
:return:
"""
self.current_transactions.append({
'sender': sender,
'recipient': recipient,
'amount': amount,
})
return self.last_block['index'] + 1
@property
def last_block(self):
return self.chain[-1]
@staticmethod
def hash(block):
"""
Creates a SHA-256 hash of a Block
:param block:
:return:
"""
# We must make sure that the Dictionary is Ordered, or we'll have inconsistent hashes
block_string = json.dumps(block, sort_keys=True).encode
return hashlib.sha256(block_string).hexdigest
这样一个简单的区块链就大功告成了。
如果您会好奇更深层的问题,比如如何创建,伪造或开采新的区块?
相关内容
相关资讯
-
ok数字货币(火币、币安、OKEx,三大交易所这一年都干了啥?)
李林突然在朋友圈公布消息,“火币日本,日本金融厅 007 号交易所牌照,系统经过审核,为日本用户提供完全合规的数字货币交易服务
-
中国股市具有投资价值(中国股市投资价值未来)
接下来以作为中国核心资产的代表贵州茅台为例,讲解实际案例中股票收益与业绩成长之间的联系:贵州茅台收益最好的一段里也有博弈的部分:2012年塑化剂事件 2013年三公消费的双重打压下,茅台的价格只有一百
-
虚拟币平台地球,虚拟币数据平台
绗竴鏋氱邯蹇靛竵鑳岄潰涓绘櫙鐢辨娊璞¤〃鐜扮殑鐪肩潧銆佸彾瀛愬拰鍦扮悆鍥炬缁勬垚锛屽唴缂樺彸渚у垔鈥滅幆澧冧繚鎶も€濆瓧鏍凤紝琛ㄨ揪浜嗕汉绫诲璧栦互鐢熷瓨鐨勮嚜鐒剁幆澧冪殑鍏虫敞銆傜浜屾灇绾
-
韩国第二大虚拟币交易平台?韩国有游戏币交易平台么在平台上卖游戏币犯法么
求韩国游戏币交易网站闊╁浗浜ゆ槗骞冲彴www.itemmania.comwww.itembay.com鍦ㄥ浗鍐呬笂闇€瑕佹寕浠g悊鎵嶈兘鎵撳紑娆х編浜ゆ槗骞冲彴http://www.svcn.com.
-
50etf在期货公司开户(50etf期权开户流程)
除了这种开户方式,不满足条件的投资人可以选择期权分仓开户,此方式需要具备一定的投资经验,最好提前做过期权模拟交易或者期货交易,期权是一种高风险投资品种,投资者需要根据自身条件理性选择
-
东方财富港美股市能做股指期货吗(东方财富港美股市能做股指期货吗安全吗)
br>涔板崠缇庡浗鑲$エ鐨勬墜缁垂锛屼笉浠モ€滀氦鏄撻噾棰濃€濈殑姣旂巼璁$畻锛岃€屼互鈥滀氦鏄撶瑪鏁扳€濅负鍩哄噯锛岃€屼笖鍥犲埜鍟嗙殑涓嶅悓鑰屾湁寮傘€備緥濡傦細鍦ㄧ煡鍚嶇綉缁滃埜鍟唀*trad
-
股指期货和期权哪个好做点 股指期货和期权哪个好做点呢
期权的投资技巧牵扯到比较复杂的套利模型,如果你按照一般的股票或期货纯看k线操作,有时候可以,有时候就不太合适,因为期权价格有时候会非理性的大,让人承受不住
实时快讯
-
2023-09-08汽车融资租赁公司模式(汽车融资租赁有限公司是干嘛的)
-
2023-09-08熏鹅肉怎么做好吃(熏鹅肉怎么做好吃家常做法)
-
2023-09-08融资租赁的产生(融资租赁产生的应收款项)
-
2023-09-08富春江环保热电股份有限公司(富春江环保热电搬迁)
-
2023-09-08郑商所 苹果 保险 期货(河南苹果期货保险)
-
2023-09-08珠海海洋乐园(珠海海洋乐园风景照片高清图)
-
2023-09-08李嘉诚投资方向(李嘉诚投资方向有哪些股票)
-
2023-09-08华为上海研究所(华为上海研究所招聘)