主页 > imtoken安卓官方版 > 区块链到底是什么

区块链到底是什么

imtoken安卓官方版 2023-03-10 06:27:57

1. 区块链

1.1. 概念概述

可以说,区块链是比特币概念的产物。 在当时最先提出比特币概念的论文中,“区块”和“链”这两个词已经存在,但并不存在。 把这两个词结合起来。 区块链的概念于2016年首次提出,区块链英文名称为Blockchain。 从它的字面意思,你可以很容易地知道它是块和链的结合。 比特币也是区块链的一个应用,是迄今为止规模最大、应用最广泛的。

到目前为止,区块链的定义并不唯一,但结合区块链的特点,不难发现,区块链实际上是一种基于比特币区块链技术的公共数据库,但这种数据库的特殊之处在于,数据库是分散的。

1.2. 核心算法概述

1.2.1. 拜占庭协议

拜占庭协议来源于拜占庭问题:拜占庭帝国拥有巨大的财富,周边10个邻国早已奄奄一息,但拜占庭的城墙高得无法攻破,任何一个邻国都无法成功入侵。 任何一个邻居入侵都会失败,也可能被其他9个邻居入侵。

他的核心思想是每个将军都有一个与其他将军实时同步的消息账本。 可以验证分类账中每个将军的签名。 如果有任何不一致的消息,你可以知道这些消息与哪些将军不一致。 虽然有不一致的消息,但只要过半同意攻击,少数服从多数,就达成了共识。

区块链也使用了这个核心思想。 区块链提供分布式账本平台。 区块链提供的账本称为超级账本。 一般将多笔交易打包成区块,多个区块组成一条区块链。 区块链代表账本状态机变化的历史过程。

1.2.2. 非对称加密

非对称加密,其实就是用一对公钥和私钥进行加密。 用私钥加密的密文只能用公钥解密。 在这种情况下,它可以用来验证加密方的身份,可以作为数字签名。 当然,只有私钥才能解密用公钥加密的密文,得到对应的明文。

一般而言,如果您对他人保密您的私钥,那么您所拥有的与该私钥相关的一切都是安全的。

非对称加密示例

非对称加密算法有很多种,例如麻省理工学院三位学者提出的RSA加密算法,由背包问题导出的Knapsack算法,由离散对数问题导出的Elgamal算法,以及基于在椭圆曲线上。 椭圆曲线加密算法等。在本文中,我们使用以太坊的椭圆曲线加密算法。 椭圆曲线加密算法是以太坊的核心。 以太坊上的所有通信都需要发起者通过其私钥进行签名,而其他通信者则需要使用发起者的公钥进行解密。 假设区块链上的两个用户要通信,他们如何通信? 我们消息的发送方是A,消息的接收方是B。首先,A需要用私钥加密他要发送的消息。 加密过程如下:

1)首先生成一个随机数r0,选择基点P,然后求随机数与基点的乘积点:

2)根据明文m、明文m的哈希值h、A自己的私钥SKC生成s:

3)以上所有工作完成后,将s、点r0P、消息m发送给B,其中s和r0P为数字签名。

那么B收到A发送的信息后如何处理数据呢? 数据处理过程如下:

1)利用A发送的消息m计算m的哈希值h。

2)用A的公钥PKC和基点P、s计算C:

3)如果签名正确,会得到结果:C=r0P

1.2.3、容错问题

消息在传输过程中可能会丢失、损坏、延迟、重复发送、接受顺序与发送顺序不一致。

节点的行为也可以是多样的,可以随时加入和退出网络,可以丢弃消息、伪造消息、停止工作等,并可能发生各种人为或非人为的故障。

区块链上的算法为共识节点组成的共识系统提供容错能力。 这种容错性包括安全性和可用性,适用于任何网络环境。

1.2.4. 分布式共识算法

要理解这类算法,首先要知道两个定理:FLP不可能性和CAP定理。

FLP impossibility 意味着即使网络通信是完全可靠的以太坊停止挖矿如何挖矿,只要出现拜占庭错误,就没有确定性的共识算法可以为异步分布式系统提供一致性。

