“用不到200行 Go 代码就能实现一个自己的区块链!” 听起来有意思吗?有什么能比开发一个自己的区块链更好的学习实践方法呢?那我们就一起来实践下!

因为我们是一家从事医疗健康领域的科技公司,所以我们采用人类平静时的心跳数据(BPM心率)作为这篇文章中的示例数据。让我们先来统计一下你一分钟内的心跳数,然后记下来,这个数字可能会在接下来的内容中用到。

通过本文,你将可以做到:

  • 创建自己的区块链

  • 理解 hash 函数是如何保持区块链的完整性

  • 如何创造并添加新的块

  • 多个节点如何竞争生成块

  • 通过浏览器来查看整个链

  • 所有其他关于区块链的基础知识

但是,对于比如工作量证明算法(PoW)以及权益证明算法(PoS)这类的共识算法文章中将不会涉及。同时为了让你更清楚得查看区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 网络比如“全网广播”这个过程等内容将在下一篇文章中补上。

让我们开始吧!

设置

我们假设你已经具备一点 Go 语言的开发经验。在安装和配置 Go 开发环境后之后,我们还要获取以下一些依赖:

go get github.com/davecgh/go-spew/spew

spew 可以帮助我们在 console 中直接查看 struct 和 slice 这两种数据结构。

go get github.com/gorilla/mux

Gorilla 的 mux 包非常流行, 我们用它来写 web handler。

我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。

go get github.com/joho/godotenv

godotenv 可以帮助我们读取项目根目录中的 .env 配置文件,这样我们就不用将 http port 之类的配置硬编码进代码中了。比如像这样:

ADDR=8080

接下来,我们创建一个 main.go 文件。之后我们的大部分工作都围绕这个文件,让我开始编码吧!

导入依赖

我们将所有的依赖包以声明的方式导入进去:

package mainimport ("crypto/sha256""encoding/hex""encoding/json""io""log""net/http""os""time""github.com/davecgh/go-spew/spew""github.com/gorilla/mux""github.com/joho/godotenv"
)

数据模型

接着我们来定义一个结构体,它代表组成区块链的每一个块的数据模型:

type Block struct {Index     intTimestamp stringBPM       intHash      stringPrevHash  string
}
  • Index 是这个块在整个链中的位置

  • Timestamp 显而易见就是块生成时的时间戳

  • Hash 是这个块通过 SHA256 算法生成的散列值

  • PrevHash 代表前一个块的 SHA256 散列值

  • BPM 每分钟心跳数,也就是心率。还记得文章开头说到的吗?

接着,我们再定义一个结构表示整个链,最简单的表示形式就是一个 Block 的 slice:

原文链接

只用200行Go代码写一个自己的区块链!相关推荐

  1. 用200行Go代码写一个自己的区块链!

    区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的.这篇文章就是帮助你使用 Go 语言来实现一个简单的区块链,用不到 200 行代码来揭示区块链 ...

  2. 只用120行Java代码写一个自己的区块链

    区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的.这篇文章就是帮助你使用 Java 语言来实现一个简单的区块链,用不到 120 行代码来揭示区 ...

  3. 200 行代码实现一个简单的区块链应用1

    区块链的基础概念很简单:一个分布式数据库,存储一个不断加长的 list,list 中包含着许多有序的记录.然而,在通常情况下,当我们谈到区块链的时候也会谈起使用区块链来解决的问题,这两者很容易混淆.像 ...

  4. 200 行代码实现一个简单的区块链

    英文原文:Lauri Hartikka 区块链的基础概念很简单:一个分布式数据库,存储一个不断加长的 list,list 中包含着许多有序的记录.然而,在通常情况下,当我们谈到区块链的时候也会谈起使用 ...

  5. 用java写一个简单的区块链(下)

    用java写一个简单的区块链(下) 2018年03月29日 21:44:35 java派大星 阅读数:725 标签: 区块链java 更多 个人分类: 区块链 版权声明:本文为博主原创文章,转载请标明 ...

  6. 人工智能换脸pythonapp_如何用小200行Python代码做一个换脸程序?

    今日不同往常,每周干货日,场主送出的不是成套的各类编程教学视频,而是一些轻应用实操.因为完成基本的理论学习之后,任何的呈现都在于如何应用及创新. 所以,在分享一系列教材类视频外,场主还会穿插着分享给大 ...

  7. python换脸完整程序_如何用小200行Python代码做一个换脸程序?

    今日不同往常,每周干货日,场主送出的不是成套的各类编程教学视频,而是一些轻应用实操.因为完成基本的理论学习之后,任何的呈现都在于如何应用及创新. 所以,在分享一系列教材类视频外,场主还会穿插着分享给大 ...

  8. python 之路200行Python代码写了个打飞机游戏

    先看一下项目结构 \ """ PlayPlane/ |-- bin/ | |-- main.py 程序运行主体程序 |-- config/ | |-- settings. ...

  9. python 之路,200行Python代码写了个打飞机游戏!

    先看一下项目结构 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 """ PlayPlane/ |-- bin/ |   |-- mai ...

最新文章

  1. ASP.NET 弹出窗口
  2. 快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用。
  3. [转载] 30分钟泛型教程
  4. AA065VD数据线连接错位的现象及分析总结
  5. C#语法:委托与方法
  6. 信息学奥赛一本通C++语言——1069:乘方计算
  7. 1010. 一元多项式求导 (25)-PAT乙级真题
  8. 杨森翔的书法(对联、斗方、圆光)
  9. 冲击波内幕点滴 (转)
  10. 联想 m73 黑苹果 软路由 esxi AIO
  11. firemonkey mysql,Firemonkey移动应用程序和远程MySQL
  12. w10隐藏我的电脑中子文件夹
  13. 使用Git的Kdiff3解决合并冲突 显示乱码的问题
  14. Stealing Harry Potter‘s Precious BFS+DFS
  15. 小白网卡带宽限速神器:wondershaper
  16. 新版本七彩影视双端源码+支持三端/对接苹果CMS
  17. 内存不能为读的解决办法
  18. 3个5相乘列乘法算式_三年级下册期中数学17个考点专题复习资料
  19. dapr的consistent hash
  20. 淘客推广如何提高转化率(产品篇)

热门文章

  1. 翻译网Gengo获1200万美元投资,价值何在
  2. 毛永胜计算机教师,中等职业学校网络计算机技术与应用
  3. 协同过滤入门介绍(转)
  4. Lory Carousel滑块具有CSS动画和触摸支持
  5. Pandas 对DataFrame的缺失值NA值处理4种方法总结
  6. BIG6——解决问题时收集、利用资料的思路
  7. Requests: 1, Fetched: 0, Skipped: 0, Processed: 0
  8. TFN系列超声波探伤仪使用评价怎么样?好不好用?
  9. 请问中文姓氏的拼音翻译成英文有何规律?
  10. 紫光同创国产FPGA学习之Fabric Inserter