一张图,看懂区块“链”

可能很多人都觉得区块链是一个多么新颖的技术,其实不然。它不过是旧瓶装新酒,本身并没有创造新的技术,只是将几种已经成熟的技术进行组合,是融合性创新。

而作为刚开始接触区块链,脑海没有一个具体概念,到底什么是区块链?

区块链技术「落地」

这是辽宁沈阳一小区大门,业主用多把锁串联在一起,形成了一套简单的门禁系统。谁家有车谁就加锁,每把锁都有标识,小区车主只需拿钥匙打开对应锁头,就能打开大门。这样就防止了外来车辆占用小区车位,不得不说,高手在民间。

在这里插入图片描述

在这个例子当中,我们都能知道什么区块链特点呢?

去中心化

可追溯

不可篡改

去中心化

每把锁代表着一家小区业主,他们不需要物业公司统一管理,只需要管理维护自己的锁就能保证系统的正常运行。

可追溯

在门禁系统中,每把锁记录了业主的相关信息,是跟业主一一绑定的,这就可以在异常情况下对破坏规则的业主进行追责,比如忘记锁门而导致外来车辆进入小区,这体现了该系统的可追溯性。

不可篡改

这是一个比较容易被初学者搞混的概念,所谓篡改,就是私自的不被认可的修改,而不是不能修改。

社会车辆要想进入小区,可能会采取盗用某一业主身份,多配一把钥匙或者添加一把锁,这就是篡改。而只要被业主委员会发现,就会及时纠正错误,将社会车辆清理出去,也就实现了不可篡改。

区块链是如何实现「不可篡改」的?

通过阅读 《文储研习社第05期 | 区块链核心科技》得知,密码学是区块链的核心。中本聪在比特币白皮书中开篇就说,比特币是基于密码学构建的去信任数字货币。

上篇文章我们知道了非对称加密,这篇,我将带大家认识新的加密算法:hash(哈希)算法。

什么是哈希算法?

「哈希算法是将任意长度的字符串变换为固定长度的字符串。」

举个例子:

区块 经过SHA256算法加密后得出

AE60964C61D97034CACA8AD7CA2A706ADF7DA5115E2812BB9B68C49BF28900CB

区块链 经过SHA256算法加密后得出

6E3110B33188C7A3056CB91E4C35EFE609E8E565DD560300502403EBDE626196

区块链核心科技 经过SHA256算法加密后得出

596F3068EC3ABAE66935A15841696BE4C6BDABF97C13F0D9C879723C0567A24E

从加密后的结果得知,无论加密前长度怎么样,结果都是固定长度。

哈希算法有什么特征?

正向快速、逆向困难、输入敏感

计算机能够迅速的将数据源:区块 计算得出 一串密文,这就是正向快速。

几乎所有计算机,无法通过 密文 还原到数据源 区块,这就是逆向困难。

从区块、区块链、区块链核心科技的加密结果都是无法预测,没有规律,这就是输入敏感。

哈希算法的运用

父区块头哈希值:前一区块的哈希值。

区块哈希就是对区块头进行哈希计算,得出某个区块的哈希值,用这个哈希值可以唯一确定某一个区块,相当于给区块设定了一个身份证号。

而区块与区块之间就是通过这个身份证号进行串联,从而形成了一个区块链的结构。

这样的结构也是区块链数据难以篡改的技术基础之一。

总结

区块链有3大特点,分别是去中心化、可追溯性,不可篡改。

密码学是区块链的核心。

除了非对称加密,还有哈希算法。

哈希算法有正向快速、逆向困难、输入敏感的特性。

