BTC使用的技术

翻开新闻一看,比特币又突破5万2刀了。刚好公司的主业也开始在挖矿业务布局(没错,就是挖矿),全公司掀起了了一阵区块链学习热潮。刚好去哔哩哔哩学习了清华大学的区块链通识课,感觉挺清晰的,后面打算自己用go语言弄个啥币哈。先理一下比特币实现的一些技术。

密码学知识

比特币主要使用了SHA-256算法,这是一个单向散列函数,也就是我们常说的hash函数。单向散列函数有两个非常重要的属性。 单向函数(One-way Function)是正向计算容易,逆向运算困难的函数。也就是说,给 定你一个输入,你很容易计算出输出;但是给定你一个输出,你却很难计算出输入是什 么。 散列函数(Hash Function)是一个可以把任意大小的数据,转行成固定长度的数据的函 数。比如说,无论输入数据是一个字节,或者一万个字节,输出数据都是 16 个字节。 单向散列函数既是一个单向函数,也是一个散列函数。它不仅要满足单向函数的要求,还 要满足散列函数的要求。你还记得这两种函数的要求吗?其中,最要紧的就是:逆向运算困难; 构造碰撞困难。比如MD5,输出固定是32个字符,从md5计算过的值推导输入值,需要大量的计算。

树,链表等数据结构

比特币是使用编程代码实现的一个程序,为了实现btc区中心化,不可篡改等特点,作者设计了链表的结构把所有数据串联起来(这就是为啥我们称为区块链技术,是现有btc,然后人们才把这种方式称为区块链技术)。还有一种非常重要的数据结构,Merkle Tree(默克尔树),每个区块包含的交易信息其实是使用一颗merkle Tree保存的,这棵树类似二叉树。

p2p网络/分布式系统

很多人把区块链成为分布式账本,其实区块链就是一种分布式系统。每一个运行的客户端都是一个节点,他们通过p2p的方式联系在一起,最终形成了btc系统。 比特币p2p网络,每个节点都是平等的。要加入这个网络,至少要有一个种子结点(seed node),和种子结点联系,它会告知它所知道的网络中的其它结点(有点像构造路由表的过程)。结点之间通过TCP来通信,有利于穿透防火墙。要离开网络也不必通知其它结点,只需要直接退出应用程序,其它结点一直没有听到你的消息,过一段时间就会将你删除掉。 分布式系统另外一个难点就是如何达成共识,因为每个节点都是平等的,每个节点都有往区块链添加区块的功能。如何保持共识需要一套共识机制。 基本上BTC就是用到上面的技术点,其实都是出现了几十年的技术栈了,但是通过发明者天才的设计,却打开了改变世界的大门。

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

猜你喜欢

转载自blog.csdn.net/littlexiaoshuishui/article/details/114378444