主页 > 怎么注册imtoken钱包 > Python区块链框架_用python实现自己的区块链(with python foundation)

Python区块链框架_用python实现自己的区块链(with python foundation)

怎么注册imtoken钱包 2023-02-20 06:15:56

4、Flask是python的轻量级web框架比特币产生的基础是,非常适合快速web开发。 我有一个用它编写的论坛项目。

6. 这是代码。 我的代码每个方法都写的很详细,有基础的人都能看懂。 如有不明白或报错欢迎评论留言

7. 请注意,我只用一节课就可以做到。

导入哈希库

导入 json

导入请求

从 textwrap 导入 dedent

从时间导入时间

从 uuid 导入 uuid4

从 urllib.parse 导入 urlparse

从烧瓶导入烧瓶,jsonify,请求

类区块链(对象):

def __init__(自我):

...

自己。 节点=设置()

# 使用set存储节点,避免重复添加节点。

...

自己。 链 = []

自己。 当前交易 = []

# 创建创世块

self.new_block(previous_hash=1,proof=100)

def register_node(自我,地址):

"""

将新节点添加到节点列表

:参数地址:

:返回:

"""

prsed_url = urlparse(地址)

self.nodes.add(prsed_url.netloc)

def valid_chain(自我,链):

"""

确定给定的区块链是否有效

:参数链:

:返回:

"""

last_block =链[0]

当前索引 = 1

比特币多久产生一个区块_以太币比特币是骗局吗_比特币产生的基础是

而 current_index

块=链[current_index]

打印(f'{last_block}')

打印(f'{块}')

打印(“\n______\n”)

# 检查区块的哈希值是否正确

如果块 ['previous_hash'] != self.hash(last_block):

返回假

# 检查工作证明是否正确

如果不是 self.valid_proof(last_block['proof'], block['proof']):

返回假

last_block = 块

当前索引 += 1

返回真

def resolve_conflicts(自我):

"""

共识算法

:返回:

"""

邻居= self.nodes

新链=无

# 找到最长的链

max_length = len(self.chain)

# 获取并验证网络中所有节点的链

对于邻居中的节点:

响应 = 请求。 get(f'{node}/chain')

如果 response.status_code == 200:

length = response.json()['length']

chain = response.json()['chain']

# 检查长度是否长,链是否有效

如果长度 > max_length 和自我。 有效链(链):

最大长度 = 长度

new_chain = 链

# 如果发现新的有效链比当前链长,则替换当前链

如果是新链:

self.chain = new_chain

返回真

比特币多久产生一个区块_比特币产生的基础是_以太币比特币是骗局吗

返回假

def new_block(self, proof, previous_hash=None):

"""

创建一个新块并将其添加到链中

:param proof: 工作量证明算法生成的证明

:param previous_hash: 上一个区块的哈希值

:return: 新块

"""

块= {

'index':len(self.chain)+1,

'时间戳':时间(),

'交易':自我。 当前交易,

'证明':证明,

'previous_hash': previous_hash or self.hash(self.chain[-1]),

}

# 重置当前交易记录

自己。 当前交易 = []

自己。 链。 附加(块)

返回块

def new_transaction(self, sender, recipient, amount):

# 将新交易添加到交易列表中

"""

创建一个新交易以进入下一个开采区块

:param sender: 发件人地址

:param recipient: 收件人地址

:param amount: 数量

:return: 持有该交易的区块的索引

"""

self.current_transactions.append({

'发件人':发件人,

'收件人':收件人,

'金额':金额,

})

回归自我。 最后一个块['索引'] + 1

@静态方法

def哈希(块):

"""

比特币产生的基础是_比特币多久产生一个区块_以太币比特币是骗局吗

为块生成 SHA-256 值

:参数块:

:返回:

"""

# 你必须确保这个字典(块)是有序的,否则你会得到不一致的散列

block_string = json.dumps(block,sort_keys=True).encode()

返回 hashlib.sha256(block_string).hexdigest()

@财产

def last_block(自我):

# 返回链中的最后一个块

回归自我。 链[-1]

def proof_of_work(自我,last_proof):

# 工作算法的简单证明

证明 = 0

而 self.valid_proof(last_proof, proof) 为假:

证明 +=1

退货证明

@静态方法

def valid_proof(last_proof,证明):

# 验证证明

guess = f'{last_proof}{proof}'.encode()

guess_hash = hashlib.sha256(猜测).hexdigest()

返回 guess_hash[:4] =="0000"

# 实例化节点

app = 烧瓶(__name__)

# 为这个节点生成一个全球唯一的地址

node_identifier = str(uuid4()).replace('-','')

# 实例化区块链类

区块链=区块链()

# 发起挖矿请求

@app.route('/我的',methods=['GET'])

定义我的():

# 运行工作量证明算法以获得下一个证明。

last_block = blockchain.last_block

last_proof = last_block['proof']

proof = blockchain.proof_of_work(last_proof)

# 找到证据必须获得奖励。

比特币产生的基础是_比特币多久产生一个区块_以太币比特币是骗局吗

blockchain.new_transaction(

发件人=“0”,

收件人=节点标识符,

金额=1,

)

# 通过将它们添加到链中来构建新块

previous_hash = blockchain.hash(last_block)

区块 = 区块链。 new_block(证明,previous_hash)

回应 = {

'消息':“新块锻造”,

'索引':块['索引'],

'交易':块['交易'],

'证明':块['证明'],

'previous_hash':块['previous_hash'],

}

返回 jsonify(响应),200

# 创建交易请求

@app.route('/transactions/new',methods=['POST'])

def new_transactions():

价值观 =要求。 get_json()

# 检查必填字段是否在 POST 数据中

必需 = ['家宴', '收件人', '金额']

如果不是全部(k in values for k in request):

返回“缺失值”,400

# 创建一个新事物

index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])

response = {'message': f'Transaction will be added to Block {index}'}

返回 jsonify(响应),201

# 获取所有快速消息

@app.route('/chain',methods=['GET'])

def full_chain():

回应 = {

'链':blockchain.chain,

'长度':len(blockchain.chain),

}

返回 jsonify(响应),200

# 添加节点

以太币比特币是骗局吗_比特币多久产生一个区块_比特币产生的基础是

@app.route('/nodes/register',methods=['POST'])

def register_nodes():

价值观 =要求。 get_json()

节点 = 值。 得到('节点')

如果节点是无:

返回“错误:请提供有效的节点列表”,400

对于节点中的节点:

区块链。 注册节点(节点)

回应 = {

'message': '已添加新节点',

'total_nodes':列表(blockchain.nodes),

}

返回 jsonify(响应),201

# 解决冲突

@app.route('/nodes/resolve', methods=['GET'])

定义共识():

替换 = 区块链。 解决冲突()

如果更换:

回应 = {

'message': '我们的链条被替换了',

'new_chain':blockchain.chain

}

别的:

回应 = {

'message': '我们的链是权威的',

'链':区块链。 链

}

返回 jsonify(响应),200

如果 __name__ == '__main__':

应用程序运行(主机='0.0.0.0'比特币产生的基础是,端口=5000)

代码准备好启动你的项目后,打开Postman并完成以下操作

cc8a4dbc370c

XocCyBrwu5.png

让我们按要求挖矿:5000/矿

cc8a4dbc370c

0FhWFFwqhI.png

以后会继续更新。