EOSIO源码分析 - EOSIO简介

这篇具有很好参考价值的文章主要介绍了EOSIO源码分析 - EOSIO简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是EOSIO

EOS,可以理解为Enterprise Operation System,即为商用分布式应用设计的一款区块链操作系统。EOS是引入的一种新的区块链架构,旨在实现分布式应用的性能扩展。它并不是像比特币和以太坊那样的货币,而是基于EOS软件项目之上发布的代币,被称为区块链3.0。
EOS是提供智能合约计算的可编程区块链,他是由位于美国的一家名为block.one的公司开发,全程采用C++语言来实现,智能合约采用剪辑过的C++语言来实现,相比于以太坊,拥有更高的TPS,EOS没有手续费,它是按照用户所消耗的资源来间接收费的。

获取EOSIO

二进制安装
  • MacOS:
brew tap eosio/eosio
brew install eosio
  • Ubuntu:
wget https://github.com/eosio/eos/releases/download/v2.1.0/eosio_2.1.0-1-ubuntu-20.04_amd64.deb
sudo apt install ./eosio_2.1.0-1-ubuntu-20.04_amd64.deb
  • CentOS:
wget https://github.com/eosio/eos/releases/download/v2.1.0/eosio-2.1.0-1.el8.x86_64.rpm
sudo yum install ./eosio-2.1.0-1.el8.x86_64.rpm

EOSIO代码结构

获取源代码

git clone https://github.com/EOSIO/eos.git --recursive
–recursive参数一定要加上,否则取到的代码只是最基本的框架代码,EOSIO引用的第三方代码取不到

源代码结构

EOSIO的整体代码结构比较简单,整体采用插件模式来组织代码(以V2.0.13为例),核心结构如下

EOSIO 
   |-----CMakeModules 相关第三库的自动编译脚本,如最重要的VM
   |-----libraries
        |-----appbase: 插件框架库,负责整个程序的,特别是nodeos程序的初始化,插件的初始化及启动
        |-----builtins: 虚拟机内建对象,特别是对于浮点结构的支持
        |-----chain: 整个链最核心的代码,负责链初始化,交易鉴权,交易执行,块打包等核心任务
        |-----fc: 基础库代码,完成结构打包,json反射,压缩,加密解密等最基础任务
        |-----chainbase: 高效eosio设计的内存映射数据库,实现对数据的快速访问与修改,最重要是实现了和eosio对应的数据回滚机制
        |-----eos-vm: 支持合约运行的WASM虚拟机
        |-----softfloat: 提供对于浮点运算的支持
        |-----wabt: 工具软件包,拓展wasm应用
        |-----yubihsm: 一种安全库,提供对钱包的支持
        |-----CMakeLists.txt 编译清单文件
   |-----plugins
        |-----chain_plugin: 核心库,实现链的初始化,控制与访问等业务
        |-----net_plugin: 核心库,实现P2P,完成交易广播,块分布式存储等业务
        |-----producer_plugin: 核心库,完成块生产,共识,交易执行调度等核心业务
        |-----chain_api_plugin: 提供对chain_plugin的访问,如发送交易,查询用户等
        |-----net_api_plugin: 提供对net_plugin的访问,如链接节点,获取链接状态等
        |-----producer_api_plugin: 提供对producer_plugin的访问,如控制生产,设置给白名单等
        |-----http_plugin: 封装http基础服务功能
        |-----wallet_plugin: 实现钱包相关功能,如钱包创建,公私钥存储等
        |-----wallet_api_plugin: 实现对wallet_plugin的访问,如最核心的交易签名
        |-----CMakeLists.txt 编译清单文件
   |-----programs
        |-----cleos: 客户端命令行程序,使用此程序可以实现对链的访问,如发送交易,查询账号,生产投票,链接其他节点
        |-----keosd: 钱包服务程序,钱包服务可以启动多个,可以根据业务需求灵活部署,也可以自己开发钱包服务
        |-----nodeos: 节点服务程序,也是最核心的程序,负责区块同步,交易生产等
        |-----CMakeLists.txt 编译清单文件
   |-----scripts
        |-----eosio_build.sh: 编译shell脚本,根据系统自己编译出目标程序
        |-----generate_package.sh: 可以将编译出来的二进制程序,按照各自系统打包成如deb,rpm等安装包
   |--CMakeLists.txt 编译清单文件

源码编译

./scripts/eosio_build.sh

