Fabric入门指南:构建你的第一个区块链应用

发布时间: 2024-01-14 08:24:58 阅读量: 55 订阅数: 30
# 1. 区块链基础知识入门 ## 1.1 什么是区块链? 区块链是一种分布式数据库,它存储了一系列按时间顺序排列的数据块,每个数据块都包含了一定数量的交易信息,同时也包含了前一个数据块的哈希值。这种连接方式使得区块链中的数据无法被篡改,保证了其安全性和可信度。 ## 1.2 区块链的核心概念 区块链的核心概念包括去中心化、分布式共识、加密技术和智能合约。去中心化指的是没有中心化的管理机构,所有的参与者共同维护区块链网络。分布式共识是指通过共识算法,让网络中的节点就系统状态达成一致。加密技术确保了数据在传输和存储过程中的安全性。智能合约是一种基于区块链的自动化合约,执行合约中规定的交易逻辑。 ## 1.3 区块链的特点和优势 区块链具有去中心化、不可篡改、透明可追溯、安全可信等特点。这使得区块链在金融、供应链、医疗等领域都有着广泛的应用前景。 ## 1.4 Fabric区块链框架简介 Fabric是一个modular(模块化的), scalable(可扩展的), and secure(安全的)的区块链平台。它支持一系列的共识算法,可以满足不同场景下的共识需求。Fabric还提供了丰富的权限管理模块,可以灵活定制用户权限和数据访问控制规则。Fabric的智能合约支持多语言开发,并且极大地降低了区块链应用开发的难度。 接下来,我们将深入介绍Fabric框架的概览。 # 2. Fabric框架的概览 在本章中,我们将对Fabric框架进行概述和介绍,包括其组成和架构,以及核心组件的功能和作用。我们还会探讨Fabric网络的部署和运行方式。 ### 2.1 Fabric的组成和架构 Fabric是一个用于构建企业级区块链应用的开源框架。它由一系列的组件构成,每个组件负责不同的功能。下面是Fabric的主要组成部分: - Peer节点:Peer节点是Fabric网络中的参与者,可以执行交易和存储数据。每个Peer节点都有自己的账本(Ledger),用于存储交易和状态数据。 - Orderer节点:Orderer节点负责对交易进行排序和打包,并将打包后的交易分发给Peer节点。它确保在整个网络中所有节点上的交易顺序一致。 - CA(Certificate Authority):CA负责颁发和管理证书,确保网络中各个参与者的身份和权限。 - Chaincode(智能合约):Chaincode是Fabric中的智能合约,由开发者编写并部署到网络中。它定义了业务逻辑和交易规则,可以被Peer节点执行。 Fabric的架构采用了分布式的设计,每个节点都是平等的,并且网络中的数据和交易只有经过验证和共识才会被接受和执行。 ### 2.2 Fabric的核心组件介绍 #### 2.2.1 Peer节点 Peer节点是Fabric网络中的参与者,在网络中扮演着执行交易和存储数据的角色。每个Peer节点都有唯一的标识符(MSP ID)和证书,以确保其身份和权限的有效性。Peer节点还负责维护和更新账本,其中包含了所有的交易和状态数据。Peer节点可以分为两种类型:Endorsing Peer和Committing Peer。 - Endorsing Peer:负责对交易进行背书,验证交易的有效性,并提供背书(Endorsement)签名。Endorsing Peer可以执行智能合约,并返回交易的结果。 - Committing Peer:负责将背书(Endorsement)交给Orderer节点进行排序和打包,并保存打包后的交易到账本中。Committing Peer还负责将交易结果广播给其他Peer节点。 #### 2.2.2 Orderer节点 Orderer节点是Fabric网络中的排序和共识节点。它负责将交易进行排序和打包,并将打包后的交易分发给Peer节点。Orderer节点确保在整个网络中所有节点上的交易顺序一致。Fabric中使用的排序服务是Raft或Kafka等共识算法来保证交易的可靠性和一致性。Orderer节点可以通过配置文件进行多个节点的集群部署,以提高可用性和容错性。 #### 2.2.3 CA(Certificate Authority) CA是Fabric网络中的证书颁发机构,负责颁发和管理证书,确保网络中各个参与者的身份和权限。通过CA,可以为每个节点和组织生成唯一的证书,以确保其身份的有效性。 CA通常分为根CA和中间CA,根CA用于签发中间CA的证书,中间CA则用于签发节点和组织的证书。通过证书,节点可以进行身份认证和交易授权,确保网络的安全性。 ### 2.3 Fabric网络的部署和运行方式 Fabric网络可以根据实际需求进行不同的部署和运行方式,常见的方式包括单机模式、本地网络和多机网络。 - 单机模式:在单机模式下,所有的Fabric组件都运行在同一台机器上。这种模式适合于学习和测试的目的,但不适合部署到生产环境。 - 本地网络:本地网络是指将Fabric组件部署到多台机器上,通过本地网络连接起来。在本地网络中,可以通过Docker容器或虚拟机来运行Peer节点、Orderer节点和CA。 - 多机网络:多机网络是指将Fabric组件分布部署到多台物理机或云服务器上。在多机网络中,需要对每个节点进行配置和管理,并确保节点之间的网络通信正常。 通过以上的介绍,我们对Fabric框架的概览有了初步的了解。在接下来的章节中,我们将学习如何安装配置Fabric环境、编写智能合约,并构建自己的第一个Fabric应用。 # 3. 准备环境和工具 在开始构建Fabric应用之前,我们需要先准备好环境和工具。本章将介绍如何安装和配置Fabric环境,以及准备所需的开发工具和软件包,并创建Fabric网络的测试环境。 #### 3.1 安装和配置Fabric环境 Fabric是一个基于Hyperledger项目的区块链框架,所以在安装Fabric之前,我们需要先安装并配置Hyperledger Fabric的相关环境。 根据你的操作系统选择相应的安装方式,这里以Ubuntu为例。 1. 首先,打开终端并执行以下命令来安装必要的依赖包: ``` sudo apt-get update sudo apt-get install curl docker docker-compose ``` 这将安装Docker和Docker Compose,它们是运行Fabric网络所必需的。 2. 安装Node.js运行时和npm包管理工具: ``` sudo apt-get install nodejs npm ``` 确保安装的Node.js版本是8.x或以上。 3. 安装Go语言运行时和工具链: 首先,下载适用于你的操作系统的Go安装包,并解压到指定目录中,然后将Go的二进制文件路径添加到环境变量中。例如: ``` wget https://dl.google.com/go/go1.15.2.linux-amd64.tar.gz tar -C /usr/local -xzf go1.15.2.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin ``` 这样就安装好了Go运行时和工具链。 4. 配置Fabric环境: 在安装完所有依赖包之后,我们需要配置一些环境变量来正确运行Fabric。创建一个名为`fabric-env.sh`的脚本文件,并添加以下内容: ``` export PATH=$PATH:/usr/local/go/bin export GOPATH=/path/to/your/gopath export FABRIC_CFG_PATH=/path/to/your/fabric/config ``` 将`/path/to/your/gopath`替换为你实际的Go工作目录,将`/path/to/your/fabric/config`替换为你实际的Fabric配置文件目录。 最后执行以下命令来加载环境变量: ``` source fabric-env.sh ``` 至此,Fabric环境的安装和配置已完成。 #### 3.2 准备所需的开发工具和软件包 在开始构建Fabric应用之前,我们还需要准备一些开发工具和软件包来辅助我们的开发工作。具体包括: - 编辑器/IDE:选择一个适合你的编辑器或IDE,例如Visual Studio Code、IntelliJ IDEA等,用于编写和调试代码。 - Hyperledger Fabric源代码:通过以下命令克隆官方的Fabric源代码到本地: ``` git clone https://github.com/hyperledger/fabric.git ``` - Fabric Node.js SDK:使用以下命令安装Fabric Node.js SDK: ``` npm install fabric-network fabric-ca-client ``` - Fabric Java SDK:在Maven项目的pom.xml中添加以下依赖: ```xml <dependencies> <dependency> <groupId>org.hyperledger.fabric-sdk-java</groupId> <artifactId>fabric-sdk-java</artifactId> <version>2.2.0</version> </dependency> </dependencies> ``` - Fabric Go SDK:在Go项目中导入以下包: ```go import ( "github.com/hyperledger/fabric-sdk-go/pkg/client/channel" "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk" "github.com/hyperledger/fabric-sdk-go/pkg/core/config" ) ``` 以上是准备所需的开发工具和软件包的步骤,按照你选择的开发语言和工具进行安装和配置即可。 #### 3.3 创建Fabric网络的测试环境 在开始构建和部署Fabric应用之前,我们通常需要先创建一个测试环境来模拟Fabric网络的运行。 Fabric提供了一个名为Test Network的示例网络,用于快速创建本地测试网络。你可以通过以下步骤来设置并运行Test Network: 1. 进入Fabric源代码的`test-network`目录: ``` cd path/to/fabric/test-network ``` 2. 启动Test Network: ``` ./network.sh up ``` 这将启动一个包含多个Peer节点和Orderer节点的Fabric网络。 3. 创建通道和安装链码: ``` ./network.sh createChannel ./network.sh deployCC ``` 这将创建一个名为`mychannel`的通道,并在上面部署一个示例链码。 至此,你已成功创建了一个Fabric测试网络,并准备好开始构建你的第一个Fabric应用。 在本章中,我们介绍了如何安装和配置Fabric环境,准备所需的开发工具和软件包,以及创建Fabric网络的测试环境。在下一章节中,我们将学习如何编写智能合约来实现具体的业务逻辑。 # 4. 编写智能合约 智能合约是区块链应用的核心组成部分,它们定义了网络上的交易规则和操作逻辑。在Fabric中,智能合约通常使用链码(chaincode)来实现。本章将介绍如何使用Solidity语言编写智能合约,并演示如何部署和测试智能合约。 #### 4.1 Solidity语言介绍 Solidity是一种面向智能合约的高级编程语言,它专门用于在以太坊等区块链平台上编写智能合约。它的语法类似于JavaScript,但也结合了C++和Python的特点。以下是一个简单的Solidity智能合约示例: ``` solidity pragma solidity ^0.8.0; contract SimpleStorage { uint256 storedData; function set(uint256 x) public { storedData = x; } function get() public view returns (uint256) { return storedData; } } ``` #### 4.2 编写第一个智能合约 现在让我们来编写一个简单的智能合约,实现一个简单的投票系统。我们将创建一个名为`Voting`的合约,其中可以添加候选人并对其进行投票。 ``` solidity pragma solidity ^0.8.0; contract Voting { mapping (bytes32 => uint8) public votesReceived; bytes32[] public candidateList; constructor(bytes32[] memory candidateNames) { candidateList = candidateNames; } function totalVotesFor(bytes32 candidate) public view returns (uint8) { require(validCandidate(candidate)); return votesReceived[candidate]; } function voteForCandidate(bytes32 candidate) public { require(validCandidate(candidate)); votesReceived[candidate] += 1; } function validCandidate(bytes32 candidate) public view returns (bool) { for(uint i = 0; i < candidateList.length; i++) { if (candidateList[i] == candidate) { return true; } } return false; } } ``` #### 4.3 部署和测试智能合约 首先,我们需要使用Solidity编译器将智能合约编译为字节码,并将其部署到Fabric网络中。接下来,我们可以使用Fabric提供的SDK或工具与智能合约进行交互,执行投票操作并查询投票结果。在实际应用中,还可以通过单元测试框架来测试智能合约的功能和性能。 通过以上示例,你已经学会了如何使用Solidity语言编写智能合约,并且了解了智能合约的部署和测试流程。在下一章节中,我们将继续学习如何构建Fabric应用,并将智能合约集成到我们的应用中。 # 5. 构建Fabric应用 在本章中,我们将学习如何构建基于Fabric框架的区块链应用。具体来说,我们将涵盖定义Fabric网络的组织结构、配置和启动Fabric网络、连接和交互与Fabric网络,以及执行交易和查询链上数据的步骤。 ### 5.1 定义Fabric网络的组织结构 在构建Fabric应用之前,我们首先需要定义Fabric网络的组织结构。Fabric网络由多个组织和通道组成。每个组织可以包含多个节点,而通道则用于在组织之间传递交易和数据。 在定义组织结构时,我们需要指定每个组织的身份证书和私钥,以及配置各个组织之间的关系。这些信息将被用于后续的网络配置和交互。 ### 5.2 配置和启动Fabric网络 一旦我们定义了Fabric网络的组织结构,接下来就可以进行网络的配置和启动。首先,我们需要创建一个配置文件,其中包含了Fabric网络的相关配置信息,如节点的IP地址、端口号、身份证书等。 然后,我们可以使用Fabric提供的命令行工具或API来启动Fabric网络。在启动过程中,Fabric会根据配置文件中的信息创建节点、通道和智能合约,以及建立节点之间的通信。 ### 5.3 连接和交互与Fabric网络 一旦Fabric网络成功启动,我们就可以连接到网络并与其交互了。我们可以使用Fabric提供的SDK或API来连接到网络,创建新的交易,发送交易请求,并接收和处理网络返回的结果。 在交互过程中,我们可以执行各种操作,如注册用户、发起交易、查询链上数据等。这些操作将被记录在区块链上,并可以被其他参与网络的节点所访问和验证。 ### 5.4 执行交易和查询链上数据 最后,我们可以执行交易和查询链上数据。通过使用Fabric提供的SDK或API,我们可以创建并发送交易请求,将交易记录写入区块链中。同时,我们也可以查询链上的数据,以获取特定交易的详细信息或获取当前状态。 在执行交易和查询链上数据时,我们需要提供相应的身份验证信息,以确保操作的合法性和安全性。同时,我们还可以根据区块链的不可篡改性和透明性来验证交易的真实性和完整性。 这样,我们就成功构建了一个基于Fabric框架的区块链应用。通过以上步骤,我们可以将应用部署到生产环境中,并与其他参与者共享和验证数据。同时,我们也可以通过管理和监控工具来确保网络的稳定运行和安全性。 # 6. 部署和管理Fabric应用 在本章中,我们将讨论如何将Fabric应用部署到生产环境并进行管理。 ### 6.1 部署Fabric应用到生产环境 要将Fabric应用部署到生产环境中,需要考虑以下几个步骤: #### 6.1.1 网络拓扑规划 在部署Fabric应用之前,需要进行网络拓扑规划。确定网络中的节点数量、组织结构以及通道和链码的配置。 #### 6.1.2 安装和配置节点 根据网络拓扑规划,需要在各个节点上安装并配置Fabric网络所需的软件包和依赖项。这包括安装Docker、Fabric二进制文件和相关的开发工具。 #### 6.1.3 生成证书和密钥 在生产环境中,需要生成用于身份验证的证书和密钥。这些证书和密钥将用于创建和管理组织、节点和用户的身份。 #### 6.1.4 创建通道和加入节点 在创建通道之前,需要确定通道的配置和策略。然后,将各个节点加入到通道中,使其能够参与到Fabric网络中去。 #### 6.1.5 安装和实例化链码 在部署Fabric应用时,需要在各个节点上安装链码并进行实例化。这样才能使得链码可以被调用和执行。 ### 6.2 管理和监控Fabric网络的运行 在部署Fabric应用后,需要进行网络的管理和监控。这包括以下几个方面: #### 6.2.1 网络状态监控 通过监控网络状态,可以实时了解网络的运行情况以及节点之间的通信情况。可以使用Fabric提供的工具或第三方工具来进行监控。 #### 6.2.2 交易查询和审计 可以通过查询链上数据来获取交易的历史记录和详细信息。这对于审计和追踪数据的完整性和一致性非常重要。 #### 6.2.3 链码升级和维护 在生产环境中,可能需要对链码进行升级或维护。需要确保升级过程不会中断网络的正常运行,并且能够保持数据的一致性。 ### 6.3 安全性和权限控制的考虑 在部署和管理Fabric应用时,需要重视安全性和权限控制。以下几个方面需要特别注意: #### 6.3.1 节点和用户的身份验证 需要采取措施确保只有授权的节点和用户才能参与到Fabric网络中。可以使用证书和密钥进行身份验证。 #### 6.3.2 数据加密和隐私保护 可以使用加密算法对敏感数据进行加密保护,以确保数据的安全性和隐私。 #### 6.3.3 访问控制和权限管理 需要定义和实施访问控制策略,以控制谁有权访问和执行链码中的函数。 通过合理的部署和管理,以及安全的考虑,可以使得Fabric应用在生产环境中稳定运行,并能保护数据的安全性和一致性。 在下一节中,我们将总结本指南的重点内容,并给出一些进一步学习的资源。 (完)
corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