CAP定理的意思是,在设计分布式系统的过程中,在“一致性”、“可用性”和“分区容错性”三者中,我们只能选择其中的两个作为主要加强点,另一个必然会被削弱。

为了保证每个节点执行相同的指令序列,区块链需要对每条指令执行“一致性算法”,保证每个节点看到的指令是一致的。 也就是说,每个节点在相同的状态下执行相同的命令后,最终的状态是一致的。

1.2.5. 共识机制

在共识机制中,最重要的两个证明是:工作量证明和权益证明的相关算法。

工作量证明意味着为了选举一个参与者成为领导者并选择下一个要添加到区块链的区块,参与者必须解决一个特定的数学问题。

Proof of Stake 是指 Proof of Stake 以股权取代 Proof of Work 的电力和算力需求。 Stake 是指参与者在一段时间内愿意锁定的代币数量。 作为回报,他们成为下一个领导者并选择下一个区块的概率与他们投入的金额成正比。

简而言之,区块链共识机制的核心思想就是让攻击者能够得到的收益远小于他攻击成功所付出的代价。

1.2.6. 分布式存储

分布式存储的思想,如果说通俗一点的话,其实就是他想把100个鸡蛋放在不同的篮子里。

分布式存储技术并不是将完整的数据存储在每台计算机中,而是将数据分片并在不同的计算机中进行加密。

相应的信息存储在哪里? 实际上,它存储在矿工的计算机中。 存储时,分片文件的存储信息会记录在区块链上,防止信息被篡改。

1.3. 零知识证明

1.3.1. 概述

让我们看两个零知识证明的例子:

1)证明你有练习题的答案?

没有人想看我的答题簿。 如果你想知道我真的有答案,那么你可以提出问题,让我给你结果。

2)证明你有公司所有电脑的密码?

我可以打开任何你想让我打开的电脑。

再看一下同样的解决方案,但不是零知识证明的例子:

1)证明你有练习题的答案?

将答题簿直接交给其他人,让他们验证答案是否正确。

2)证明你有公司所有电脑的密码?

我告诉你密码,你去验证一下。

通过上面的例子,其实很容易理解零知识证明的核心思想。 其实你有相应的数据,但是别人要你证明你有这个数据的时候,你不让他们看到你有什么。 数据。

1.3.2. 例子

以DUBI车险数据处理方法为例。

2. 区块链1.0-比特币

2.1. 概述

比特币与纸币、黄金、白银等交易货币的区别在于它只是一串数字,每一枚比特币都是独一无二的一串数字。 在比特币网络中,两种不同的编码代表同一个值是绝对不可能的。 就比特币而言,比特币的所有者拥有自己的比特币账户地址。

2009年1月3日,提出比特币概念的匿名用户开始了实现自己想法的实践之旅。 他在赫尔辛基的服务器上创建了比特币世界的第一个区块。 我们称这个区块为“创世区块”。 顾名思义,这是许多链式区块中的第一个。

2.2. 区块信息

比特币的每个区块包含三个部分:区块的基本情况、哈希值和交易明细。 区块的基本情况包含很多信息:交易数量、交易产生的费用、给矿工的比特币数量、挖矿难度、区块创建时间等。在哈希中value,它包含了该区块的哈希值、矿工加入该区块的哈希值、本区块前一个区块的哈希值、下一个区块的哈希值等。 每笔交易在这个区块中记录的所有交易(时间、输入地址、输出地址等)都包含在交易明细中。

如果觉得描述过于抽象,可以找创世块看看具体结构是什么样子的。

3. 区块链2.0-以太坊

3.1. 概述

以太坊是一个开放链,可以处理以太坊上金融和非金融应用的状态。 以太坊的计算机网络具有创新性和吸引力,能够实现真正的去中心化应用。 使用以太坊开发应用程序并不困难。 以太坊提供了很多可以用来开发应用程序的框架,包括密码学技术的基础框架。 因此,使用以太坊进行应用开发,不仅可以降低开发难度,还可以为应用提供安全技术支持。 从以太坊的发展来看,他带来的变化会影响全球经济的走向。

