2024年用7个Python函数解析区块链_区块链怎么获取函数名称


### 4.创建区块


现在,我们可以创建区块了。读取前一个区块中的信息,并将其链接到新区块上。这也是区块链思想的核心。看起来有效的交易可以尝试欺骗地插入到区块链中,但是对所有前面的块进行解密在计算上(几乎)是不可能的,这如此便保留了区块链的完整性。



def make_block(transactions, chain):
“”“Make a block to go into the chain.”“”
parent_hash = chain[-1][‘hash’]
block_number = chain[-1][‘contents’][‘block_number’] + 1
block_contents = {
‘block_number’: block_number,
‘parent_hash’: parent_hash,
‘transaction_count’: block_number + 1,
‘transaction’: transactions
}
return {‘hash’: hash_function(block_contents), ‘contents’: block_contents}


以下函数是一个帮助检查先前区块哈希函数的小帮手:



def check_block_hash(block):
expected_hash = hash_function(block[‘contents’])
if block[‘hash’] is not expected_hash:
raise
return


### 5.升级区块链



def check_block_validity(block, parent, state):
parent_number = parent[‘contents’][‘block_number’]
parent_hash = parent[‘hash’]
block_number = block[‘contents’][‘block_number’]
for transaction in block[‘contents’][‘transaction’]:
if valid_transaction(transaction, state):
state = update_state(transaction, state)
else:
raise
check_block_hash(block) # Check hash integrity
if block_number is not parent_number + 1:
raise
if block[‘contents’][‘parent_hash’] is not parent_hash:
raise
return state


### 6.验证区块链



def check_chain(chain):
“”“Check the chain is valid.”“”
if type(chain) is str:
try:
chain = json.loads(chain)
assert (type(chain) == list)
except ValueError:

String passed in was not valid JSON

return False
elif type(chain) is not list:
return False
state = {}
for transaction in chain[0][‘contents’][‘transaction’]:
state = update_state(transaction, state)
check_block_hash(chain[0])
parent = chain[0]
for block in chain[1:]:
state = check_block_validity(block, parent, state)
parent = block
return state


### 7.事务处理函数


最后,我们需要用事务处理函数将以上全部内容串起:



def add_transaction_to_chain(transaction, state, chain):
if valid_transaction(transaction, state):
state = update_state(transaction, state)
else:
raise Exception(‘Invalid transaction.’)
my_block = make_block(state, chain)
chain.append(my_block)
for transaction in chain:
check_chain(transaction)
return state, chain


### 举例


以上是我们的七个函数,那么该如何与之互动呢?首先我们需要用Genesis Block启动我们的区块链。这是我们的初始资金。


比方说,Tom,从10个硬币开始:



genesis_block = {
‘hash’: hash_function({
‘block_number’: 0,
‘parent_hash’: None,
‘transaction_count’: 1,
‘transaction’: [{‘Tom’: 10}]
}),
‘contents’: {
‘block_number’: 0,
‘parent_hash’: None,
‘transaction_count’: 1,
‘transaction’: [{‘Tom’: 10}]
},
}
block_chain = [genesis_block]
chain_state = {‘Tom’: 10}


接下来,Tom给了Medium一些硬币:



chain_state, block_chain = add_transaction_to_chain(transaction={‘Tom’: -1, ‘Medium’: 1}, state=chain_state, chain=block_chain)


状态就会更新成:





### 最后

> **🍅 硬核资料**:关注即可领取PPT模板、简历模板、行业经典书籍PDF。  
> **🍅 技术互助**:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。  
> **🍅 面试题库**:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。  
> **🍅 知识体系**:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值