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. 01.Linux-CentOS系统清理缓存脚本

    #自动清理缓存脚本 [root@k8s-node3 ~]# vim freemem.sh#! /bin/sh#当前已使用内存大小used=`free -m | awk 'NR==2' | awk '{ ...

  2. PAT Advanced 1035 Password (20 分)

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  3. 02python程序设计基础——字符串

    字符串方法 format 1.替换字段名 在最简单的情况下,只需向 format 提供要设置其格式的未命名参数,并在格式字符串中使用未命名字段.此时,将按顺序将字段和参数配对.你还可给参数指定名称,这 ...

  4. 02MySQL数据库

    1.MySQL启动和关闭 2.登录MySQL数据库 MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录. 格式1:cmd>  m ...

  5. Linux 安装 Composer

    Linux 安装 Composer  入门 练习环境: 虚拟机:Oracle VM VirtualBox. 系统:CentOS 7. 安装方式一: 参考网址:https://learnku.com/c ...

  6. libevent cs

    int evutil_make_listen_socket_reuseable(evutil_socket_t sock): 相当于执行以下操作 int one = 1; setsockopt(soc ...

  7. uboot if_changed函数

    u-boot编译过程分析 u-boot.lds: $(LDSCRIPT) prepare FORCE $(call if_changed_dep,cpp_lds) u-boot: $(u-boot-i ...

  8. 接口返回[object,Object]解决方法

    1.我们请求接口时有时会返回[object,Object],[object,Object],[object,Object].... 这个我们使用JSON.stringfity(data),就可以解决.

  9. php array_values()函数 语法

    php array_values()函数 语法 作用:返回数组的所有值(非键名)富瑞华大理石平台 语法:array_values(array) 参数: 参数 描述 array  必需.规定数组.    ...

  10. web上传大文件(>4G)有什么解决方案?

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...