zoukankan      html  css  js  c++  java
  • 001/Go语言构建区块链(mooc)

    1。区块链发展与现状

    视频地址:https://www.imooc.com/video/17452

     

    注意:

    比特币与以太坊最大的区别在于:

    以太坊引入了对图灵完美智能合约的支持,人们可以将任何业务逻辑以合约的形式写入区块链,在以太坊前,发行自己的数字货币,就需要搭建一个独立的区块链网络。

    比较稳定,被拿来研究的区块链系统:

    【1】。超级账本

             本身不是一个完整的区块链系统,而是方便企业搭建自己的区块链框架。各个组件,如数据存储,共识算法等,都可以灵活替换与组装。对智能合约也有很好的支持。

             因此常被大型行业如银行/金融机构来构建联盟链。

    【2】。以太坊

    运行环境:

    1。装好GO语言环境

    2。装好IDE或自己喜欢的文本编辑器:如sublime

    3。我的环境:mac + GoLand

    2。什么是区块链

    【1】区块链的分类:

    (1)。公有链

              任何人都能读取,任何人都能发动交易,交易能够获得有效确认,任何人都能参与其共识过程的区块链。

              如比特币,以太坊,EOS。

    (2)。私有链

             一般为公司或组织内使用。

            如在做区块链应用时,自己在本机上搭建的开发节点和在公司内网测试节点。

    (3)。联盟链

            有竟争又需要合作的场景。技术上联盟链是指共识过程受到预选节点控制的区块链。只有准入联盟的节点才可以参与其中。

          如Fabric R3联盟 / EEA (以太坊企业联盟)/阳光链(众筹平台青龙筹)

    【2】区块链解决问题:价值传递

    【3】什么是区块链:

    区块链就是一种特殊的分布式数据库

    首先:区块链作用是--存储信息 (任何需要保存的数据均可以写入区块链,也可从里面读取。所以它是--数据库)

    其次:任何人都可以架设服务器加入区块链网络,成为一个节点。所以它具有--分布式系统特点

    区块链世界里面,没有中心节点,每个节点都是平等的。都保存了整个数据库,可向任何节点写入&读取数据。因为所有的节点都会同步。保证区块链一致。

    上述:节点分布在全国各个地方,节点与节点之间相互连接。你往任何一个节点发送请求,请求数据都会快速的同步到网络上的所有节点。

    说明:

    【1】。没有中心,无管理员

             如此庞大的网络没有中心也没有管理员,都是通过区块链协议自管理。

    【2】。全民记账

            注:记账而不是记数据 (因为区块链主要用来做价值传递,对于价值传递,重要的是可信的账本。用来记录所有的交易数据。所谓全民记账是这个账本在区块链每个节点上都有一份。每个节点都可以在遵循区块链协议的前提下,往这个账本上写入交易数据)

    【3】。只能增查,不能改删

            注:在区块链上的数据操作,指的是对区块链上的交易数据进行操作,而不是最终的状态。

            我们进行转账操作时,余额变动,

    【3】区块链特点:

    (1)。不可攥改 :区块链只支持添加和查询,不能修改和删除 (区块链上没有404)

    (2)。可追溯 :

    (3)。去中心化:对数据不可攥改的保证,不能依赖于一个中心。

    3。区块链架构模型

    说明:

    数据层-》网络层-》共识层-》激励层-》合约层  (共5层)一起构成区块链基础架构的核心系统。

    应用层:代表基于区块链技术构建的各种应用。与区块链5个核心系统分开部署,通过远程过程调用RPC,与区块链核心系统进行交互。

    【1】数据层 & 网络层 & 共识层  (构建区块链必要元素)

          A。数据层

          数据层封装了底层数据的链式结构,以及相应的非对称公私钥加密技术和时间戳技术。(整个区块链技术中最底层的数据结构)

          B。网络层

          网络层包括p2p组网机制,数据传播机制和数据验证机制等。

         C。共识层

         共识层封装了网络节点的各类共识机制算法。共识机制算法是区块链的核心技术,这决定了到底是谁来进行计算。计算方式将影响整个系统的安全性和可靠性。

         POW/EOS/DPOS/PBFP等共识算法。

    【2】。激励层 (主要应用公有链)

        主要用在公有链中。必须激励遵守规则参与计算的节点。惩罚不遵守规则的节点。(私有链 & 联盟链中不一定要激励,因为参与计算的节点往往在链外就完成了博弈)

    【3】。合约层

        用来封装各类脚本,算法和智能合约。是区块链可编程的基础。可简单理解为一份自定义的电子合同。并且这个合同可以在达到一定触发条件后自动执行,不需要人工干预。也可在不满足条件时自动解约。

    【4】。应用层

       应用层封装了区块链的应用场景和案例。如搭建的以太坊等〜

    4。区块链链式结构

    链式结构:

    链式结构最基础构成单无----区块(由区块头和区块体组成)

    区块体:存储交易数据

    区块头:父区块hash

    问题:为什么每一个区块头都要存储上一下区块的hash值?(同一个值进行hash计算的结果是一致的。)

    理解--hash函数

    4。链式结构小结

    注意:区块1的值有一点改动,hash值都会变化。区块2就会引用一个错误的地址。即区块链2引用的区块1的hash值无效。

    区块1值的变动,会引起区块2hash值的变动。。。。依次。。。(要改动所有区块。)

    5。构建自己的区块链

    组成部分:

    (一)。实现链式结构

    (二)。实现一个简单的http server,对外暴露读写接口

    步骤:

    step1:创建block   (开发环境:GoLand)

            A。创建工程demochain

                 demichain /  Block.go

            B。创建Block文件

            C。创建Block结构体与函数

    结构体:

    计算hash值

    生成新区块

    创始区块

    step2:创建blockchain

    视频地址:https://www.imooc.com/video/17447

    A。创建blockchain文件 (Blockchain.go)

    B。创建blockchain结构体与相关方法

    定义blockchain结构体:

    定义相关方法 (向区块链里添加区块)

    验证(不是所有区块都可以添加到区块链)

    step3:创建httpserver

    视频地址:https://www.imooc.com/video/17448

    不仅可以在本地访问也可以提供API接口访问。

    包:rpc / 文件 Server.go

    (三)。效果展示(3个区块链,可通过地址栏添加新的区块链)

    视频地址:https://www.imooc.com/video/17445

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9249985.html
Copyright © 2011-2022 走看看