400-700-1307

【区块链技术基础教程】EOS源码分析(7)目录结构

2019-01-29 16:37
# EOS 源码分析

区块链的概念首次在2008年末由中本聪(Satoshi Nakamoto)在比特币论文《Bitcoin: A Peer-to-Peer Eletronic Cash Sytem》中提出,论文中区块链技术是构建比特币数据结构与交易信息加密传输的基础技术,该技术实现了比特币的挖矿与交易。

随着电子货币的概念被更多的人所接受,其背后的区块链技术也进一步被更多的技术人员和商业人员充分发掘,他们认为区块链技术在很多领域中都将有广泛的应用,这种去中心化的可信网络将重构现有的商业逻辑。

但是完整的开发和部署一套去中心化的区块链网络并不是一件容易的事情,这需要投入巨大的研发精力和经费。于是有很多团队开始尝试开发一套底层区块链系统,从而能够方便更多的应用开发者在其基础上构建分布式应用。大家比较熟悉的以太坊正是这样一套区块链公链系统。但这些系统也有自身的问题,例如性能太低,确认延迟太长,需要用户付费等。

为了能够解决这些问题,Block.One 公司启动了EOS项目,这是一套基于区块链底层的公链系统,简单的说就是一套去中心化的操作系统,当EOS完成系统目标之后,任何团队都可以在EOS 上以比较快的速度开发出所需要的Dapp(基于区块链的分布式应用),这些应用可以让普通人无需任何手续费就可以方便的使用,而EOS的高性能(100w+tps,可以在一秒之内进行100W次打包记账)也可以承载数量众多的Dapp应用,相信今后在此系统上将会诞生很多独角兽级别的分布式应用。

为了能够在此系统上建构高效的分布式应用,对于EOS系统的深入理解和分析必不可少,而源码的阅读是深入理解EOS系统最有效的方式,本书就是从源码入手来分析EOS背后的概念和机制,从而让大家对于区块链技术有一个更加深入的了解。书中主要会涉及以下内容:

1. 对白皮书的解读。EOS白皮书有中文版,但很多地方的翻译非常晦涩,完全不通顺,我根据自己对项目的理解进行了重新解读
2. EOS 中涉及到的一些区块链概念,在文中也给出了详细介绍
3. 对于某些概念的现实意义,给出了自己的理解。从源码级别理解项目固然重要,但更重要的是对区块链本身的认知升级,不断的探索这些概念在现实世界中的使用场景,这才能更大程度的推进区块链的发展。
4. 源码阅读;源码之下,了无密码。做技术的人往往更喜欢从源码级了解一个项目,这使得很多概念能够对应到底层的算法,对于理解这些概念将会很有帮助。理解了源码层,才能够说真正理解了一个项目,你不仅知道他能干什么,更能知道他为什么能够这么用,并且能够深刻的理解它下一步的演进方向。


目前EOS还处于开发阶段,源代码还在不断的迭代中,但整体流程和框架已经基本成型,目前已经发布到Dawn3.0 版本了,
eos主目录下有以下文件夹:


我们挨个来看一下:

第一部分:CMakeModules主要是cmake编译所需要使用的一些配置信息。
cotire是加快编译速度的cmake文件。

doxygen可以将代码中的一些注释生成相关文档。

gperftools包含了性能分析相关的配置。

findWasm检测当前机器是否可以生成wasm32。

insatall提供安装的相关配置信息。

上文咱们说过eos的编译需要wasm的支持,因此wasm.cmake文件提供wasm相关的配置信息。

第二部分:Contracts中包含有智能合约的相关内容:


asserter中定义了assert的相关结构体,并完成对智能合约事件的分发。

bancor即班科,定义了bancor结构体,包含有凯恩斯国际货币单位的相关内容,主要是货币单位之间的转换。

currency定义了currency结构体,同样为货币的相关内容。

dice中实现了一个掷骰子的小游戏。

eosio.system包含有eosio系统的相关内容,这个接下来会做相关专题介绍。

eosiolib中包含有eos运行所依赖的库的头文件。

exchange中包含有交易相关结构体的定义。

identity中包含有身份的相关定义,在eos中身份和账户是两个相互分离的概念,身份和账户的映射需要服从一定的共识。

infinite从字面意义上理解是无限,代码中实现了一个不停的去打印的函数。

libc++中主要是c++所以来的库。

musl是linux操作系统下的一个标准库。

noop实现一个空的智能合约。

proxy实现代理的相关内容。

simpleDB 包含了数据库相关内容。

skeleton看不出有什么内容。

social主要是方便用户创建属于自己的货币同时可以让其进行投票等举动(马上要开始的21节点竞争就是通过投票来进行的)。

storage方便用户去修改账户的名字。

第三部分:一些文档说明

docker方便用户在Docker上运行eos。不多做介绍。

docs中是一些文档。

externals里面是一些依赖的外部文件。

第四部分:Libraries是eos依赖的一些库,其中有:

abi_generator用于生成abi文件。

appbase为一系列的插件编译提供了一个框架,他可以确保插件正常配置、初始化、启动、关闭这一个流程。

chain这里面包含有eos作为区块链的核心内容。

chainbase是为了满足区块链应用设计的一个数据库,但是也使用于任意需要一个鲁棒性较高的交易数据库。

egenesis主要是测试P2P网络用的。

utilitiles主要是一些通用的标准函数。

第五部分:eos编译运行所需要的插件:

account_history_api_plugin 账户历史记录的接口插件。

account_history_plugin 账户历史记录插件。

chain_api_plugin 链的接口插件。

chain_plugin 链的插件。

faucet_testnet_plugin水龙头测试网络插件。

http_plugin http插件。

mongo_db_plugin mongoDB插件。

net_api_plugin 网络接口插件。

net_plugin 网络插件。

wallet_api_plugin 钱包接口插件。

wallet_plugin 钱包插件。

第六部分:build文件夹下的内容

debug_node供开发者运行一些有趣的测试。比如当下一个硬分叉到来之前我生产了足够多的区块时会发生什么。

eosio-abigen用于生成abi文件。

eosd是eos的核心,它可以根据用户的配置启用插件来运行一个节点。现在可用来产生区块,封装接口,本地开发等功能。

eosc其实是提供了命令行操作的eosd。要使用eosc首先要在初始化eosd的时候配置好ip和端口,同时加载eosio::chain_api_plugin。

eos-walletd eos的钱包核心线程,加载一些核心控件如http接口和PRC接口。

launcher launcher简化了eosd节点跨局域网或者跨更宽泛的网络的分布。

开班信息

当前校区

北京校区
  • 北京校区
  • 上海校区
  • 广州校区
  • 沈阳校区
  • 杭州校区
  • 南京校区
  • 郑州校区
  • 成都校区
  • 深圳校区
  • 西安校区
  • 苏州校区
  • 深圳沙井
  • 深圳观澜
  • 深圳龙岗
  • 武汉校区
  • 西宁校区
  • 石家庄校区
  • 湖北咸宁
  • 广东惠州
  • 广东佛山

                    Copyright © 2007-2019 IT兄弟连教育 版权所有 京ICP备11018177号  京公网安备 11010802026987号