zoukankan      html  css  js  c++  java
  • 快速理解区块链

        区块链英语:blockchain或block chain)是借由密码学串接并保护内容的串连交易记录(又称区块)。每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易数据(通常用默克尔树算法计算的散列值表示),这样的设计使得区块内容具有难以篡改的特性。用区块链所串接的分布式账本能让两方有效纪录交易,且可永久查验此交易。

    网站:https://anders.com/blockchain/blockchain.html模拟实现过程

    比特币严格意义上是第一个去中心化的app

    分布式资料库

    一个人就是一个节点,全部都有相同的数据,除非全部攻击,否则就是还存在该数据,攻击的成本非常高

    区块链:

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
    它只是一个技术手段,会把全部的交易过程记录下来,维护一份连续不断的交易记录档,数据是不可以更改的,并且可以知道很久很久之前的数据
    区块链的每一笔资料都称为一个区块(Block),由多个区块组成的链,说白了就是一个分布式的数据库

    特性:溯源,不可篡改

    区块:
    每一个区块包含不止一个交易,每一个区块都会包含上一个区块的哈希值,每一个区块存储block(区块编号),nonce,上一个区块的哈希值,这个区块的哈希值,Data(数据,包含交易数据等)


    所有连接在一起的区块被称为链(Chain),每一个区块都会与另一个区块产生链接,每一个区块都会包含上一个区块的哈希值(pre就是上一个区块的哈希值)


    nonce:

    满足某个区块的难度的所申请的随机数,一直穷举直到哈希前面的4位为0,满足我们的难度要求,nonce也会发生相对应的改变,nonce简单的说就是满足某个难度的随机数(让哈希前几位为0)
    当点击挖矿的时候(mine),就是一直校验前面所对应的哈希值前面四位是否为0,如果满足,则挖矿成功(nonce值满足条件的时候)


    mine(挖矿):

    就是计算nonce值的过程,如果要求挖矿难度是4的话,那么哈希前4位是0以上,不断不断的去找
    哈希:在区块里面是由block,nonce,data所生成的


    数字货币:比特币,以太坊,EOS等

    矿机:

    要有cpu,算力,负责产生区块的机器又称为矿机
    机器的主人:矿工,计算整个nonce值的过程就是挖矿


    难度值

    哈希值前面0的个数,如果难度是10的话,那么要求前面的block,nonce,data生成的hash前面是由10个0的
    nonce是随机变化的,穷举法,一直到hash是符合要求(前面10个位0,难度值10),才是挖矿成功

    难度值:就是哈希前面0的个数

    tx:就是交易,我们做出的交易


    区块链如何去运作:
    产生区块的过程会经过复杂的密码学运算,复杂的密码学运算可以杜绝记录篡改和修订
    每个区块在成功产生之后是无法修改的,产生区块的过程又称为挖矿(minning)

    矿工:负责挖矿的人

    每一笔资料都可以通过连接找到,所有可靠的历史资料都具有溯源性

    由于是分布式的数据库,所以具有去中心化的特性,去中心化意味着资料会分布到多个节点

    共同维护整份资料库:
    没人说自己的区块才是合法有效的区块,多人验证之后的区块才是合法有效的区块,超过50%的节点验证过的区块才是合法有效的区块


    每个节点:
    必须存储所有区块(但有新的设计可以让节点存储部分区块),每一个节点协助验证区块的有效性

    任何一笔资料被篡改:
    都将破坏节点的完整性,任何一笔资料被篡改的可能性微乎其微

    去中心化的写作包含两种物件类型:交易个区块


    只要你修改某一条区块上面的数据的话,就会破坏整个区块链的完整性,修改之后需要对他进行挖矿,符合满足的哈希值的才可以,如果前面的区块修改的haul,那么后面的区块也要相对应的修改才可以,如果修改的是第0个区块的话,那么所有的区块都需要进行挖矿一遍,整个区块的结构都会发生变化,所以区块链上面的数据不可以修改,如果要改的话,成本是非常高的


    整个去中心化的系统有多个节点的话,如果大多数节点相同的话,那么少数服从多数,少数的节点(由一个一个的区块连接成)会被废弃掉,节点之间达成共识.

  • 相关阅读:
    手把手教你在CSDN博客中插入图片之剑走偏锋系列
    PCD文件格式详解及在PCL下读取PCD文件
    C 基于数组存储的堆栈实现
    C++ Opencv remap()重映射函数详解及使用示例
    C 线性表的链式存储实现及插入、删除等操作示例
    C 线性表的顺序存储实现及插入、删除等操作示例
    C 单向链表就地逆转
    C 单向链表的创建、插入及删除
    [C#]SQL Server Express LocalDb(SqlLocalDb)的一些体会
    [C#]关于DataDirectory的一些思考
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10660751.html
Copyright © 2011-2022 走看看