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++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.