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

001/Go语言构建区块链(mooc)的更多相关文章

  1. 用Hyperledger Fabric(超级账本)来构建Java语言开发区块链的环境

    面向 Java 开发人员的链代码简介 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger Fabric v0.6 来构 ...

  2. Go语言开发区块链只需180行代码

    区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块. ...

  3. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

  4. 使用Go语言编写区块链P2P网络(译)(转)

    转自:https://mp.weixin.qq.com/s/2daFH9Ej5fVlWmpsN5HZzw 外文链接: https://medium.com/coinmonks/code-a-simpl ...

  5. NGK公链如何构建区块链数字经济商业帝国?

    2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...

  6. [GO]用go语言实现区块链工作原理

    基本原理这里就不写了,只写一个简单demo的实现 首先得有一个区块用来存储区块头和区块体 type Block struct { Version int64 PreBlockHash []byte H ...

  7. [GO]go语言实现区块链工作证明(pow)原理

    package main import ( "math/big" "bytes" "math" "crypto/sha256&qu ...

  8. 阿里云BaaS:降低区块链应用门槛,用技术构建商业互信

    5月8日,阿里云召开区块链服务(BaaS)商业化发布会,会上对BaaS产品.业务应用场景及生态策略进行了全面解读. 对于广大IT服务商和开发者而言,构建区块链应用存在三大痛点问题:成本高,研发投入大. ...

  9. 未来-区块链-IBM:IBM 区块链技术开发社区

    ylbtech-未来-区块链-IBM:IBM 区块链技术开发社区 1.返回顶部 1. 开始学习 IBM Blockchain 101:开发人员快速入门指南 这篇快速入门指南适合不熟悉区块链技术,希望快 ...

随机推荐

  1. 解决tcp粘包

    粘包现象:只有tcp协议才会产生粘包,udp协议不会产生粘包 1.tcp协议下,发送端会采用一个优化算法(Nagle算法),把间隔时间短,数据比较小的包合并到一起,再一起发送过去,造成粘包 2.发送端 ...

  2. 【学习】018 Spring框架

    Spring的概述 Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架. 且可以和其他框架一起使用:Spring与Struts,  Spring与hibernate (起到整合(粘合)作 ...

  3. 磁盘,fdisk分区,MBR,dd命令

    光盘和磁盘.u盘.软盘.硬盘有什么区别 ①光盘: cdrom/dvdrom:光驱(光盘驱动器)    rom:只读    ram:可以擦写    cd:700M    dvd:4G ②软盘:flopp ...

  4. Vscode窗口被覆盖

    用Vscode用的好好的,突然就发现窗口被覆盖了 解决办法如下:1.ctrl+shift+p 快捷键打开如下界面, 2.接着在搜索框中输入settings,点击首先项:打开设置(json) 3.再se ...

  5. QQ输入法用户评价

    1.用户界面 用户界面简洁,并且可以随用户喜好自己更换,人性化,优化性比较大 2.记住用户选择 当输入一个字时,下一次输入这个拼音第一位的字就是上一次,或者使用次数最多的字.假如所使用的的字在后边,输 ...

  6. ubuntu重装--备份/配置

    https://github.com/wenlin-gk/document/blob/master/ubuntu%E5%A4%87%E4%BB%BD%2B%E9%85%8D%E7%BD%AE.txt

  7. TodoList案例

    我们今天模仿ToDoList进行一个简单的增,删,改,查的操作 可参考官网  http://www.todolist.cn/ 下边直接上代码 import React from 'react'; cl ...

  8. 包、time、datetime、hashlib和hmac、request、re

    目录 包 包的特点 time模块 datetime模块 hashlib模块和hmac模块 hmac密钥(加盐) typing模块 request模块 正则模块 以下必须得记住 哪些做了解 包 包,这里 ...

  9. 【NOIP2013模拟】导弹防御塔

    题目 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛lala~" "可是入侵者 ...

  10. SQL—事物

    [选择题]以下哪个选项是DBMS的基本单位,是构成单一逻辑工作单元的操作集合. A.进程 B.SQL C.事务 D.文件 分析: (1)一个事务包含一个或多个SQL语句,是逻辑管理的工作单元(原子单元 ...