李_涛

知名公司架构师
拥有多年在大型科技公司的工作经验,曾在多个大厂担任技术主管和架构师一职。擅长设计和开发高效稳定的后端系统,熟练掌握多种后端开发语言和框架,包括Java、Python、Spring、Django等。精通关系型数据库和NoSQL数据库的设计和优化,能够有效地处理海量数据和复杂查询。
专栏简介
《Fabric》专栏深入探讨了区块链技术中的Hyperledger Fabric框架及其应用。从入门指南、网络架构与组件、身份认证与访问控制、通道管理到智能合约开发、隐私保护技术及应用,再到供应链管理、金融领域的应用案例分析,该专栏涵盖了Fabric在不同领域的全面应用。此外,还包括智能合约数据模型与状态管理、链码生命周期管理、多机构联盟链的搭建与管理、智能合约与外部系统集成、以及与物联网的结合。无论是对于初学者还是经验丰富的开发人员来说,本专栏都提供了宝贵的指导和实用技巧,可以帮助读者全面了解并深入应用Fabric框架,构建高效安全的区块链应用。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

数据清洗的概率分布理解:数据背后的分布特性

![数据清洗的概率分布理解:数据背后的分布特性](https://media.springernature.com/lw1200/springer-static/image/art%3A10.1007%2Fs11222-022-10145-8/MediaObjects/11222_2022_10145_Figa_HTML.png) # 1. 数据清洗的概述和重要性 数据清洗是数据预处理的一个关键环节,它直接关系到数据分析和挖掘的准确性和有效性。在大数据时代,数据清洗的地位尤为重要,因为数据量巨大且复杂性高,清洗过程的优劣可以显著影响最终结果的质量。 ## 1.1 数据清洗的目的 数据清洗

从Python脚本到交互式图表:Matplotlib的应用案例,让数据生动起来

![从Python脚本到交互式图表:Matplotlib的应用案例,让数据生动起来](https://opengraph.githubassets.com/3df780276abd0723b8ce60509bdbf04eeaccffc16c072eb13b88329371362633/matplotlib/matplotlib) # 1. Matplotlib的安装与基础配置 在这一章中,我们将首先讨论如何安装Matplotlib,这是一个广泛使用的Python绘图库,它是数据可视化项目中的一个核心工具。我们将介绍适用于各种操作系统的安装方法,并确保读者可以无痛地开始使用Matplotlib

p值在机器学习中的角色:理论与实践的结合

![p值在机器学习中的角色:理论与实践的结合](https://itb.biologie.hu-berlin.de/~bharath/post/2019-09-13-should-p-values-after-model-selection-be-multiple-testing-corrected_files/figure-html/corrected pvalues-1.png) # 1. p值在统计假设检验中的作用 ## 1.1 统计假设检验简介 统计假设检验是数据分析中的核心概念之一,旨在通过观察数据来评估关于总体参数的假设是否成立。在假设检验中,p值扮演着决定性的角色。p值是指在原

正态分布与信号处理:噪声模型的正态分布应用解析

![正态分布](https://img-blog.csdnimg.cn/38b0b6e4230643f0bf3544e0608992ac.png) # 1. 正态分布的基础理论 正态分布,又称为高斯分布,是一种在自然界和社会科学中广泛存在的统计分布。其因数学表达形式简洁且具有重要的统计意义而广受关注。本章节我们将从以下几个方面对正态分布的基础理论进行探讨。 ## 正态分布的数学定义 正态分布可以用参数均值(μ)和标准差(σ)完全描述,其概率密度函数(PDF)表达式为: ```math f(x|\mu,\sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} e

NumPy在金融数据分析中的应用:风险模型与预测技术的6大秘籍

![NumPy在金融数据分析中的应用:风险模型与预测技术的6大秘籍](https://d31yv7tlobjzhn.cloudfront.net/imagenes/990/large_planilla-de-excel-de-calculo-de-valor-en-riesgo-simulacion-montecarlo.png) # 1. NumPy基础与金融数据处理 金融数据处理是金融分析的核心,而NumPy作为一个强大的科学计算库,在金融数据处理中扮演着不可或缺的角色。本章首先介绍NumPy的基础知识,然后探讨其在金融数据处理中的应用。 ## 1.1 NumPy基础 NumPy(N

【复杂数据的置信区间工具】:计算与解读的实用技巧

# 1. 置信区间的概念和意义 置信区间是统计学中一个核心概念,它代表着在一定置信水平下,参数可能存在的区间范围。它是估计总体参数的一种方式,通过样本来推断总体,从而允许在统计推断中存在一定的不确定性。理解置信区间的概念和意义,可以帮助我们更好地进行数据解释、预测和决策,从而在科研、市场调研、实验分析等多个领域发挥作用。在本章中,我们将深入探讨置信区间的定义、其在现实世界中的重要性以及如何合理地解释置信区间。我们将逐步揭开这个统计学概念的神秘面纱,为后续章节中具体计算方法和实际应用打下坚实的理论基础。 # 2. 置信区间的计算方法 ## 2.1 置信区间的理论基础 ### 2.1.1

【分类问题解决】:特征选择与数据不平衡的斗争策略

# 1. 特征选择与数据不平衡问题概述 在机器学习和数据分析领域,特征选择与数据不平衡问题的处理是实现高性能模型的关键步骤。特征选择有助于提高模型的泛化能力,同时减少过拟合的风险。而数据不平衡问题,尤其是在二分类问题中,通常会导致模型偏向于多数类,从而忽视少数类,进而影响模型的准确性和公平性。 ## 1.1 特征选择的重要性 特征选择是数据预处理的重要环节,它涉及从原始数据集中选择最有助于模型预测任务的特征子集。良好的特征选择可以减少计算复杂度,提升模型训练和预测的速度,同时有助于提升模型的准确率。通过剔除冗余和无关的特征,特征选择有助于简化模型,使其更加可解释。 ## 1.2 数据不

【线性回归时间序列预测】:掌握步骤与技巧,预测未来不是梦

# 1. 线性回归时间序列预测概述 ## 1.1 预测方法简介 线性回归作为统计学中的一种基础而强大的工具,被广泛应用于时间序列预测。它通过分析变量之间的关系来预测未来的数据点。时间序列预测是指利用历史时间点上的数据来预测未来某个时间点上的数据。 ## 1.2 时间序列预测的重要性 在金融分析、库存管理、经济预测等领域,时间序列预测的准确性对于制定战略和决策具有重要意义。线性回归方法因其简单性和解释性,成为这一领域中一个不可或缺的工具。 ## 1.3 线性回归模型的适用场景 尽管线性回归在处理非线性关系时存在局限,但在许多情况下,线性模型可以提供足够的准确度,并且计算效率高。本章将介绍线

【品牌化的可视化效果】:Seaborn样式管理的艺术

![【品牌化的可视化效果】:Seaborn样式管理的艺术](https://aitools.io.vn/wp-content/uploads/2024/01/banner_seaborn.jpg) # 1. Seaborn概述与数据可视化基础 ## 1.1 Seaborn的诞生与重要性 Seaborn是一个基于Python的统计绘图库,它提供了一个高级接口来绘制吸引人的和信息丰富的统计图形。与Matplotlib等绘图库相比,Seaborn在很多方面提供了更为简洁的API,尤其是在绘制具有多个变量的图表时,通过引入额外的主题和调色板功能,大大简化了绘图的过程。Seaborn在数据科学领域得

大样本理论在假设检验中的应用:中心极限定理的力量与实践

![大样本理论在假设检验中的应用:中心极限定理的力量与实践](https://images.saymedia-content.com/.image/t_share/MTc0NjQ2Mjc1Mjg5OTE2Nzk0/what-is-percentile-rank-how-is-percentile-different-from-percentage.jpg) # 1. 中心极限定理的理论基础 ## 1.1 概率论的开篇 概率论是数学的一个分支,它研究随机事件及其发生的可能性。中心极限定理是概率论中最重要的定理之一,它描述了在一定条件下,大量独立随机变量之和(或平均值)的分布趋向于正态分布的性