EOS大神,C++写的高发并行区块链

2024-02-02 13:08
文章标签 c++ 区块 并行 大神 eos 高发

本文主要是介绍EOS大神,C++写的高发并行区块链,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EOS大神,C++写的高发并行区块链



EOS 团队于 2017 年 月 28 日推出了单机测试版,基于此单机版开发者可以 完成用户注册、转账等简单功能。OracleChain 团队在第一时间对代码进行了编译 和测试,以下将详细介绍如何让 EOS 在自己的本地跑起来。OracleChain 团队使 用 Mac 系统进行开发,并使用 Homebrew 进行软件管理。

该指南将从环境准备、获取 EOS 代码、编译 EOS 代码和运行 EOS 四个方面 对 EOS的开发进行讲解,帮助开发者进入 EOS 世界。

EOS 文档:https://eosio.github.io/eos/ EOS 代码:https://github.com/EOSIO/eos


第一步:环境准备

EOS 是基于 C++ 14 进行开发并使用 CMake 进行编译管理,据 git 上的信息, EOS开发者使用 clang 4.0.0 和 CMake 3.8.0 进行开发编译。

EOS 使用 WebAssembly 对编译和运行智能合约,因此需要使用 WASM 编译 器。

除此之外 EOS 还依赖:Boost 1.64OpenSSL, LLVM 4.0 和 secp256k1-zkp 


基本环境安装
Mac 系统下需先安装 xcode,然后运行:

brew install automake autoconf libtool cmake。 Boost 安装

brew install boost

OpenSSL 安装 brew install openssl

在 Mac 系统已经移除了 openssl,需要手动配置环境变量: 在~/.bash_profile 内添加:

export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2n
export OPENSSL_INCLUDE_DIR=/usr/local/Cellar/openssl/1.0.2l/includes

其中 1.0.2n 为 openssl 版本号。 随后更新配置文件:

source ~/.bash_profile

安装 secp256k1-zkp

  1. git clone https://github.com/cryptonomex/secp256k1-zkp.git

  2. cd secp256k1-zkp

  3. ./autogen.sh

  4. ./configure

  5. make

  6. sudo make install

安装 LLVM

brew install llvm 随后添加环境变量,在~/.bash_profile 内添加:


编译 WASM 编译环境

  1. mkdir ~/wasm-compiler

  2. cd ~/wasm-compiler

  3. git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-

    mirror/llvm.git

  4. cd llvm/tools

  5. git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm- mirror/clang.git

  6. cd ..

  7. mkdir build

  8. cd build

  9. cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=..

    -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../

  10. make -j4 install

  至此,准备工作已经完成。 


第二步,获取 EOS 代码

EOS 代码使用了三个子模块,包括两个 EOS 自己维护的插件管理模块 AppBase 和区块链结构模块 ChainBase,以及 WASM 模块。

开发者可以通过 git clone https://github.com/eosio/eos --recursive 获取全部代 码,或者在获取 EOS 代码后通过 git submodule update --init –recursive 补全子模 块。 

第三步,编译 EOS 代码

建议使用前面准备的 WASM 编译器对 EOS 进行完整编译。

1. cd eos

  1. mkdir build && cd build

  2. export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config

  3. cmake ..

  4. cd ..

  5. make -j4

其中~/wasm-compiler/llvm/bin/llvm-config 为之前编译的 WASM 编译器地址。 开发者可以将 WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config 添加 到.bash_profile 中去。

至此,eos 已经编译完成。 

第四步,运行 EOS

在 eos/programs 文件加下,eosd 是单机版的 EOS 节点,会模拟多个账号轮 流出块。eosc 通过 REST 访问 eosd,并提供命令行工具。

运行 eosd

首次运行 eosd 下的 eosd 将会报错,并会在 eosd 文件夹下生成 data-dir 文 件夹,此时需要对文件夹下的 config.ini 文件进行修改然后再重新运行 eosd

注释掉原文中的 enable-stale-production = false。 在 config.ini 文件末尾添加

# Load the testnet genesis state, which creates some initial block producers with the default key

genesis-json = /path/to/eos/genesis.json

# Enable production on a stale chain, since a single-node test chain is pretty much always stale

enable-stale-production = true
# Enable block production with the testnet producers producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd 

producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu
# Load the block producer plugin, so we can produce blocks plugin = eos::producer_plugin

plugin = eos::chain_api_plugin
其中/path/to/eos/genesis.json 是 genesis.json 文件的全地址,在 eos 文件夹

下。
随后再次运行 
eosd,将启动 EOS。 


这篇关于EOS大神,C++写的高发并行区块链的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670797

相关文章

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决