最为领先的内容公链,COS公链的代码全部开源免费。开源地址:https://github.com/coschain/


本文从源代码编译开始,带领大家一步步搭建一个可运行的环境,直到可以正常运行COS公链并出块。

考虑到可能出现的编译错误,我们也提供了一个能正常运行本地链的 docker。不过,对于那些想要深入理解本地链的编译和运行原理的开发者来说,我们强烈建议从源码开始编译哦~

第一步:获取源代码

github 上获取 master 分支的代码

git clone [email protected]:coschain/contentos-go.git

第二步: 编译

Go 的版本

内容公链 Contentos 的主要开发语言是 golang,并且使用了 golang 官方提供的 go modules 作为管理工具。所以,必须使用 Go 1.11 以上支持go modules功能的版本。由于 Go 1.12 对 modules 机制做出进一步的更新,推荐使用 Go 1.12 以后的版本(目前最标准的版本是 Go 1.11.4)。

编译 cosdwallet

contentos-go 可以编译出的可执行文件均在 cmd 文件夹里,最重要的是 cosdwallet-cli 。前者是 contentos 主链,后者是与主链交互的命令行工具。

cd build
go build ../cmd/cosd
go build ../cmd/wallet-cli

当然,你也可以通过 go build -o 指定名字和位置。

第三步: 运行

初始化

contentos 需要初始化 ~/.coschain 文件夹用于存放配置文件和数据,以下命令将会创建默认文件夹 ~/.coschain/cosd

cosd init

也可以指定文件夹名字,以下命令将会创建文件夹 ~/.coschain/testnode

cosd init -n testnode

指定配置文件名字的意义在于,可以通过这种方式实现本地同时运行多个节点。它们会读取不同的配置文件,并创建互相独立的 db 数据。

启动

启动 cosd 并完成正常出块的流程较为繁琐,如果只是需要启动并快速继续后面的操作,我们提供了一键启动的脚本,以便完成多个节点启动并且正常出块。当然,如果想要了解整个启动流程,建议跳过“一键启动”的方式。

单节点

初始化完成之后,通过执行 start 命令启动 cosd

cosd start

上述命令会使用 ~/.coschain/cosd 下的配置文件,并写入数据到该文件夹下。

同样,也可以指定配置文件夹。

cosd start -n testnode

会使用 ~/.coschain/testnode 下的配置文件,并且写入数据到这个文件夹下。

执行后,cosd 节点就可以正常启动了。

多节点

虽然我们可以手动创建多个配置文件并启动,但是这个过程比较繁琐。对于此,我们提供了 multinodetester 用于批量创建和启动。

multinodetester 存储在 cmd 文件下,需要编译。

cd build
go build ../cmd/multinodetester

批量初始化

multinodetester init 4 可以初始化 4 个配置文件夹。该命令可以在 ~/.coschain 下找到,分别为 testcosd_0testcosd_1testcosd_2testcosd_3, 对应 4 个节点。

批量启动

multinodetester start path/to/cosd 4

path/to/cosd 是 cosd 可执行文件的路线,如果 mltinodetester 和 cosd 都在 build 文件夹下,那么路径就是 ./cosd

通过以上步骤,本地就会有 4 个节点运行啦。

手动选择第一轮出块节点

即使有多个节点在本地运行,但如果没有选择出块节点,默认的只有 testcosd_0 这个特殊节点( 也就是initminer )出块,其他节点都处于同步模式。所以,我们需要手动选择出块节点。

一般情况下,节点需要通过 wallet 去注册节点,节点投票之后才能成为出块节点,这个过程同样繁琐。在本地环境下,简化了这个流程,在 wallet 下提供了同名 multinodetester 的方法来批量注册和选举出块节点。

如果严格按照上文的流程,那么现在本地应该有 wallet-cli 这个可执行文件。

执行wallet-cli文件,进入交互界面。输入 multinodetester 4 来批量注册选举出块节点。 也可以通过非交互模式完成,执行:

wallet-cli multinodetester 4

经过以上操作步骤,contentos 主链就已经成功在本地运行起来了。

欢迎加入COS技术社群,领取bounty奖励!

干货|0基础,开启COS公链本地化运行-LMLPHP

10-11 18:33