区块链 01(简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过 哈希算法计算而成)

本文介绍了区块链的基本概念,特别是区块的构成,包括父区块哈希值、数据、时间戳和自身哈希值。这些字段通过哈希算法组合计算,形成区块链中每个区块的独特标识。
摘要由CSDN通过智能技术生成
"""区块包括区块头和区块体两个部分。区块头由版本、父区块哈希值、数据、Merkle根、时间戳、目标难度、
#Nonce值组成;区块体实际上可以包含任何内容,在比特币中包含交易输入数量、交易输出数量
和长度不等的交易记录等信息。在以太坊中的区块体中除了交易数据还包含中智能合约"""

#简单版区块链
"""简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过
哈希算法计算而成"""

import hashlib
from datetime import datetime

class Block:
    '''区块结构
               prev_hash:   父区块哈希值
               data:        区块内容
               timestamp:   区块创建时间
               hash:        区块哈希值
    '''
    def __init__(self,data,prev_hash):
        #将传入的父区块哈希值和数据保存到类变量中
        self.prev_hash = prev_hash
        self.data = data
        #获取当前时间
        self.timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

        #计算区块的哈希值


        message = hashlib.sha256()
        message.update(str(self.prev_hash).encode('utf-8'))
        message.update(str(self.data).encode('utf-8'))
        message.update(str(self.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,首先我们需要定义一个区块类,包含时间戳哈希值、上一个区块哈希值区块编号和交易数据属性。同时,我们需要定义一个交易类,包含发送者、接收者和交易金额属性。以下是一个简单的Java实现: ``` import java.util.ArrayList; import java.util.Date; public class Block { private int index; private long timestamp; private ArrayList<Transaction> transactions; private String previousHash; private String hash; public Block(int index, long timestamp, ArrayList<Transaction> transactions, String previousHash) { this.index = index; this.timestamp = timestamp; this.transactions = transactions; this.previousHash = previousHash; this.hash = calculateHash(); } public int getIndex() { return index; } public long getTimestamp() { return timestamp; } public ArrayList<Transaction> getTransactions() { return transactions; } public String getPreviousHash() { return previousHash; } public String getHash() { return hash; } public String calculateHash() { // 计算当前区块哈希值 } } public class Transaction { private String sender; private String receiver; private int amount; public Transaction(String sender, String receiver, int amount) { this.sender = sender; this.receiver = receiver; this.amount = amount; } public String getSender() { return sender; } public String getReceiver() { return receiver; } public int getAmount() { return amount; } } ``` 接下来,我们需要定义一个区块链类,包括添加区块、验证区块链、获取最后一个区块等方法。以下是一个简单的Java实现: ``` import java.util.ArrayList; public class Blockchain { private ArrayList<Block> blocks; public Blockchain() { this.blocks = new ArrayList<>(); // 创建创世区块 Block genesisBlock = new Block(0, new Date().getTime(), new ArrayList<>(), "0"); this.blocks.add(genesisBlock); } public Block getLatestBlock() { return this.blocks.get(this.blocks.size() - 1); } public void addBlock(Block block) { // 设置当前区块的上一个区块哈希值 block.previousHash = getLatestBlock().getHash(); // 计算当前区块哈希值 block.hash = block.calculateHash(); // 添加新区块 this.blocks.add(block); } public boolean isChainValid() { for (int i = 1; i < this.blocks.size(); i++) { Block currentBlock = this.blocks.get(i); Block previousBlock = this.blocks.get(i - 1); // 验证当前区块哈希值是否正确 if (!currentBlock.getHash().equals(currentBlock.calculateHash())) { return false; } // 验证当前区块的上一个区块哈希值是否等于前一个区块哈希值 if (!currentBlock.getPreviousHash().equals(previousBlock.getHash())) { return false; } } return true; } } ``` 以上是一个简单的Java实现,仅供参考。在实际应用中,需要考虑更多的安全性、性能和可扩展性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值