以太坊包括用于构建和分发应用程序的以太脚本,以及它自己的称为以太的数字货币。 以太坊与比特币非常相似。 这两种数字货币都是不可伪造的,都采用去中心化的方式来保证货币不受单一方控制。 以太坊脚本提供了完整的编程语言环境。 有了以太坊脚本,我们就可以毫无歧义地制定合约。

从以太坊设计的底层来看,以太坊实际上是一个基于计算机密码学的开源技术协议。 以太坊有很多模块,每个模块实现不同的功能,然后将各个模块整合起来,就形成了以太坊的整体。 同时,以太坊可以看作是智能合约和区块链的完美结合。 我们可以部署已经写入以太坊的智能合约,使用以太坊虚拟机和以太坊提供的RPC接口来访问智能合约,实现与区块链的交互。

以太坊虚拟机是以太坊的重要组成部分,用于为智能合约提供执行环境。 事实上,他是以太坊项目中许多创新的一部分。 以太坊虚拟机由许多相互连接的计算机构建而成。 每个人都可以在以太坊上定义智能合约,这些程序将按照虚拟机定义的方式执行。 以太坊上的账户(其实就是以太坊地址)可以分为两类:外部账户和合约账户。 外部账户的以太坊地址实际上是由其公钥决定的,而合约账户的以太坊地址是从合约创建者的以太坊地址和合约创建时的这个地址生成的。 取决于交易的数量。 这两类账户的区别在于外部账户在以太坊中没有代码,人们可以通过生成和签署交易来从外部账户发送信息。

3.2. 以太坊钱包

常用的以太坊钱包有五种,分别是:Parity、MyEtherWallet、imToken、MetaMask、Legder。 接下来简单介绍几款以太坊钱包:

•Parity:这个以太坊钱包是由以太坊基金会的一些成员提出并开发的。 它是一个全节点以太坊钱包,功能非常齐全。 这个钱包的安全性非常高,发起交易时不会有第三方参与。 但是,也有一些缺点,其中之一就是对网络的要求比较高。

•MyEtherWallet:MyEtherWallet 是一个轻钱包。 如果你想使用这个钱包,你不需要下载它。 您可以直接在网页上完成所有操作,支持众多硬件钱包。 但是,MyEtherWallet 不会帮助用户保存在 MyEtherWallet 上生成的密钥。 用户需要自己保存密钥,进行交易时需要输入密钥。

•imToken:imToken是一款操作简单的手机钱包,让用户快速上手。 本钱包生成的密钥可以保存在手机本地,平台没有备份。 另外,对于广大开发者来说,一个很大的优势就是这个软件现在是开源的。 imToken 的缺点是只有手机客户端。

•MetaMask:MetaMask一开始被大多数人认为是chrome浏览器的插件。 在本文中,也使用了 MetaMask 钱包,但它是作为 Firefox 浏览器的一部分使用的。 MetaMask 支持各种硬件钱包,操作简单。 但是,MetaMask 需要我们自己添加代币的智能合约地址。

•Legder:这是一个硬件钱包,可以很好的保护用户的账户安全。 除了手机钱包外,它可以与上面提到的以太坊钱包一起使用,但这款钱包的价格并不便宜。

3.3. 以太坊客户端

如果你还在为只会一种编程语言而无法开发以太坊而烦恼,那么这些考虑都是多余的,而以太坊官方正好为你解决了这个问题。

为了能够使用各种语言为以太坊的测试提供支持,也为了让更多的人加入到以太坊的开发中,目前有8种语言编写的以太坊客户端。 它们是用c++语言编写的以太坊客户端cpp-ethereum,以及以太坊开发用Go语言编写的go-ethereum客户端,也就是本文使用的geth客户端。 Java语言编写的以太坊客户端ethereumjs-lib,Java语言编写的以太坊客户端Ethereum(J),Ruby语言编写的以太坊客户端ruby-ethereum,Python语言编写的客户端pyethapp,使用Rust编写的Parity客户端语言,是目前以太坊开发最便携的客户端,在之前的以太坊攻击中表现良好。 用Hashell语言写的客户端目前为止关于这个客户端的信息最少,所以不推荐使用这个客户端。 在上面提到的几个客户端中,本文推荐使用geth客户端作为以太坊开发的客户端,因为geth客户端是以太坊一直没有停止维护的客户端,也是官方推荐的。