运行此脚本时,系统会自动安装需要的第三方库,笔者在Ubunut18.04,20.04,CentOS7上测试过,如果想了解编译过程,可以详细查看scripts下的相关脚本
注意如果要编译Debug版本,系统资源最好大一点,特别是编译出来的nodeos程序大小达到1G以上

EOSIO框架

eosio,区块链,开源软件,去中心化

从框架图中我们可以看到:

  • 对于链来说,只有一个nodeos程序,nodeos主动接入主网
  • 用户通过cleos命令行来操作钱包keosd和nodeos,这两个程序都可以自己开发
  • 钱包是用户的私产,和链没有互通关系,需要谨慎保存,防止丢失,用户可以创建多个钱包

启动与部署EOSIO

keosd 启动
./keosd \
    --http-server-address=0.0.0.0:8900 \
    --http-validate-host=false >>  ./logs/keosd.log 2>&1 &

钱包的数据文件默认存储在/root/eos-wallet目录下,每个钱包都有一个单独的钱包文件,默认为 default.wallet

nodeos 启动
./nodeos -e -p eosio \
    --data-dir ./data/nodeos \
    --signature-provider=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 \
    --p2p-listen-endpoint=0.0.0.0:9878 \
    --plugin eosio::producer_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin \
    --http-server-address=0.0.0.0:8888 \
    --http-validate-host=false
    --replay-blockchain >>  ./logs/nodeos.log 2>&1 &

对于创始节点的启动,生产名称一定要配制成eosio,否则会不生产。EOSIO默认0.5s一个块,要在某个节点发送交易,需要配置插件chain_api_plugin, 需要特别注意的是配置mongo_dn_plugin插件,nodeos程序需要开启支持mongo开关,然后重新编译程序。

EOSIO链部署

关于EOSIO的部署,因为整个EOSIO提供的是智能合约运行的基础架构机制,所以要完成某个具体的业务逻辑,是需要部署对应的合约才能完成。

EOSIO中最重要的两个合约是eosio.system,eosio.token两个合约,前者提供了生产投票相关的逻辑服务,后者则提供了代币服务。

eosio合约的编译,需要eosio.cdt工具,将开发的合约文件编译成wasm程序,同时生成ABI文件,生成合约文件后,才能完成部署。

下面给出一个基本的合约部署流程文章来源地址https://www.toymoban.com/news/detail-788806.html

wallet_url=0.0.0.0:8900
node_url=0.0.0.0:8888
# 创建钱包
WALLET_PASSWD=`./cleos --wallet-url $wallet_url -u $node_url wallet create --to-console`
export passeord=`echo $WALLET_PASSWD | awk -F"\"" '{print $2}'`
echo "$passeord" > key.txt
echo "get password : $passeord"
# 导入创世公私钥
./cleos --wallet-url $wallet_url -u $node_url wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
# 导入私钥,创建用户
ONE_ACCOUNT=eosio.token

echo "---- imports private ($ONE_ACCOUNT) keys ----"
key_OWNER=`./cleos  --wallet-url $wallet_url -u $node_url create key --to-console`
key_ACTIVE=`./cleos  --wallet-url $wallet_url -u $node_url create key --to-console`
a_owner=`echo $key_OWNER | awk -F" " '{print $3}'`
./cleos --wallet-url $wallet_url -u $node_url wallet import --private-key $a_owner
a_ative=`echo $key_ACTIVE | awk -F" " '{print $3}'`
./cleos --wallet-url $wallet_url -u $node_url wallet import --private-key $a_ative

a_private_owner=$a_owner
a_private_ative=$a_ative

a_owner=`echo $key_OWNER | awk -F" " '{print $6}'`
a_ative=`echo $key_ACTIVE | awk -F" " '{print $6}'`
./cleos --wallet-url $wallet_url -u $node_url create account eosio $ONE_ACCOUNT $a_owner $a_ative
# 部署合约, 发送交易
./cleos --wallet-url $wallet_url -u $node_url set contract eosio.token ./contracts/eosio.token/ -p eosio.token@active

./cleos --wallet-url $wallet_url -u $node_url push action eosio.token create '[ "eosio", "10000000000.0000 '$bioscurrencysymbol'" ]' -p eosio.token
./cleos --wallet-url $wallet_url -u $node_url push action eosio.token issue '[ "eosio", "1000000000.0000 '$bioscurrencysymbol'", "memo" ]' -p eosio

