Github上有一个Repo,是一个使用Go语言(golang),不到200行代码写的区块链源代码,准确的说是174行。原作者起了个名字是Codeyourownblockchaininlessthan200linesofGo!而且作者也为此写了一篇文章。https://medium.com/@mycoralhealth/code-your-own-blockchain-in-less-than-200-lines-of-go-e296282bcffc
这篇文章是一个大概的思路和代码的实现,当然还有很多代码的逻辑没有涉及,所以我就针对这不到200行的代码进行一个分析,包含原文章里没有涉及到的知识点,对Go语言,区块链都会有一个更深的认识。
所有的源代码都在这里:https://github.com/nosequeldeebee/blockchain-tutorial/blob/master/main.go
在源代码的开头,是作者引入的一些包,有标准的,也有第三方的。像sha256,hex这些标准包是为了sha-256编码用的,其他还有启动http服务,打印日志的log,并发控制的sync,时间戳的time。
第三方包有三个,其中两个我都详细介绍过,相信大家不会陌生。
go-spew是一个变量结构体的调试利器,可以打印出变量结构体对应的数据和结构,调试非常方便。
gorilla/mux是一个web路由服务,可以很简单的帮我们构建web服务。
不过目前用gin的比较多,也推荐使用gin https://github.com/gin-gonic/gin。
godotenv是一个读取配置文章的库,可以让我们读取.env格式的配置文件,比如从配置文件里读取IP、PORT等。不过目前配置文件还是推荐YAML和TOML,对应的第三方库是:
gopkg.in/yaml.v21 https://github.com/BurntSushi/toml
既然要写一个区块链,那么肯定的有一个区块的实体,我们通过golang的struct来实现。
Block代表每个区块的实体类型
type Block struct { Index int Timestamp string BPM int Hash string PrevHash string }
Block里包含几个字段:
Index就是Block的顺序索引
Timestamp是生成Block
2021年2月21日,比特币创下58330.57美元的新高,逼近6万美元的关口,十年间上涨6500余倍, Elon Musk(Tesla创始人)获利超过9亿美元。其实比特币只是区块链的众多应用之一。那投资者怎么进行区块链...
最近,区块链和比特币这个词非常流行,但什么是区块链,什么是比特币呢?区块链和比特币之间的关系是什么?这些将是本文将涉及的问题。区块链与法律的交错可分为三个方面:首先是区块链行业的监管。以典型的分散比特币为例,由于没有集中...
William 是一位风险投资者和商业区块链的作者。他计划成立一家专注于区块链和加密货币的投资公司。这个名字叫瑞士 Jabre Capital 的新公司旨在投资区块链初创公司、特定代币和公开交易的加密货币。据报道,它不是...
区块链加密算法是该技术的重要组成部分。为了方便想学习区块链技术的朋友更好地理解,燕牛科技区块链技术开发公司的技术人员分享了区块链领域常用的四种加密算法。有关更多信息,请阅读以下文章。1. 哈希算法比特币系统中使用的哈希函...