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

  • 相关阅读:
    asmxwebservicebasicauthentication
    asp.net mvc uploading_and_returning_files
    HTTP请求格式 状态码404,404等
    HTTP BASIC 应用(2)
    [转载]HTML生成PDF(c#)
    [转载]ASP.NET MVC的例子中都使用了Repository模式
    spring MVC 如何接收前台传入的JSON对象数组并处理
    表格中的checkbox复选框 全选非全选 公共方法 及提交选中结果
    atitit.提升开发效率MDA 软件开发方式的革命(5)列表查询建模
    atitit.提升开发效率MDA 软件开发方式的革命(3)自动化建表
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9249985.html
Copyright © 2011-2022 走看看