区块链的“链”就是哈希算法计算出每个区块头部哈希,链接在一起了,所以就叫区块链。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用以下代码来在 Rust 中定义区块链的数据结构: ``` struct Block { // 区块头 header: BlockHeader, // 区块数据 data: Vec<u8>, // 当前区块的哈希 hash: Vec<u8>, } struct BlockHeader { // 前一个区块的哈希 prev_hash: Vec<u8>, // 当前区块的时间戳 timestamp: u64, // 其他区块头信息 ... } struct Blockchain { // 区块的 Vec blocks: Vec<Block>, } ``` 这里的 `BlockHeader` 结构体可以包含其他的区块头信息,如难度值、随机数等。 你也可以使用表来存储区块,这样的话 `Blockchain` 结构体可以使用如下代码定义: ``` struct Blockchain { // 当前区块 current_block: Option<Box<Block>>, // 区块总数 block_count: u64, } struct Block { // 当前区块的数据 data: Vec<u8>, // 当前区块的哈希 hash: Vec<u8>, // 下一个区块的指针 next: Option<Box<Block>>, } ``` 这种方法的优点是可以轻松地在区块链的头部或尾部插入新的区块,但缺点是需要使用智能指针来管理内存,并且在访问中间的区块时需要从头开始遍历整个。 ### 回答2: 在Rust中,我们可以使用struct结构体来定义区块链的数据结构。区块可以定义为一个拥有多个字段的结构体,其中包括前一个区块的哈希值(previous_hash)、当前区块的哈希值(block_hash)、时间戳(timestamp)、数据(data)等。 一个简单的区块结构体定义如下: ```rust pub struct Block { pub previous_hash: String, pub block_hash: String, pub timestamp: u64, pub data: String } ``` 接下来,我们可以使用Vec(向量)来表示整个,将区块按顺序存储在Vec中。这样,每次添加新的区块时,我们可以将其追加到的末尾。整个的数据结构定义如下: ```rust pub struct Blockchain { pub chain: Vec<Block> } ``` 接着,我们可以实现新区块的创建和的添加方法。以下是创建区块的函数示例: ```rust impl Block { pub fn new(previous_hash: String, data: String) -> Block { let timestamp = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs(); let block_hash = Self::generate_block_hash(&previous_hash, &data, timestamp); Block { previous_hash, block_hash, timestamp, data } } fn generate_block_hash(previous_hash: &str, data: &str, timestamp: u64) -> String { // 哈希生成逻辑 // ... } } ``` 以下是向中添加新区块的函数示例: ```rust impl Blockchain { pub fn add_block(&mut self, block: Block) { self.chain.push(block); } } ``` 通过定义这样的数据结构和方法,我们可以在Rust中实现一个简单的区块链。当然,并非所有的细节都在这个简单的示例中覆盖到,但是这可以帮助您理解如何使用Rust来定义区块的数据结构。 ### 回答3: Rust是一种系统级编程语言,非常适合用于构建高性能的区块链数据结构。在Rust中,我们可以使用结构体和枚举类型来定义区块链的数据结构,包括区块。 首先,我们定义一个区块的结构体,包含以下字段: - index:区块的索引,表示该区块在整个中的位置; - timestamp:区块生成的时间戳; - data:区块中存储的数据; - previous_hash:前一个区块的哈希值; - hash:当前区块的哈希值。 接着,我们定义一个的结构体,包含以下字段: - blocks:一个包含区块的向量,表示整个中的所有区块。 为了方便操作区块链,我们还可以在的结构体上实现一些方法,比如添加新区块、计算区块哈希值等。 在初始化的时候,我们会创建一个创世区块,即第一个区块。创世区块的索引为0,前一个区块哈希值为空,数据可以是任意值,而哈希值通常是通过计算区块中的信息得到的。 添加新区块时,我们需要为其设定正确的索引、前一个区块哈希值和时间戳,然后计算当前区块的哈希值,并将区块添加到的末尾。 定义区块链的数据结构是区块链开发的基础,通过Rust强大的类型系统和所有权模型,我们可以确保数据的安全性和高效性。另外,Rust还提供了各种并发和异步编程特性,非常适合用于构建区块链的并发执行和共识算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

区块链±海饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值