以太坊官方还提供了一个专门的客户端浏览器——Mist,使用这个浏览器,用户可以运行各种以太坊应用程序。 Mist是一款对新手非常友好的浏览器。 用户在使用时不需要太多的专业知识,因此用户可以轻松使用该浏览器。 此外,Mist具有优秀的安全机制、公私钥管理机制,以及与区块链相关组件的组合,使其成为不懂编程或不精通区块链的用户运行去中心化应用和运行的非常重要的一环。管理区块链相关的应用程序,因为他们不懂编程或者不精通区块链 区块链的用户不需要了解以太坊的底层设计。

3.4. 智能合约

其实智能合约的概念很早就被提出来了。 智能合约的概念是由 Nick Szabo 在 1990 年代提出的。 智能合约的历史几乎与互联网一样悠久。 智能合约其实就是一段可执行代码,只不过这段代码实现了传统意义上的合约。 两方或多方可以签署一份被智能合约认可的协议。 由于当时缺乏可信赖的执行环境,在现实生活中使用智能合约似乎是不可能的。 然而,比特币概念提出后,人们才意识到比特币的核心技术——区块链技术恰好可以作为执行智能合约的可靠运行环境,而以太坊公链率先实现了完美结合智能合约和区块链工作。

在以太坊内部,有一个配备了图灵完备编程语言的区块链。 我们可以利用这个特性构建一个抽象的应用基础层,让所有想通过以太坊构建合约的人都可以构建合约和基于以太坊的应用,并在以太坊中定义自己的规则。 如果我们要编写智能合约,solidity 语言将是我们首选的编程语言。 我们可以通过truffle框架轻松编译solidity编写的智能合约以太坊停止挖矿如何挖矿,并通过truffle部署智能合约。 整个过程无需开发者手动编程,仅依赖truffle框架即可轻松编译部署智能合约。

3.5. 如何创建DAPP

我们可以结合以太坊开发DAPP。 具体的开发步骤我会在后面留下。

4. 区块链发展指导

4.1. 设置以太坊环境

在Linux系统下配置以太坊开发环境:

输入以下命令安装 solc:

sudonpm 安装-g solc

我们需要在geth控制台使用solc编译器,所以还是需要安装solc二进制包。 输入以下命令安装 solc 二进制包:

sudoadd-apt-repository ppa:ethereum/ethereum sudoapt-get update sudoapt-get install solc whichsolc可以用来验证环境是否安装成功

4.2、以太坊客户端安装

本文使用geth搭建的私有链,所以需要安装geth客户端:

输入以下命令安装geth客户端:

sudo apt-get installsoftware-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-getupdate sudo apt-getinstallethereum

4.3、truffle框架安装

安装NodeJs,如果要使用truffle框架操作智能合约,需要有NodeJs环境,NodeJs版本不能低于5.0

输入以下命令安装 NodeJS:

sudo apt-getinstall curl curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash sudo apt-getinstall -y nodejs

为了更快的开发以太坊,我们需要安装truffle框架:

输入以下命令安装松露框架:

sudonpm install -g 松露

4.4、以太坊客户端geth安装

本文使用geth搭建的私有链,所以需要安装geth客户端:

输入以下命令安装geth客户端:

sudo apt-get installsoftware-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-getupdate sudo apt-getinstallethereum

4.5. 私有链建设

本文使用的是自己搭建的私有链。 当然你也可以使用Ganache的本地私有链。 Ganache 的私有链非常简单。 你只需要安装Ganache并打开它就可以成为私有链。

据我所知,使用geth客户端搭建私有链有两种方式。 这里推荐一个链接:私链搭建方法

4.6. 矿业

使用以下命令开始和停止挖矿:

挖矿命令:

miner.start

停止挖矿命令:

矿工。 停止

4.7. 常用的truffle框架命令

初始化文件:

松露初始化

编译智能合约:

松露编译