到了这里,关于EOSIO源码分析 - EOSIO简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 去中心化社交媒体:分析 Facebook 在区块链平台上的角色

    在当今数字时代,社交媒体已经成为人们日常生活中不可或缺的一部分。然而,随着人们对数据隐私和信息控制的关注不断增加,传统的中心化社交媒体平台也面临着越来越多的质疑和挑战。为了应对这些挑战,越来越多的人开始探索去中心化社交媒体平台,其中包括运用区

    2024年04月16日
    浏览(34)
  • Wikijs简介-强大&可扩展的开源维基软件

    使用 wiki.js 美丽直观的界面,让文档成为写作的乐趣! 优点 🔧 随时随地安装 几乎适用于任何平台,并与PostgreSQL、MySQL、MariaDB、MS SQL Server 或 SQLite 兼容! ⚙️ 管理强大 使用广泛而直观的管理区域管理维基的所有方面。 🚀 性能 Wiki.js运行在快速的Node.js引擎上,它是基于性

    2024年02月10日
    浏览(67)
  • 了解区块链---一个去中心化技术

    1.假如你是从事区块链的高端技术人员,我从来没有接触过区块链,请你为我讲解下他的概率、原理、应用? 概念: 区块链是一种 去中心化 的 分布式账本技术 ,它是由一系列 区块 组成的 链式结构 ,每个 区块包含一些交易数据 ,并且通过 密码学算法 与之前的区块链接在

    2024年02月16日
    浏览(45)
  • 区块链开源底层软件平台——长安链一键上链体验过程

    长安链作为区块链开源底层软件平台,包涵区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施,同时也是国内首个自主可控区块链软硬件技术体系,最近腾讯云区块链,区块链

    2024年02月17日
    浏览(29)
  • 这就是区块链开源底层软件平台——长安链ChainMaker

    本文已参与「开源摘星计划」,欢迎正在阅读的你加入。 活动链接:https://github.com/weopenprojects/WeOpen-Star 一、介绍一下长安链 它是国内首个自主可控区块链软硬件一体技术体系,拥有自主可控的底层平台、完整便捷的配套工具、标准化下的开放生态、灵活高效的装配模式以及

    2023年04月08日
    浏览(24)
  • 盘点10大热门区块链开源软件,你知道几个?

    越来越多的企业将开源软件作为其构建基础信息系统的重要选择,“ 低成本、安全性高、灵活自由、高可用性、协同性好 ……”一连串的技术优势,让越来越多的企业无法拒绝。 在区块链领域,又有哪些热门开源软件呢?本期,将为大家盘点10大热门区块链开源软件,你熟

    2023年04月11日
    浏览(35)
  • 区块链去中心化有什么优势?

    说到区块链,我们经常听到一个词“去中心化”,这也是区块链最重要的一个特性。那么什么是去中心化,和中心化相比,它又有哪些优势呢? 要想知道什么是去中心化,我们先来看看什么是中心化。简单来说,在一个体系中,一个节点要和另外的节点产生关联,就要通过特

    2024年02月03日
    浏览(37)
  • 什么是“中心化”和“去中心化”?区块链是怎么实现去中心化的?

    图1 三类网络拓扑结构 所谓“中心化”和“去中心化”,最早是用来刻画网络拓扑结构的术语。1964年,美国兰德公司发布了一份关于分布式通信的报告,提出了三种网络结构(如图1)。其中,(a)类结构被称为“中心化星型网络”,(b)类结构被称为“去中心化网络”,(

    2024年02月11日
    浏览(39)
  • 区块链发展第三阶段:去中心化金融

    2017年12月17日,以太坊上第一个完全去中心化的数字稳定币——Dai正式发布,它是去中心化金融(DeFi)的基石。DeFi的最终目的是构建一个透明的金融系统,这个金融系统向任何可以连接互联网的人开放服务,而且无须获得任何组织的许可,不用依赖于第三方机构即可满足个人

    2024年01月16日
    浏览(51)
  • Blockchain与去中心化金融系统的区块链应用

    作者:禅与计算机程序设计艺术 在《A股投资的“冰与火”效应——互联网大佬们的“冷门生意”》中,我们提到在2017年底之前,市场对私募股权基金、期货公司、贵金属交易所等市场的参与率并不高。但到了2018年初,随着各类投资平台的涌现、热钱的涌入,资本市场开始抢

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包