摘要:客户端与区块链网络的交互1.浅析FabricPeer节点HyperledgerFabric,也称之为超级账本,是由IBM发起,后成为Linux...
客户端与区块链网络的交互
1. 浅析 Fabric Peer 节点
Hyperledger Fabric,也称之为超级账本,是由 IBM 发起,后成为 Linux 基金会 Hyperledger 中的区块链项目之一。
Fabric 是一个提供分布式账本解决方案的平台,底层的账本数据存储使用了区块链。区块链平台通常可以分为公有链、联盟链和私有链。公有链典型的代表是比特币这些公开的区块链网络,谁都可以加入到这个网络中。联盟链则有准入机制,无法随意加入到网络中,联盟链的典型例子就是 Fabric。
Fabric 不需要发币来激励参与方,也不需要挖矿来防止有人作恶,所以 Fabric 有着更好的性能。在Fabric 网络中,也有着诸多不同类型的节点来组成网络。其中 Peer 节点承载着账本和智能合约,是整个区块链网络的基础。在这篇文章中,会详细分析 Peer 的结构及其运行方式。
在本文中,假设读者已经了解区块链、智能合约等概念。
本文基于 Fabric1.4 LTS。
区块链网络是一个分布式的网络,Fabric 也是如此,由于 Fabric 是联盟链,需要准入机制,所以在网络结构上会复杂很多,下面是一个简化的 Fabric 网络:
各个元素的含义如下:
对于 Fabric 网络,外部的用户需要通过客户端应用,也就是图中的 A1、A2 或者 A3 来访问网络,客户端应用需要通过 CA 证书表明自己的身份,这样才能访问到 Fabric 网络中有权限访问的部分。
在上面的网络中,共有四个组织,R1、R2、R3 和 R4。其中 R4 是整个 Fabric 网络的创建者,网络是根据 NC4 配置的。
在 Fabric 网络中,不同的组织可以组成联盟,不同的联盟之间数据通过 Channel 来隔离。Channel 中的数据只有该联盟中的组织才能访问,每一个新的 Channel 都可以认为是一条新的链。与其他的区块链网络中通常只有一条链不一样,Fabric 可以通过 Channel 在网络中快速的搭建出一个新的区块链。
上面 R1 和 R2 组成了一个联盟,在 C1 上交易。R2 同时又和 R3 组成了另外一个联盟,在 C2 上交易。R1 和 R2 在 C1 上交易时,对 R3 是不可见的,R2 和 R3 在 C2 上交易时,对 R1 是不可见的。Channel 机制提供了很好的隐私保护能力。
Orderer 节点是整个 Fabric 网络共有的,用来为所有的交易排序、打包。比如上面网络中 O4 节点。本文不会对 Orderer 节点进行详细说明,可以把这个功能理解为比特币网络中的挖矿过程。
Peer 节点表示网络中的节点,通常一个 Peer 就表示一个组织,Peer 是整个区块链网络的基础,是智能合约和账本的载体,Peer 也是本文讨论的重点。
一个 Peer 节点可以承载多套账本和智能合约,比如 P2 节点,既维护了 C1 的账本和智能合约,也维护了 C2 的账本和智能合约。
为了可以更深入了解 Peer 节点的作用,先了解一下 Fabric 整体的交易流程。整体的交易流程图如下:
Peer 节点按照功能来分可以分为 背书节点 和 记账节点 。
客户端会提交交易请求到背书节点,背书节点开始模拟执行交易,在模拟执行之后,背书节点并不会去更新账本数据,而是把这个交易进行加密和签名,然后返回给客户端。
客户端收到这个响应之后就会把响应提交到 Orderer 节点,Orderer 节点会对这些交易进行排序,并打包成区块,然后分发到记账节点,记账节点就会对交易进行验证,验证结束之后,就会把交易记录到账本里面。
一笔交易是否能成功是根据背书策略来指定的,每一个智能合约都会指定一个背书策略。
Peer 节点代表着联盟链中的各个组织,区块链网络也是由 Peer 节点来组成的,而且也是账本和智能合约的载体。
通过对上面交易过程的了解可以知道,Peer 节点是主要的参与方。如果用户想要访问账本资源,都必须要和 peer 节点进行交互。在一个 Peer 节点中,可以同时维护多个账本,这些账本属于不同的 Channel 。每个 Peer 节点都会维护一套冗余账本,这样就避免了单点故障。
Peer 节点根据在交易中的不同角色,可以分成背书节点(Endorser)和记账节点(Committer),背书节点会对交易进行模拟执行,记账节点才会真正将数据存储到账本中。
账本可以分成两个部分,一部分是区块链,另一部分是 Current State,也被称之为 World State。
区块链上只能追加,不能对过去的数据进行修改,链上也包含两部分信息,一部分是通道的配置信息,另一部分是不可修改,序列化的记录。每一个区块记录前一个区块的信息,然后连成链,如下图所示:
第一个区块被称之为 genesis block,其中不存储交易信息。每个区块可以被分为 区块头 、 区块数据 和 区块元数据 。区块头中存储着当前区块的区块号、当前区块的 hash 值和上一个区块的 hash 值,这样才能把所有的区块连接起来。区块数据中包含了交易数据。区块元数据中则包括了区块写入的时间、写入人及签名。
其中每一笔交易的结构如下,在 Header 中,包含了 ChainCode 的名称、版本信息。Signature 就是交易发起用户的签名。Proposal 中主要是一些参数。Response 中是智能合约执行的结果。Endorsements 中是背书结果返回的结果。
WorldState中维护了账本的当前状态,数据以 Key-Value 的形式存储,可以快速查询和修改,每一次对 WorldState 的修改都会被记录到区块链中。WorldState 中的数据需要依赖外部的存储,通常使用 LevelDB 或者 CouchDB。
区块链和 WorldState 组成了一个完整的账本,World State 保证的业务数据的灵活变化,而区块链则保证了所有的修改是可追溯和不可篡改的。
在交易完成之后,数据已经写入账本,就需要将这些数据同步到其他的 Peer,Fabric 中使用的是 Gossip 协议。Gossip 也是 Channel 隔离的,只会在 Channel 中的 Peer 中广播和同步账本数据。
智能合约需要安装到 Peer 节点上,智能合约是访问账本的唯一方式。智能合约可以通过 Go、Java 等变成语言进行编写。
智能合约编写完成之后,需要打包到 ChainCode 中,每个 ChainCode 中可以包含多个智能合约。ChainCode 需要安装,ChainCode 需要安装到 Peer 节点上。安装好了之后,ChainCode 需要在 Channel 上实例化,实例化的时候需要指定背书策略。
智能合约在实例化之后就可以用来与账本进行交互了,流程图如下:
用户编写并部署实例化智能合约之后,就可以通过客户端应用程序来向智能合约提交请求,智能合约会对 WorldState 中数据进行 get、put 或者 delete。其中 get 操作直接从 WorldState 中读取交易对象当前的状态信息,不会去区块链上写入信息,但 put 和 delete 操作除了修改 WorldState,还会去区块链中写入一条交易信息,且交易信息不能修改。
区块链上的信息可以通过智能合约访问,也可以在客户端应用通过 API 直接访问。
Event 是客户端应用和 Fabric 网络交互的一种方式,客户端应用可以订阅 Event,当 Event 发生时,客户端应用就会接受到消息。
事件源可以两类,一类是智能合约发出的 Event,另一类是账本变更触发的 Event。用户可以从 Event 中获取到交易的信息,比如区块高度等信息。
在这篇文章中,首先介绍了 Fabric 整体的网络架构,通过对 Fabric 交易流程的分析,讨论了 peer 节点在交易中的作用,然后详细分析了 peer 节点所维护的账本和智能合约,并分析了 peer 节点维护账本以及 peer 节点执行智能合约的流程。
文 / Rayjun
[1] https://hyperledger-fabric.readthedocs.io/zh_CN/release-1.4/whatis.html
[2] https://developer.ibm.com/zh/technologies/blockchain/series/os-academy-hyperledger-fabric/
[3] https://en.wikipedia.org/wiki/Gossip_protocol
2. 轻用户是什么意思
什么是轻客户端?为什么你需要了解它
播报文章
在以太坊的案例中,过去只有一种类型的节点,现在称为全节点。这个软件负责验证和转播网络上的交易和区块。由于无信任环境(开放的互联网)和区块链的性质,每个全节点需要下载并验证每个区块,所以就是在每个区块中验证每一笔交易。
Parity Ethereum 和 Geth 这两个最受欢迎的以太坊客户端,今天都可以在一台中等功率的笔记本电脑上运行。然而,下载和验证整个区块链的区块是需要时间和资源的。例如,现在需要使用 SSD 来完全同步以太坊区块链。HDD 无法跟上每秒所需的输入/输出操作。
全节点使用案例
现在,组织和个人运行全节点是因为他们的业务需要。想想矿工、区块浏览器、交易所。个人用户可能希望运行全节点,因为这是与区块链交互的最安全方式。在一个更小的范围内,他们也可能是纯粹的利他主义来帮助网络。7*24 小时全天候的运行一个全节点需要良好的知识和资源水平,大多数用户不愿意投资是可以理解的。除了矿工,没有什么内置的激励来运行一个全节点,尽管这部分基础设施对网络至关重要。
因此,大多数与区块链交互的用户,不管是否自愿,都会使用一个中心的基础设施。最流行的软件钱包默认依赖于第三方托管的节点。这些客户端连接到远程节点,并以非密码验证的方式完全信任其响应。它的积极方面显然是增强了用户体验,因为这些钱包的用户不需要运行自己的节点。但是,它们被迫信任第三方节点。默认情况下,Metamask、MyEtherWallet 和 MyCrypto 连接到远程节点,但如果用户愿意,仍然允许他们连接到自己的本地节点。这不是 Jaxx 或 Exos 钱包的情况,它们默认连接到远程节点,而没有连接到用户自己的本地节点的选项。这里没有提到移动钱包,因为手机无法运行全节点。
像 Infura 这样的公司致力于运行全节点,并免费提供给那些需要它们的人。抽象出同步一个全节点的麻烦,允许任何用户轻松地访问区块链。这样的解决方案有助于让更多用户能够访问以太坊。然而,尽管这一举措是对生态系统的一个重大补充,但它代表了一个中心化的单一失败点,与去中心化的区块链理念背道而驰。直到几个月前,钱包开发商还没有其他选择。
“我们的目标是创建一个兼容不同程度‘轻’的协议,从几乎不存储任何内容的客户端到几乎存储所有内容的客户端。”
— PIP, Parity Light Protocol(https://wiki.parity.io/The-Parity-Light-Protocol-%28PIP%29)
轻量级替代方案:轻客户端
轻客户端或轻节点是连接到全节点与区块链交互的软件。与全节点对应节点不同,轻节点不需要运行 24/7 或读写区块链上的大量信息。事实上,轻客户端并不直接与区块链交互,而是使用全节点作为中介。轻客户端依赖于全节点去执行许多操作,从请求最新的区块头到请求帐户中的余额。
轻客户端协议的设计方式允许它们以最小信任的方式与全节点交互。这是一个需要理解的关键方面,因此让我们回顾一下以太坊区块链的基础知识:
1. 普通用户使用全节点、轻节点或受信任的远程节点在网络上发送交易。
2. 全节点从网络上的对等节点接收交易,检查这些交易的有效性,并将它们广播到网络。
3. 矿工是连接到特定软件的全节点。他们像一个普通的全节点一样从网络上接收和验证交易,但是会额外投入大量的精力来寻找问题的解决方案,才会被允许生成下一个区块。矿工使用的全节点通过应该将哪个区块添加到区块链并构建在其上达成共识。任何在其上构建了至少 10 个块的块都被认为是安全的,因为它包含的交易被还原的概率非常低。
现在,回到我们的轻客户端。作为起点,轻客户端需要下载区块链的区块头。轻客户端不需要为它对全节点的每个请求去信任全节点。这是因为区块头包含一个名为 Merkle 树根的信息。Merkle 树根就是区块链上有账户余额和智能合约存储的所有信息的指纹。如果有任何微小的信息改变,这个指纹也会改变。假设大多数矿工都是诚实的,那么区块头和他们所包含的指纹就被认为是有效的。轻客户端可能需要从全节点请求信息,例如特定帐户的余额。轻客户端知道每个区块的指纹,就可以验证全节点给出的答案是否与其拥有的指纹匹配。这是一个强有力的工具,可以在事先不知情的情况下证明信息的真实性。
由于轻客户端需要发送多个请求来执行简单的操作,因此所需的总体网络带宽高于全节点的带宽。另一方面,所需的资源和存储量比全节点的资源和存储量低几个数量级,同时实现了非常高的安全级别。只需要大约 100MB 的存储空间和较低的计算能力,轻节点就可以在移动设备上运行!这意味着手机可以以去中心化的方式访问区块链。
因为只需要一个全节点的一小部分信息,所以一个轻节点可以更快地与区块链同步。目前,将整个以太坊主网区块链同步,轻客户端大约只需要一个小时,但节点同步超过几秒对任何应用程序来说都太多了。为轻客户端开发的解决方案可以快速与区块链顶部同步,尽管这些解决方案通常需要权衡。目前,轻客户端在其代码中内置了一个可信的区块链检查点。正因为如此,客户端只需要下载最新的区块头文件,就可以在几秒钟内实现同步。轻客户端用户信任客户端开发人员集成有效的检查点。这种折衷被认为是可以接受的,因为用户已经需要信任客户端实现的开发人员。为了以去中心化的方式快速执行同步,Parity Technologie 目前开发了一种替代解决方案,允许轻客户端以与全节点类似的方式执行扭曲同步(https://wiki.parity.io/Warp-Sync)。
未来,轻客户端会遍布各地。 — Marty McFly
轻客户端的挑战
轻客户端非常适合主流应用,例如发送一些交易和验证帐户余额。对轻客户端的主要批评是,轻客户端不能直接帮助网络。它们不验证除自己需要的信息以外的任何其他信息,也不从网络向其他对等节点提供或转播信息,它们使用来自全节点的资源,而不提供任何的回报。
与全节点相比,轻客户端提供了更好的最终用户体验,同时允许最终用户以去中心化的和安全的方式访问区块链。关键是要找到一种激励个人和机构的方式去运行全节点、服务轻节点、惩罚服务坏数据的恶意全节点。使轻客户端可持续发展的一种方法是让他们对全节点发出的每个请求执行小额支付。在不久的将来,轻客户端将在以太坊分片中扮演重要角色,让验证节点快速同步不同的分片。轻客户端还可用于报告恶意参与者(验证节点或 plasma 权限)。轻客户端对全节点的激励是一个活跃的研究领域,因为激励是生态系统稳定的关键。
有一些很有前途的想法可以让轻客户端快速同步,同时避免前面提到的折衷方案。一种想法是允许全节点提供最新的已知区块头的零知识证明(例如,zk-STARK https://eprint.iacr.org/2018/046.pdf)。然后,轻客户端可以验证它并与链的顶部同步,而无需事先知道区块链的状态。
总之,在短期内,轻客户端将成为去中心化应用程序的骨干,这对用户友好的分布式生态系统来说是一个非常好的消息。
3. 一文读懂,XFS中你必须掌握的密码与区块链理论术语
人们对于事物的深刻认知,不是像“如何将大象放进冰箱?”那般,只回答“打开冰箱,把大象放进去,关上冰箱”那么简单。 任何事物都需要一个抽丝剥茧,化整为零的认知过程。 特别是一个新兴的概念和事物,更需要更加细致的了解。
XFS系统是一个分布式文件系统,但它并不是一个单一的框架结构,他 是密码学、区块链、互联网等多种技术手段结合的一个有机整体 ,因此,想要更详细的了解它,我们必须知道一些专业术语的概念。
1.加密网络
加密网络简单来说就是一个公共区块链。在区块链技术诞生之前,互联网网络中的数据传输其实是没有任何加密手段的,黑客一旦截取的其中的数据,那么除非那段数据本身就是密文,否则那些数据就直白地暴露在黑客眼前。
加密网络便是通过区块链技术,由区块链各个节点维护,任何人都可以无需许可加入,更重要的是,整个网络中运转的数据是加密的。XFS系统便是一个典型的加密网络。
2.哈希算法
哈希算法是区块链中用以确保数据完整性和安全性的一个特殊程序。哈希算法采用的是名为“哈希函数”数学关系,结果输出被称为“加密摘要”。加密摘要的特点是任意长度的数据输入后,返回的都是一个唯一且固定长度的值。
哈希函数具备:
基于这些特性,它在保证加密安全时也被用于防篡改,因为即使对散列函数的数据输入进行微小更改也会导致完全不同的输出。这也成为了现代密码学和区块链的主力。
3.分布式账本
区块链就是一个分布式账本,但这个账本不仅仅可以记录交易信息,还可以记录任何数据交互。每个分类帐交易都是一个加密摘要,因此无法在不被检测到的情况下更改条目。这样使得区块链使参与者能够以一种去中心化的方式相互审计。
4.私钥和公钥
私钥和公钥是区块链通过哈希算法形成加密后生成的一组用于解密的“钥匙”。通过对私钥加密,形成公钥,此时,原始信息只能通过私钥进行查看,由用户自己保存,公钥就如同一个房屋地址,用于进行数据交互,是可以公开的。反之,如果对公钥加密,形成私钥,那么就会形成不可篡改的数字签名,因为这个公钥上的签名只有私钥拥有者才能进行创建。
1.节点
节点是一个区块链网络的最基础建设,也是区块链网络和现实连接的物理设备。单个节点拥有许多的功能,例如缓存数据、验证信息或将消息转发到其他节点等。
2.点对点(P2P)网络
区块链所构建的便是去中心化后节点与节点之间的数据交互。传统的互联网数据传输是一种客户端—服务器—客户端的中心辐射模式。点对点网络则更符合“网”这个词,在这个网络中,每个节点都在单一通信协议下运行,以在它们之间传输数据,避免了因为服务器单点故障而引发的网络崩溃。
3.共识验证
区块链的共识验证解决了大量分散的节点意见不统一的问题,以“少数服从多数”的哲学依据,在区块链网络中,更多的节点认可便意味着“共识”,通常而言,区块链网络中超过51%的节点认可的便会被采用和认可。
4.复制证明和时空证明
这两个证明在XFS系统中都可以总称为存储证明。XFS系统的核心功能之一是数据存储,因此,为了证明存储的有效性,便通过复制证明验证数据是否存在节点存储空间中,并通过时空证明验证时间上的持续性。存储提供方如果在储存有效期内能持续提交存储证明,那么他便会获得由XFS系统提供的奖励。
5.冗余策略和纠删码
这是XFS用来平衡数据存储量的两个方式。冗余策略将数据通过多副本的方式备份,确保数据在损坏或丢失后能找回。
纠删码则是确保数据在复制、传输时不会产生过多备份,节省存储空间、提高传输效率。
6.文件分片协议
XFS将文件切分为N个细小的碎片存储在节点当中,这些碎片只要有任意 M个碎片即可恢复出数据,这样只要不同时有 N-M+1 个节点失效就能保证数据完整不丢失。
7.智能合约
XFS中的智能合约是一段程序代码,由于是基于区块链生成的,因此同样继承了区块链不可篡改、可追溯等特点,它能保证双方执行结果的确定性,这也使得XFS网络中的数据交互变得更加可信。
8.Dapp
即去中心化APP,同普通的APP一样具备更加方便快捷的网络接入端口,唯一不同的便是它抛弃了传统APP中心化的特点,这使得Dapp中的数据是归属于用户自身,不用担心隐私泄露、大数据杀熟等问题。
XFS系统是一个开放性平台,用户可以自由的在其中使用、设计、创作各种Dapp。
结语
关于XFS中的理论术语基于篇幅原因是很难详细展开细讲的,这其中涉及到了更多的互联网和区块链专业知识。但通过上面这些简单的解释,相信大家对XFS系统也有了一个比较立体的认知,那么,我们便期待打破传统中心化存储弊端,开船全新存储时代的XFS新一代分布式文件系统吧。
4. 一文看懂互联网区块链
一文看懂互联网区块链
一文看懂互联网区块链,要了解区块链,就不得不从互联网的诞生开始研究区块链的技术发展简史,从中发掘区块链产生的动因,并由此推断区块链的未来。下面让我们一文看懂互联网区块链。
一文看懂互联网区块链1区块链的鼻祖就是麻将,最早的区块链是中国人发明的!区块链就跟麻将一样,只不过麻将的区块比较少而已,麻将只有136个区块,各地麻将规则不同可视作为比特币的硬分叉。
麻将作为最古老的区块链项目,四个矿工一组,最先挖出13位正确哈希值的获得记账权以及奖励,采用愿赌服输且不能作弊出老千的共识机制!
麻将去中心化,每个人都可以是庄,完全就是点对点。
矿池=棋牌室的老板抽佣。
不可篡改,因为说服其他三个人需要消耗太多算力和体力。
典型的价值互联网。我兜里的价值用不了八圈,就跑到他们兜里去了。
中国人基本上人手打得一手好麻将,区块链方面生产了全球70%~80%的矿机,并拥有全世界最多的算力,约占77%的算力
麻将其实是最早的的区块链项目:
1,四个矿工一组,先碰撞出13个数字正确哈希值的矿工可以获得记账权并得到奖励。
2,不可篡改。因为说服其他三个人需要消耗太多算力和体力。
3,典型的价值互联网。我兜里的价值数字货币www.gendan5.com/digitalcurrency/btc.html用不了八圈,就跑到他们兜里去了。
4、去中心化,每个人都可以是庄,完全就是点对点。
5、UTXO,未花费的交易支出。
还有另外一种赊账的区块链玩法,假设大家身上都没现金
细究一下,在大家达成共识时,我们看不到任何中介或者第三方出来评判丙赢了,大家给丙的奖励也不需要通过第三方转交给丙,都是直接点对点交易,这一过程就是去中心化,牌友们(矿工)各自记录了第一局的战绩,丙大胡自摸十三幺,乙杠了甲东风,记录完成后就生成了一个完整的区块,但要记住,这才只是第一局,在整个区块链上,这才仅仅是一个节点,开头说的8局打完,也就是8个节点(区块),8个区块连接在一起就形成了一个完整账本,这就是区块链。因为这个账本每人都有一个,所以就是分布式账本,目的就是为了防止有人篡改记录,打到最后,谁输谁赢一目了然。
4个男士(甲乙丙丁)凑在一块打麻将来钱,大家都没带现金,于是请一美女(中心化)用本子记账,记录每一局谁赢了多少钱、谁输了多少钱?最后结束时,大家用支付宝或微信支付结总账,但是如果这位美女记账时记错了或者预先被4人中的某人买通了故意记错,就保证不了这个游戏结果的公正公平合理性,你说是不是?那怎么办呢?如果你“打麻将”能用“区块链”作为游戏规则改编为如下:
4个男士(甲乙丙丁)凑在一块打麻将来钱,大家都没带现金,乙说让她带来的美女记账,甲说这位美女我们都不认识,于是甲乙丙丁4人一致约定每个人每局牌都在自己的手机上(区块链节点)同时记账(去中心化),最后打完麻将,直接手机上以电子货币结账时,大家都对一下记账的的结果,本来应该是一样的记账结果。
假设本来结果是甲手机上记的账:乙欠甲10元。但乙手机上的记录却是不欠,可是其余2人(丙、丁)和甲的记账一样,那还是按照少数服从多数规则结算,另外大家心里对乙的诚信印象就差评了,下次打麻将就不会带乙一起玩了。
除非乙预先买通(丙、丁)2人让其故意作假,但乙买通他们2人的代价是10万元(赖账10元的1万倍),那常理上乙只能选择放弃,因为做假成本太高了。
假设即使乙在打牌的过程中,偷偷愿意以高价10万元预先买通丙、丁做这笔巨亏的傻猫交易,但区块链的规则是按时间戳记账的,原来是下午1点钟记账乙欠甲10元的,即丙和丁下午3点钟再改账时,时间是不可逆的,只能记下午3点钟,那就又不吻合游戏规则了。
实际上在2017年博主已经开发出了一套麻将币
中国最早的区块链项目:四个矿工一组,最先从 148 个随机数字中碰撞出 14 个数字正确哈希值的矿工,可以获得一次记账权激励,由于分布式记账需要得到其他几位矿工的共识,因此每次记账交易时间长约十几分钟。
一文看懂互联网区块链2一、比特币诞生之前,5个对区块链未来有重大影响的互联网技术
1969年,互联网在美国诞生,此后互联网从美国的四所研究机构扩展到整个地球。在应用上从最早的军事和科研,扩展到人类生活的方方面面,在互联网诞生后的近50年中,有5项技术对区块链的未来发展有特别重大的意义。
1、1974诞生的TCP/IP协议:决定了区块链在互联网技术生态的位置
1974年,互联网发展迈出了最为关键的一步,就是由美国科学家文顿瑟夫和罗伯特卡恩共同开发的互联网核心通信技术--TCP/IP协议正式出台。
这个协议实现了在不同计算机,甚至不同类型的网络间传送信息。所有连接在网络上的计算机,只要遵照这个协议,都能够进行通讯和交互。
通俗的说,互联网的数据能穿过几万公里,到达需要的计算机用户手里,主要是互联网世界形成了统一的信息传播机制。也就是互联网设备传播信息时遵循了一个统一的法律-TCP/IP协议。
理解TCP/IP协议对掌握互联网和区块链有非常重要的意义,在1974年TCP/IP发明之后,整个互联网在底层的硬件设备之间,中间的网络协议和网络地址之间一直比较稳定,但在顶层应用层不断涌现层出不穷的创新应用,这包括新闻,电子商务,社交网络,QQ,微信,也包括区块链技术。
也就是说区块链在互联网的技术生态中,是互联网顶层-应用层的一种新技术,它的出现,运行和发展没有影响到互联网底层的基础设施和通讯协议,依然是按TCP/IP协议运转的众多软件技术之一。
2、1984年诞生的思科路由器技术:是区块链技术的模仿对象
1984年12月,思科公司在美国成立,创始人是斯坦福大学的一对夫妇,计算机中心主任莱昂纳德·波萨克和商学院的计算机中心主任桑蒂·勒纳,他们设计了叫做“多协议路由器”的联网设备,放到互联网的通讯线路中,帮助数据准确快速从互联网的一端到达几千公里的另一端。
整个互联网硬件层中,有几千万台路由器工作繁忙工作,指挥互联网信息的传递,思科路由器的一个重要功能就是每台路由都保存完成的互联网设备地址表,一旦发生变化,会同步到其他几千万台路由器上(理论上),确保每台路由器都能计算最短最快的路径。
大家看到路由器的运转过程,会感到非常眼熟,那就是区块链后来的重要特征,理解路由器的意义在于,区块链的重要特征,在1984年的路由器上已经实现,对于路由器来说,即使有节点设备损坏或者被黑客攻击,也不会影响整个互联网信息的传送。
3、随万维网诞生的B/S(C/S)架构:区块链的对手和企图颠覆的对象
万维网简称为Web,分为Web客户端和服务器。所有更新的信息只在Web服务器上修改,其他几千,上万,甚至几千万的客户端计算机不保留信息,只有在访问服务器时才获得信息的数据,这种结构也常被成为互联网的B/S架构,也就是中心型架构。这个架构也是目前互联网最主要的架构,包括谷歌、Facebook、腾讯、阿里巴巴、亚马逊等互联网巨头都采用了这个架构。
理解B/S架构,对与后续理解区块链技术将有重要的意义,B/S架构是数据只存放在中心服务器里,其他所有计算机从服务器中获取信息。区块链技术是几千万台计算机没有中心,所有数据会同步到全部的计算机里,这就是区块链技术的核心,
4、对等网络(P2P):区块链的父亲和技术基础
对等网络P2P是与C/S(B/S)对应的另一种互联网的基础架构,它的特征是彼此连接的多台计算机之间都处于对等的地位,无主从之分,一台计算机既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站。
Napster是最早出现的P2P系统之一,主要用于音乐资源分享,Napster还不能算作真正的对等网络系统。2000 年3月14 日,美国地下黑客站点Slashdot邮寄列表中发表一个消息,说AOL的Nullsoft 部门已经发放一个开放源码的Napster的克隆软件Gnutella。
在Gnutella分布式对等网络模型中,每一个联网计算机在功能上都是对等的,既是客户机同时又是服务器,所以Gnutella被称为第一个真正的对等网络架构。
20年里,互联网的一些科技巨头如微软,IBM,也包括自由份子,黑客,甚至侵犯知识产权的犯罪分子不断推动对等网络的发展,当然互联网那些希望加强信息共享的理想主义者也投入了很大的热情到对等网络中。区块链就是一种对等网络架构的软件应用。它是对等网络试图从过去的沉默爆发的标杆性应用。
5、哈希算法:产生比特币和代币(通证)的关键
哈希算法将任意长度的数字用哈希函数转变成固定长度数值的算法,著名的哈希函数如:MD4、MD5、SHS等。它是美国国家标准暨技术学会定义的加密函数族中的一员。
这族算法对整个世界的运作至关重要。从互联网应用商店、邮件、杀毒软件、到浏览器等、,所有这些都在使用安全哈希算法,它能判断互联网用户是否下载了想要的东西,也能判断互联网用户是否是中间人攻击或网络钓鱼攻击的受害者。
区块链及其应用比特币或其他虚拟币产生新币的过程,就是用哈希算法的函数进行运算,获得符合格式要求的数字,然后区块链程序给予比特币的奖励。
包括比特币和代币的挖矿,其实就是一个用哈希算法构建的小数学游戏。不过因为有了激烈的竞争,世界各地的人们动用了强大的服务器进行计算,以抢先获得奖励。结果导致互联网众多计算机参与到这个小数学游戏中,甚至会耗费了某些国家超过40%的电量。
二、区块链的诞生与技术核心
区块链的诞生应该是人类科学史上最为异常和神秘的发明和技术,因为除了区块链,到目前为止,现代科学史上还没有一项重大发明找不到发明人是谁。
2008年10月31号,比特币创始人中本聪(化名)在密码学邮件组发表了一篇论文——《比特币:一种点对点的电子现金系统》。在这篇论文中,作者声称发明了一套新的不受政府或机构控制的电子货币系统,区块链技术是支持比特币运行的基础。
论文预印本地址在http://www.bitcoin.org/bitcoin.pdf,从学术角度看,这篇论文远不能算是合格的论文,文章的主体是由8个流程图和对应的解释文字构成的, 没有定义名词、术语,论文格式也很不规范。
2009年1月,中本聪在SourceForge网站发布了区块链的应用案例-比特币系统的开源软件,开源软件发布后, 据说中本聪大约挖了100万个比特币.一周后,中本聪发送了10个比特币给密码学专家哈尔·芬尼,这也成为比特币史上的第一笔交易。伴随着比特币的蓬勃发展,有关区块链技术的研究也开始呈现出井喷式增长。
向大众完整清晰的解释区块链的确是困难的事情,我们以比特币为对象,尽量简单但不断深入的介绍区块链的技术特征。
1、区块链是一种对等网络(P2P)的软件应用
我们在前文提过,在21世纪初,互联网形成了两大类型的应用架构,中心化的B/S架构和无中心的对等网络(P2P)架构,阿里巴巴,新浪,亚马逊,网络等等很多互联网巨头都是中心化的B/S架构,简单的说,就是数据放在巨型服务器中,我们普通用户通过手机,个人电脑访问阿里,新浪等网站的服务器。
21世纪初以来,出现了很多自由分享音乐,视频,论文资料的软件应用,他们大部分采用的是对等网络(P2P)架构,就是没有中心服务器,大家的个人计算机都是服务器,也都是客户机,身份平等。但这类应用一直没有流行起来,主要原因是资源消耗大,知识版权有问题等。区块链就是这种领域的一种软件应用。
2、区块链是一种全网信息同步的对等网络(P2P)软件应用
对等网络也有很多应用方式,很多时候,并不要求每台计算机都保持信息一致,大家只存储自己需要的的信息,需要时再到别的计算机去下载。
但是区块链为了支持比特币的金融交易,就要求发生的每一笔交易都要写入到历史交易记录中,并向所有安装比特币程序的计算机发送变动信息。每一台安装了比特币软件的计算机都保持最新和全部的.比特币历史交易信息。
区块链的这个全网同步,全网备份的特征也就是常说的区块链信息安全,不可更改来源。虽然在实际上依然不是绝对的安全,但当用户量非常大时,的确在防范信息篡改上有一定安全优势。
3、区块链是一种利用哈希算法产生”通证(代币)”的全网信息同步的对等网络(P2P)软件应用
区块链的第一个应用是著名的比特币,讨论到比特币时,经常会提到的一个名词就是“挖矿”,那么挖矿到底是什么呢?
形象的比喻是,区块链程序给矿工(游戏者)256个硬币,编号分别为1,2,3……256,每进行一次Hash运算,就像抛一次硬币,256枚硬币同时抛出,落地后如果正巧编号前70的所有硬币全部正面向上。矿工就可以把这个数字告诉区块链程序,区块链会奖励50个比特币给矿工。
从软件程序的角度说,比特币的挖矿就是用哈希SHA256函数构建的数学小游戏。区块链在这个小游戏中首先规定了一种获奖模式:给出一个256位的哈希数,但这个哈希数的后70位全部是0,然后游戏者(矿工)不断输入各种数字给哈希SHA256函数,看用这个函数能不能获得位数有70个0的数字,找到一个,区块链程序会奖励50个比特币给游戏者。实际的挖坑和奖励要更复杂,但上面的举例表达了挖矿和获得比特币的核心过程。
2009年比特币诞生的时候,每笔赏金是50个比特币。诞生10分钟后,第一批50个比特币生成了,而此时的货币总量就是50。随后比特币就以约每10分钟50个的速度增长。当总量达到1050万时(2100万的50%),赏金减半为25个。当总量达到1575万(新产出525万,即1050的50%)时,赏金再减半为12.5个。根据比特币程序的设计,比特币总额是2100万。
从上述介绍看,比特币可以看做一个基于对等网络架构的猜数小游戏,每次正确的猜数结果奖励的比特币信息会传递给所有游戏者,并记录到每个游戏者的历史数据库中。
4、区块链技术因比特币的兴起产生的智能合约,通证、ICO与区块链基础平台
从上面的介绍看,比特币的技术并不是从天上掉下来的新技术,而是把原来多种互联网技术,如对等网络架构,路由的全网同步,网络安全的加密技术巧妙的组合在一起,算是一种组合创新的算法游戏。
由于比特币通过运作成为可以兑换法币,购买实物,通过升值获得暴利,全世界都不淡定了。抱着你能做,我也能做的态度,很多人创造了自己的仿比特币软件应用。同时利用政府难以监管对等网络的特点,各种山寨币与比特币一起爆发。这其中出现了很多欺诈和潜逃事件,逐步引起各国政府的关注。
区块链基础平台:用区块链技术框架创建货币还是有相当的技术难度,这时区块链基础平台以太坊等基础技术平台出现了,让普通人也可以方便的创建类“比特币”软件程序,各显神通,请人入局挖币,炒币,从中获得利益。
通证或代币:各家“比特币”、“山寨币”如果用哈希算法创建的猜数小游戏,产生自己的“货币”时,这个“货币”统称“通证”或“代币”。
ICO:由于比特币和以太币已经打通与各国法币的兑换,其他新虚拟币发币时,只允许用比特币和以太币购买发行的新币,这样的发币过程就叫ICO,ICO的出现放大了比特币,以太币的交易量。同时很多ICO项目完全建立在虚无的项目上,导致大量欺诈案例频发。进一步加深了社会对区块链生成虚拟货币的负面认识。
智能合约:可以看做区块链上的一种软件功能,是辅助区块链上各种虚拟币交易的程序,具体的功能就像淘宝上支付宝的资金托管一样,当一方用户收到的货物,在支付宝上进行确认后,资金自动支付个给买家货主,智能合约在比特币等区块链应用上也是承担了这个中介支付功能。
三、区块链技术在互联网中的历史地位和未来前景
1、区块链处于互联网技术的什么位置?是顶层的一种新软件和架构。
我们在前面的TCP/IP介绍中提到,区块链与浏览器、QQ、微信、网络游戏软件、手机APP等一样,是互联网顶层-应用层的一种软件形式。它的运行依然要靠TCP/IP的架构体系传输数据。只是与大部分应用层软件不同,没有采用C/S(B/S)的中心软件架构。而是采用了不常见的对等网络架构,从这一点说,区块链并不能颠覆互联网基础结构。
2、区块链想要颠覆谁?想颠覆万维网的B/S(C/S)结构。
它试图要颠覆其实是89年年诞生的万维网B/S,C/S结构。前面说过。由于89年年欧洲物理学家蒂姆· 伯纳斯· 李发明万维网并放弃申请专利。此后近30年中,包括谷歌,亚马逊,facebook,阿里巴巴,网络,腾讯等公司利用万维网B/S(C/S)结构,成长为互联网的巨头。
在他们的总部,建立了功能强大的中心服务器集群,存放海量数据,上亿用户从巨头服务器中获取自己需要的数据,这样也导致后来云计算的出现,而后互联网巨头把自己没有用完的中心服务器资源开放出来,进一步吸取企业,政府,个人的数据。中心化的互联网巨头对世界,国家,互联网用户影响力越来越大。
区块链的目标是通过把数据分散到每个互联网用户的计算机上,试图降低互联网巨头的影响力,由此可见区块链真正的对手和想要颠覆的是1990年诞生的B/S(C/S)结构。但能不能颠覆掉,就要看它的技术优势和瓶颈。
3、区块链的技术缺陷:追求彻底平等自由带来的困境
区块链的技术缺陷首先来自与它的对等网络架构上,举个例子,目前淘宝是B/S结构,海量的数据存放在淘宝服务器集群机房里,几亿消费者通过浏览器到淘宝服务器网站获取最新信息和历史信息。
如果用区块链技术,就是让几亿人的个人电脑或手机上都保留一份完整的淘宝数据库,每发生一笔交易,就同步给其他几亿用户。这在现实中是完全无法实现的。传输和存储的数据量太大。相当于同时建立几亿个淘宝网站运行。
因此区块链无法应用在数据量大的项目上,甚至小一点的网站项目用区块链也会吃力。到2018年,比特币运行了近10年,积累的交易数据已经让整个系统面临崩溃。
于是区块链采用了很多变通方式,如建立中继节点和闪电节点,这两个概念同样会让人一头雾水,通俗的说,就是区块链会向它要颠覆的对象B/S结构进行了学习,建立数据服务器中心成为区块链的中继节点,也用类浏览器的终端访问,这就是区块链的闪电节点。
这种变动能够缓解区块链的技术缺陷,但确让区块链变成它反对的样子,中心化。由此可见,单纯的区块链技术由于技术特征有重大缺陷,无法像万维网一样应用广泛,如果技术升级,部分采用B/S(C/S)结构,又会使得区块链有了中心化的信息节点,不在保持它诞生时的梦想。
4、从互联网大脑模型看区块链的未来前景
我们知道互联网一般是指将世界范围计算机网络互相联接在一起的网际网络,在这基础上发展出覆盖全世界的全球性互联网络称互联网,即是互相连接一起的网络结构。
从1969年互联网诞生以来,人类从不同的方向在互联网领域进行创新,并没有统一的规划将互联网建造成什么结构,当时间的车轮到达2017年,随着人工智能,物联网,大数据,云计算,机器人,虚拟现实,工业互联网等科学技术的蓬勃发展,当人类抬起头来观看自己的创造的巨系统,互联网大脑的模型和架构已经越来越清晰。
通过近20年的发展依托万维网的B/S,C/S结构,腾讯QQ,微信,Facebook,微博、twitter亚马逊已经发展出类神经元网络的结构。互联网设备特别是个人计算机,手机在通过设备上的软件在巨头的中心服务器上映射出个人数据和功能空间,相互加好友交流,传递信息。互联网巨头通过中心服务器集群的软件升级,不断优化数亿台终端的软件版本。在神经学的体系中,这是一种标准的中枢神经结构。
区块链的诞生提供了另外一种神经元模式,不在巨头的集中服务中统一管理神经元,而是每台终端,包括个人计算机和个人手机成为独立的神经元节点,保留独立的数据空间,相互信息进行同步,在神经学的体系中,这是一种没有中心,多神经节点的分布式神经结构。
有趣的是,神经系统的发育出现过这两种不同类型的神经结构。在低等生物中,出现过类区块链的神经结构,有多个功能相同的神经节,都可以指挥身体活动和反应,但随着生物的进化,这些神经节逐步合并,当进化成为高等生物时,中枢神经出现了,中枢神经中包含大量神经元进行交互。
四、关于区块链在互联网未来地位的判断
1、对比特币的认知:一个基于对等网络架构(P2P)的猜数小游戏,通过高明的金融和舆论运作,成为不受政府监管的”世界性货币”。
2、对区块链的认知:一个利用哈希算法产生”通证(代币)”的全网信息同步的对等网络(P2P)软件应用。
3、区块链有特定的用途,如大规模选举投票,大规模赌博,规避政府金融监管的金融交易等等领域,还是有不可替代的用处。
4、在更多时候,区块链技术会依附于互联网的B/S,C/S结构,实现功能的扩展,但总体依然属于互联网已有技术的补充。对于区块链目前设想的绝大部分应用场景,都是可以用B/S,C/S结构实现,效率可以更高和技术也可以更为成熟。
5、无论是从信息传递效率和资源消耗,还是从神经系统进化看,区块链无法成为互联网的主流架构,更不能成为未来互联网的颠覆者和革命者。
6、当然B/S,C/S结构发展出来的互联网巨头也有其问题,但这些将来可以通过商业的方式,政治的方式逐渐解决。
5. 比特币矿池的协议stratum
转自: https://zhuanlan.hu.com/p/23558268
getblocktemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblocktemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。
与getwork相比,getblocktemplate协议最大的不同点是:getblocktemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblocktemplate来说,整个区块链是透明的,getblocktemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblocktemplate可以自己选择包含进区块的交易。
挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblocktemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。
矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。
矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。
矿池通过getblocktemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。
先来说一下getblocktemplate遗留下来的几个问题:
矿工驱动:在getblocktemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。
数据负载:如上所述,如今正常的一次getblocktemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。
Stratum协议彻底解决了以上问题。
Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。
现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。
Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。
再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevBlock这3个字段是固定的,nNonce,nTime这两个字段是矿工现在就可以改变的。增加搜索空间只能从hashMerkleroot下手,这个绕不过去。Stratum协议让矿工自己构造coinbase交易,coinbase的scriptSig字段有很多字节可以让矿工自由填充,而coinbase的改动意味着hashMerkleroot的改变。从coinbase构造hashMerkleroot无需全部交易,
如上图所示,假如区块将包含13笔交易,矿池先对这13笔交易进行处理,最后只要把图中的4个黑点(Hash值)交付给矿工,同时将构造coinbase需要的信息交付给矿工,矿工就可以自己构造hashMerkleroot(图中的绿点都是矿工自行计算获得,两两合并Hash时,规定下一个黑点代表的hash值总是放在右边)
。按照这种方式,假如区块包含N笔交易,矿池可以浓缩成log2(N)个hash值交付给矿工,这大大降低了矿池和矿工交互的数据量。
Stratum协议严格规定了矿工和矿池交互的接口数据结构和交互逻辑,具体如下:
1. 矿工订阅任务
启动挖矿机器,使用mining.subscribe方法链接矿池
返回数据很重要,矿工需本地记录,在整个挖矿过程中都用到,其中:
Extranonce1,和 Extranonce2对于挖矿很重要,增加的搜索空间就在这里,现在,我们至少有了8个字节的搜索空间,即nNonce的4个字节,以及 Extranonce2的4个字节。
2. 矿池授权
在矿池注册一个账号 ,添加矿工,矿池允许每个账号任意添加矿工数,并取不同名字以区分。矿工使用mining.authorize方法申请授权,只有被矿池授权的矿工才能收到矿池指派任务。
3. 矿池分配任务
以上每个字段信息都是必不可少,其中:
有了以上信息,再加上之前拿到的Extranonce1 和Extranonce2_size,就可以挖矿了。
4. 挖矿
1) 构造coinbase交易
用到的信息包括Coinb1, Extranonce1, Extranonce2_size 以及Coinb2,构造很简单:
为啥可以这样,因为矿池帮矿工做了很多工作,矿池已经构建了coinbase交易,系列化后在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含区块高度,coinb2包含了矿工的收益地址和收益额等信息,但是这些信息对于矿工来说无关紧要,矿工挖矿的地方只是Extranonce2 的4个字节。另外Extranonce1是矿池写入区块的指定信息,一般来说,每个矿池会写入自己矿池的信息,比如矿池名字或者域名,我们就是根据这个信息统计每个矿池在全网的算力比重。
2) 构建Merkleroot
利用coinbase和merkle_branch,按照上图方式构造hashMerkleroot字段。
3) 构建区块头
填充余下的5个字段,现在,矿池可以在nNonce和Extranonce2 里搜索进行挖矿,如果嫌搜索空间还不够,只要增加Extranonce2_size为多几个字节就可轻而易举解决。
5. 矿工提交工作量
当矿工找到一个符合难度的shares时,提交给矿池,提交的信息量很少,都是必不可少的字段:
矿池拿到以上5个字段后,首先根据任务号ID找出之前分配任务前存储的信息(主要是构建的coinbase交易以及包含的交易列表等),然后重构区块,再验证shares难度,对于符合难度要求的shares,再检测是否符合全网难度。
6. 矿池给矿工调节难度
矿池记录每个矿工的难度,并根据shares率不断调节以指定合适难度。矿池可以随时通过mining.set_difficulty方法给矿工发消息另其改变难度。
如上,Stratum协议核心理念基本解析清楚,在getblocktemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。
6. 区块链技术赋能Web3.0
Web3.0将是一个价值互联网,它的开放性、信任的建立和身份管理等与Web2.0有很大区别。区块链的发展正好为Web3.0建立了基础技术基础,并将在Web3.0中起到关键作用。在Web3.0中,与区块链相关的技术包括:点对点网络技术,数据存储和交换系统,数字身份,基于区块链的金融网络,基于区块链的信任系统和智能合约等等。
Web 3.0最初被万维网(WWW)的发明者Tim Berners-Lee称为语义网,其目标是成为一个更加自治,智能和开放的互联网。Web 3.0的定义可以扩展如下:数据将以分散的方式互连,这将是对我们当前的Internet的巨大飞跃,在Web 2.0中,数据主要存储在集中式存储库中。此外,用户和机器将能够与数据进行交互。要做到这一点,程序需要在概念上和上下文上理解信息。考虑到这一点,Web 3.0的两个基石是语义Web和人工智能(AI)。
从使用者(用户)的角度理解,Web3.0 与 Web2.0 在呈现形式和体验上将得到多方面的提升,以下特点是产业界比较认可的一些方面:
同时,随着网络能力、人工智能的发展,随着数据的爆发式增长,Web3.0网络的建设将对Web2.0而言将是一个颠覆式的发展,这体现在Web3.0将必然是开放的,去信任的,无许可的网络,从而实现互联网的真正愿景。
Web3.0将是一个价值互联网,它的开放性、信任的建立和身份管理等与Web2.0有很大区别。区块链的发展正好为Web3.0建立了基础技术基础,并将在Web3.0中起到关键作用。在Web3.0中,与区块链相关的技术包括:点对点网络技术,数据存储和交换系统,数字身份,基于区块链的金融网络,基于区块链的信任系统和智能合约等等。
点对点网络系统:P2P Networking
Web1.0 和 2.0采用的网络架构围绕核心网,接入网和局域网的架构展开。这样的网络基本上是一个星型结构,数据的交换从端向上经接入网至核心网络,再向下逐级路由至其目标地址。互联网应用所依靠的计算和存储相对集中,网络一旦发生故障或者不堪重负,将立即出现服务故障。互联网巨头的服务故障屡见不鲜,影响巨大。
Web3.0 的网络将更加具有弹性,数据通信更多地建立在点对点网络之上,点对点网络依赖于Web2.0现有架构作为基础设施,而在其上构建虚拟的P2P网络层。每一个用户节点/终端同时连接多个终端节点,网络通信通过终端之间的直接连接或者通过第三方中继。这样的连接有诸多好处,比如:节点可以同时从多个路径获取信息,因此数据访问速度可以更加高效;当数据有多个副本的情况下,可以从最近的节点获取信息,网络资源利用率高;对网络故障的容忍度大大提高,部分网络的故障,并不会影响到通信的效果;网络链接丰富,数据传播速度非常快。
点对点网络也是保障 Web3.0 其他特性的基础,我们在下面几节中会有所描述。LibP2P 是目前较为成熟的点对点网络技术,包括IPFS,Filecoin,Ethereum2.0等为Web3.0 提供服务的平台的网络都建立在 LibP2P 之上。
使用点对点网络的终端需要持续保持并维护较大量的网络链接,并能够较智能地感知网络问题,抵抗恶意链接及攻击等。这给 P2P 网络发展带来挑战。同时,P2P 网络是建立在现有网络的基础之上,需要对现有网络协议的全面支持,受网络规模效应的影响,P2P 网络的发展将首先从与区块链相关的技术设施开始,逐步扩展到更广泛的领域。
数据存储和交换系统 - The Underlying File System
Web1.0 和 Web2.0 建立在 HTTP 协议之上。HTTP协议提供简单的通过路径(URL)的文件访问方式,用户可以通过URL 访问文件和网页内容。
HTTP是一种客户/服务端(Client-Server)通信协议,其构成了当前互联网几乎所有数据交换的基础。客户端-服务器一词意味着有一个请求方(客户端-通常是Web浏览器)从服务器(提供信息的计算机-通常是网页或网页的一部分)中请求信息。该协议借助域名服务器(DNS)服务器来定位文件路径。DNS服务器本身就是一个大型网络,其中包括十三台根服务器,以及向下链接的众多区域服务器。DNS服务网络本身就是一个中心化的网络,有些攻击就是直接针对DNS网络进行的。
使用Web 3.0时,该机制正在发生变化。最有可能取代当前DNS系统的技术称为行星际文件系统(InterPlanetary File System),简称IPFS。当HTTP逐步被IPFS取代之时,确实,我们可能倾向于将其称为Internet 3.0。
IPFS网络同样需要对文件(内容)进行寻址,但与HTTP协议完全不同的是,IPFS的寻址服务不再依赖于类似DNS网络这样的中心化服务,而是完全通过去中心化的分布式哈希表(DHT:Decentralized Hash Table)来进行。IPFS的网络层就是 LibP2P,所以他能够提供更大的弹性和容错性。同时,IPFS借鉴了点对点文件系统的诸多技术来形成一整套协议,这些技术包括:BitTorrent,Git,SFS等等。
IPFS的内容寻址方式实现原理非常简单,就是对内容进行散列(Hash)运算,生成内容相关的独一无二的内容标识(CID:Content Identity)。Hash算法的防碰撞特性保证了标识的唯一性,因此这种标识又称为内容指纹;Hash算法的确定性保证了同样的内容将生成同样的标识,因此,在同一个存储网络中,可以进行内容去重,从而实现更高的存储效率。
IPFS的目标是建立一个统一的分散的不依赖单个实体的存储平台,这与区块链的思想一脉相承。与 HTTP 相比,IPFS有很多优势:
IPFS的这些特性构成了Web3.0数据存储的基础,因此,IPFS的这些特性,也就成为Web3.0的特性。IPFS网络目前已经成功运行数年,作为一个公益的、开放的、开源的网络,它的运行非常成功,但是,对于商业运行而言,由于缺乏激励层和难以协调分散节点的服务保障体系,还存在诸多挑战,这些挑战,也是 Filecoin 等存储相关的项目希望解决的部分。
基于密码学的数字身份 - Digital Identities
数字身份是区块链发展带来的另一个重要技术。它可能成为Web 3.0的最重要功能之一。在当前的互联网络中,从身份盗用到点击欺诈充斥着互联网的每一个角落,发生这种情况的原因是两台计算机之间的连接未正确进行身份验证。在Web 2.0网落中,服务器永远无法确定访问它的客户端软件是假装的—在可识别的人的控制下浏览器。在等式的另一边,浏览器也不知道它正在访问的服务器和文件是否是它打算访问的文件。
但是,如果这种互动中涉及的所有事物都具有可验证的身份,那么进行欺诈和欺骗就更加困难了。使用数字身份证,每个人拥有一个可验证的身份,因为每个身份都必须链接到唯一的凭证。同样,组织也具有一个可验证的身份。至于客户端和服务器之间交互所涉及的所有其他内容(硬件和软件),这些东西可以直接绑定到属于个人或组织的唯一ID。而且,由于采用了零知识证明等技术,任何一方都有可能证明他们是真实的,甚至不用透露自己的身份。
数字ID启用Web 3.0的两个重要功能:
这其中非常重要的原因在于用户的身份认证和行为验证统一了起来,加密技术应用到每一条消息,使得安全性大大提高。当然,这些也提高了终端使用的成本,而且道高一尺、魔高一丈。随着计算技术的进步,加密的强度和算法也会演进,同时,安全性也依赖于用户对自己的私钥的保护。
基于区块链金融网路 - Decetralized Finance
到目前为止,我们提到了两个技术基础:分布式文件系统和数字身份,都与区块链技术相关。区块链对 Web3.0 的重要性不言而喻,但是其最重要的贡献还在于其创建通证、并通过精巧设计的经济模型来维护啊网络的能力,也包括使用此类通政进行小额支付的能力。
在一个区块链为基础的 Web3.0 网络中,金融的运作方式与传统金融有很大的区别,金融更加程序化,变化更灵敏快速。无需银行和机构为其背书,金融市场也是一个算法市场。这里,不仅仅具有价值储存的通证,可以进行高额的价值存储和转移,同样,也具有类似于闪电网络的快速交易的小额支付能力,不同的通证提供了不同的功能。更加令人兴奋的是,整个金融市场完全是一个算法市场,不受机构的控制,因此,可以进行基于算法的股权交易、借贷市场、不停歇的即时交易、保险、期货等等都可以构建,并不断创新。
关于信息价值,Web3.0与Web2.0完全不同,由于通证化,信息的价值可以直接在交易中体现出来,实现价值流和信息流的统一。而不同于Web2.0中的充满假象的免费服务,实际上服务商通过迂回的方式通过广告和挖掘用户的数据价值牟利。
网络构建信任 - Trustless
有人可能会争辩说,区块链最重要的贡献是自动信任。这超出了区块链可以通过建立信任网络通过数字ID提供的安全性。
一些区块链可以创建“智能合约”,这些程序附在区块链上,并在特定的区块链事件触发时执行。关于智能合约的重点是程序代码是合约。
这使得智能合约比法律合约更具确定性。法律合同是通过法律制度执行的,法律制度的可靠性在一个地方到另一个地方各不相同,但从来都不是完美的。对法律合同提出质疑的结果是不确定的。
但是,智能合约可以100%被信任。智能合约的一个简单示例是通过供应链中的商品移动给出的。发货时会带有RFID标签,该标签会在读取商品时报告其位置。当货物到达特定位置时,智能合约可以自动执行付款-运输,仓储或进口关税。因此,付款是可预测的,并且可以100%相信发生。
自然,智能合约可能比该示例复杂得多。它们可以涵盖法律合同当前涵盖的许多情况,从而减少了欺诈的可能性。
7. 区块链+即时通讯是怎样的
区块链特点之一就是通过分布式账本技术实现不可逆,同时采用各种技术,比如环签名、零知识证明等实现匿名、保护隐私等。社交网络由Facebook垄断、即时通讯由WhatsApp等中心化产品垄断,它们给用户带来了无与伦比的沟通方便,大大提高了人们之间沟通的频次和效率,给全世界几十亿人带来便利。
通过区块链,通讯服务可以不采用中心企业的模式来组织通讯服务的运行,区块链未来要对现实生活产生真正影响,不能光靠概念和炒作,而是要有真正落地的产品。什么叫真正落地的产品,就是能够满足用户需求的产品。如果现有的中心化产品能够很好地满足用户的需求,那么去中心化的产品就没有足够的替代效应,也就无法真正落地性。
区块链协议层就有主要包括:网络编程、分布式算法、加密签名、数据存储技术等4个方面。
网络编程能力是大家选择编程语言的主要考虑因素,因为分布式算法基本上属于业务逻辑上的实现,什么语言都可以做到。其中加密签名技术是直接简单的使用,数据库技术也主要在使用层面,只有点对点网络的实现和并发处理才是开发的难点。所以对于那些网络编程能力强,对并发处理简单的语言,人们就特别偏爱。
用户免费获得初始数量的token。它的一些实际使用场景:
1. 加密视频聊天:跨国用户想要进行视频聊天,只有双方都持有一定数量的SKM才能实现加密视频聊天。
2. 大容量文件加密传输:一位用户向另外一位用户传输的文件超过了大小限制,传输者必须持有一定的token来实现加密传输。
3. 对话信息保存:只要双方认可就可保存对话记录,双方需要持有一定量的token。
4. 再次传输提醒:如果一位用户给另外一位用户发送了一份文件,但他不希望对方进行分享,用户可以通过使用一定的token,当文件被再次传输时会获得通知提醒。
5. 秘钥解锁文件:一位用户给另外一位传输秘钥文件,只允许对方查看。发送的用户可以通过使用token,让对方收到的是碎片化的文件,只有通过发送者那里得到秘钥才能解锁文件。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
8. 区块链-什么是区块链金点币讯能读懂区块链
区块链-什么是区块链?金点币讯能读懂区块链?区块先锋动画视频带你了解什么是区块链,简单易懂
什么是区块链,卯贝属于区块链?答:卯贝不是属于区块链,只是运用了区块链的技术,区块链的特性就是每件发生的事物都会被记录,不得删除更改。
区块链,什么是区块区块链全面解读
一说起区块链,人们总是拿它与比特币相提并论。 2008年10月31日,一名叫“中本聪”的人在一个密码学邮件群组中发出电子邮件,宣称,“我一直在研究一个新的电子现金系统,这完全是点对点的,无需任何可信的第三方。 ”他推出了一个以比特币为交易货币的新体系。
什么是区块链技术?什么叫区块链?区块链是一种分布式共享记账的技术,它要做的事情就是让参与的各方能够在技术层面建立信任关系。
区块链可以大致分成两个层面,一是做区块链底层技术;二是做区块链上层应用,即基于区块链的改造、优化或者创新应用。
区块链的核心意义到底是什么,我们的理解是,区块链最核心的意义是参与方之间建立数据信用,通过单方面的对抗,在明确规定下打造单方面的生态共同保障完整机会,这是一个体系,这种建立可以结束没有区块链之前的问题,没有区块链之前,在数据共享的时候是无法做到有新的共享,即使做定向也只是给你一个接口,区块链有了以后,让参与方是实现信用的共享。
区块链的底层平台有哪些?
答:主要有一下几类:
1、比特币。是最早的区块链开发便是基于比特币的区块链网络进行开发了,由于比特币是全球最广泛使用和真正意义的去中心化,就区块链应用来说,比特币就是世上最强大的锚,拥有最大的权威性。
2、以太坊。可以说除了比特币外,以太坊目前在区块链平台是最吸引眼球的。 以太坊是一个图灵完备的区块链一站式开发平台,采用多种编程语言实现协议,采用Go语言写的客户端作为默认客户端(即与以太坊网络交互的方法, 支持其他多种语言的客户端)。
3、IBM HyperLedger 。又叫 fabric,他的目标是打造成一个由全社会来共同维护的一个超级账本,fabric源于IBM,初衷为了服务于工业生产,IBM将44,000行代码开源,是了不起的贡献,让我们可以有机会如此近的去探究区别于比特币的区块链的原理。
4、LISK。是新一代的区块链平台,允许JavaScript(又是Javascript技术,工程师们注意了)的开发和基于分布的分散的应用程序使用一个易于使用的,功能齐全的生态区块链系统。
5、网录区块链平台。是网录区块链底层技术的研发成果和能够进行商业交付的基础平台,网录区块链平台除了服务网录公链外,也是网录为客户打造私有链和联盟链的基础平台。
什么是区块链?什么是数字货币的区块链? 狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数 据的一种全新的分布式基础架构与计算范式。
现在,主流的数字货币基本上都是基于区块链技术开发的。区块链是数字货币的底层技术。国内的茶本位数字货币普银就是基于区块链技术开发的。
区块链的本质是一种去中心化的记账系统,比特币是这个系统上承载的“以数字形式存在”的货币。区块链是比特币背后的一套由信用记录和信用记录的清算构成的体系。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 [1] 。
区块链(Blockchain)是比特币的一个重要概念,火币网联合清华大学五道口金融学院互联网金融实验室、新浪科技发布的《2014—2016全球比特币发展研究报告》提到区块链是比特币的底层技术和基础架构 [2] 。它本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块
区块链的进化方式是:
▪ 区块链1.0——数字货币
▪ 区块链2.0——数字资产与智能合约
▪ 区块链3.0——IFMChain,区块链正式链接移动终端
9. 区块链技术概念
区块链技术概念
区块链技术概念,现如今,区块链已经成为大部分人关注的领域,很多企业也早已深入其中研究该技术情况,但是还有人对于它不是很了解,下面我分享一篇关于区块链技术概念的相关信息。
区块链技术概念1区块链的基本概念和工作原理
1、基本概念
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。
区块链Blockchain、是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性防伪、和生成下一个区块。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
2、工作原理
区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。
区块链主要解决的交易的信任和安全问题,因此它针对这个问题提出了四个技术创新:
1、分布式账本,就是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点都记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证。
跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。 [8]
没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
2、非对称加密和授权技术,存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
3、共识机制,就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能.
4、智能合约,智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息包括医疗信息和风险发生的信息、都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔.
3、其它
互联网交换的是信息,区块链交换的是价值。人类历史和互联网历史可以用八个字理解:分久必合合久必分,到了分久必合的时代,网络信息全部散在互联网上面,大家要挖掘信息非常不容易,这时会出现像谷歌和脸 书等的平台,它做的唯一的事情就是把我们所有的信息重新组合了一下。互联网时代垄断巨头们重组的就是信息,并不是产生自己的信息,产生的信息完全是我们个人。一旦信息重组,就会出现一个新的垄断巨人,所以就到了分久必合的时代。现在由于区块链技术产生又到了合久必分时代,又是新的多中心化,新的多中心化之后赋能产生新的价值,这些数据会在我们自己的手上,个人数据产生价值是归自己所有,这是这个时代最最激动人心的时代。
区块链的价值有哪些?低成本建立信任的机制,确立数权,解决数据的.产权。
目前区块链技术不断发展,包括现在的单链向多链发展,而且技术能够在进一步扩展,我想未来还是可能会出现,特别是在交易等方面出现颠覆性的,特别是对现有产业的很多颠覆性的场景。
区块链的本质是在不可信的网络建立可信的信息交换。
一带一路+一链。区块链更大的不是制造信任,而是让信任产生无损的传递,整个降低社会的摩擦成本,从而提高整个效益。
现在区块链本身还是初始阶段,所以包括区块链的信息传递、加密,这个过程中出现量子加密和其他加密,实际上对区块链本身所采用的加密算法攻击现象也时有发生。包括区块链也是作为一种资产的认定,数字资产的一个认定,但是现在我们很多都是用密码算法,或者是作为我们来解密的钥匙,但是如果密码忘记了,很可能你现在的资产就丢掉了,你不能够在得到你原来的这些资产,所以在资产管理,包括信息传递和一些安全这些方面,应该说都还是存在着一些隐患。当然那么从技术角度,现在我们区块链本身处理的速度,或者说本身的扩展性,因为从工作机理的角度来看,是要把整个账本要复制给所有的参与人员,所以在区块链本身的运作效率和扩展性方面还是比较受限的。这些我们觉得都还是需要进一步在技术方面有进一步的发展。
区块链平台这些底层技术,又形成包括区块链钱包、区块链浏览器、节点竞选、矿机、矿池、开发组件、开发模块、技术社区及项目社群等一系列的生态系统,这些生态系统的完善程度直接决定着区块链底层平台的使用效率和效果。
4、蒙代尔的不可能三角
去中心化、高效、安全,不可能实现三者全部同时达到极致。
区块链技术概念2区块链的本质是一种分布式记账技术,与之相对的是中心式记账技术,中心式记账技术在我们目前的生活中广泛存在。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
区块链Blockchain、,是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性防伪、和生成下一个区块。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
区块链技术通俗的理解就是:把“物”的前、后、左、右区块用一种技术连接成一个链条,但每个区块的原始数据不可篡改,是一种物联网范畴的、可以让参与者信任的“各个模块链动”的技术。区块链技术的应用,离不开互联道网,也离不开物联网,是建立在二者融合互动基础上的、但又让参与者各自保持独回立的去中心化、、并共同拥有这套价值链共建共享、的技术。
区块链的特征:去中心化、开放性、自治性、信息不可篡改,匿名性。
区块链是一个能够传递价值的网络,对可以传递价值的网络的需求是推动区块链技术产生的重要原因。在对于保护带有所有权或者其他价值的信息需求的推动下,区块链出现了。区块链通过公私钥密码学、分布式存储等技术手段,一方面保证了带有价值的信息的高效传递,另一方面保证了这些信息在传递的过程中不会被轻易的复制篡改。
从区块链诞生的必然性来理解区块链的内涵,区块链是解决了中心化记账缺点、解决了分布式一致性问题的分布式记账技术,同时也是连接互联网升级为保证带有价值的信息安全高效传递的价值网络。
区块链技术概念3区块链: 区块链就像是一个全球唯一的帐簿,或者说是数据库,记录了网络中所有交易历史。
以太坊虚拟机(EVM): 它让你能在以太坊上写出更强大的程序比特币上也可以写脚本程序、。它有时也用来指以太坊区块链,负责执行智能合约以及一切。
节点:你可以运行节点,通过它读写以太坊区块链,也即使用以太坊虚拟机。完全节点需要下载整个区块链。轻节点仍在开发中。
矿工:挖矿,也就是处理区块链上的区块的节点。这个网页可以看到当前活跃的一部分以太坊矿工:stats.ethdev.com。
工作量证明:矿工们总是在竞争解决一些数学问题。第一个解出答案的(算出下一个区块)将获得以太币作为奖励。然后所有节点都更新自己的区块链。所有想要算出下一个区块的矿工都有与其他节点保持同步,并且维护同一个区块链的动力,因此整个网络总是能达成共识。(注意:以太坊正计划转向没有矿工的权益证明系统(POS),不过那不在本文讨论范围之内。)
以太币:缩写ETH。一种你可以购买和使用的真正的数字货币。这里是可以交易以太币的其中一家交易所的走势图。在写这篇文章的时候,1个以太币价值65美分。
Gas:在以太坊上执行程序以及保存数据都要消耗一定量的以太币,Gas是以太币转换而成。这个机制用来保证效率。
DApp: 以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App)。DApp的目标是(或者应该是)让你的智能合约有一个友好的界面,外加一些额外的东西,例如IPFS可以存储和读取数据的去中心化网络,不是出自以太坊团队但有类似的精神)。DApp可以跑在一台能与以太坊节点交互的中心化服务器上,也可以跑在任意一个以太坊平等节点上。(花一分钟思考一下:与一般的网站不同,DApp不能跑在普通的服务器上。他们需要提交交易到区块链并且从区块链而不是中心化数据库读取重要数据。相对于典型的用户登录系统,用户有可能被表示成一个钱包地址而其它用户数据保存在本地。许多事情都会与目前的web应用有不同架构。)
以太坊客户端,智能合约语言
编写和部署智能合约并不要求你运行一个以太坊节点。下面有列出基于浏览器的IDE和API。但如果是为了学习的话,还是应该运行一个以太坊节点,以便理解其中的基本组件,何况运行节点也不难。
运行以太坊节点可用的客户端
以太坊有许多不同语言的客户端实现即多种与以太坊网络交互的方法、,包括C++, Go, Python, Java, Haskell等等。为什么需要这么多实现?不同的实现能满足不同的需求例如Haskell实现的目标是可以被数学验证、,能使以太坊更加安全,能丰富整个生态系统。
在写作本文时,我使用的是Go语言实现的客户端geth (go-ethereum),其他时候还会使用一个叫testrpc的工具, 它使用了Python客户端pyethereum。后面的例子会用到这些工具。
关于挖矿:挖矿很有趣,有点像精心照料你的室内盆栽,同时又是一种了解整个系统的方法。虽然以太币现在的价格可能连电费都补不齐,但以后谁知道呢。人们正在创造许多酷酷的DApp, 可能会让以太坊越来越流行。
交互式控制台:客户端运行起来后,你就可以同步区块链,建立钱包,收发以太币了。使用geth的一种方式是通过Javascript控制台。此外还可以使用类似cURL的命令通过JSON RPC来与客户端交互。本文的目标是带大家过一边DApp开发的流程,因此这块就不多说了。但是我们应该记住这些命令行工具是调试,配置节点,以及使用钱包的利器。
在测试网络运行节点: 如果你在正式网络运行geth客户端,下载整个区块链与网络同步会需要相当时间。你可以通过比较节点日志中打印的最后一个块号和stats.ethdev.com上列出的最新块来确定是否已经同步。) 另一个问题是在正式网络上跑智能合约需要实实在在的以太币。在测试网络上运行节点的话就没有这个问题。此时也不需要同步整个区块链,创建一个自己的私有链就勾了,对于开发来说更省时间。
Testrpc:用geth可以创建一个测试网络,另一种更快的创建测试网络的方法是使用testrpc. Testrpc可以在启动时帮你创建一堆存有资金的测试账户。它的运行速度也更快因此更适合开发和测试。你可以从testrpc起步,然后随着合约慢慢成型,转移到geth创建的测试网络上 - 启动方法很简单,只需要指定一个networkid:geth --networkid "12345"。这里是testrpc的代码仓库,下文我们还会再讲到它。
接下来我们来谈谈可用的编程语言,之后就可以开始真正的编程了。写智能合约用的编程语言用Solidity就好。
要写智能合约有好几种语言可选:有点类似Javascript的Solidity, 文件扩展名是.sol. 和Python接近的Serpent, 文件名以.se结尾。还有类似Lisp的LLL。Serpent曾经流行过一段时间,但现在最流行而且最稳定的要算是Solidity了,因此用Solidity就好。听说你喜欢Python? 用Solidity。
solc编译器: 用Solidity写好智能合约之后,需要用solc来编译。它是一个来自C++客户端实现的组件又一次,不同的实现产生互补、,这里是安装方法。如果你不想安装solc也可以直接使用基于浏览器的编译器,例如Solidity real-time compiler或者Cosmo。后文有关编程的部分会假设你安装了solc。
web3.js API. 当Solidity合约编译好并且发送到网络上之后,你可以使用以太坊的web3.js JavaScript API来调用它,构建能与之交互的web应用。
10. dapp客户端如何跟区块链节点
运营人员通过中心化的应用市场发布进行连接。
随着区块链技术的发展,公链基础设施的不断完善, DAPP(去中心化应用)可能将成为主流。