【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点

news/2023/12/9 4:59:56 标签: 操作系统, c/c++, golang

2019.2.14 情人节,Filecoin项目开放了核心源码仓库go-filecoin,并更新了 filecoin-project organization下的诸多核心成果,这意味着,Filecoin已然度过了最困难的难点攻关期,进入到了全民公测阶段

本系列文章将协助大家对源码仓库进行全解析,帮助大家系统地学习和了解Filecoin这个项目,发现新的机遇和商机,小编将在这段时间密切关注Filecoin动态,和大家一起度过Filecoin全民公测阶段

章节目录

  • 前言
  • Filecoin里程碑
  • 第一章:搭建Filecoin测试节点
  • 第二章:如何创建钱包,获取FIL Mock代币
  • 第三章:存储提供方(矿工)的配置操作
  • 第四章:存储需求方的配置操作
  • 第五章:如何让自己的节点加入测试网络
  • 第六章:如何组建多节点矿工集群('矿池')
  • 第七章:如何参与复制证明游戏测试
  • 第八章:Filecoin Organization介绍
  • More

Filecoin 里程碑

(万事开头难,一起追溯和回顾一下Filecoin的革命历程)

  • 2015年7月15日,Filecoin发布了第一版白皮书:

《Filecoin: A Cryptocurrency Operated File Storage Network》

  • 2016年,Juan Benet首次对外发布Filecoin主题演讲,向大众宣告:IPFS准备添加一个名为Filecoin,基于区块链的货币层,以激励IPFS网络上的数据存储。
  • 2017年7月19号,Filecoin发布了第二版白皮书:《Filecoin: A Decentralized Storage Network》。
  • 2017年8月-9月,Filecoin发布了SAFT协议,开始在Coinlist上发起众筹,吸引来自50个国家的2100+投资人参与,成功募集2.57亿美金,并承诺于2022年之前完成此项目。
  • 2018年8月,Filecoin在Lab Day技术日,发布了Demo和测试网络模拟器演示,并向大众开放Github之上的filecoin-project organization。
  • 2019年2月14日,filecoin-project organization开源了核心源码库:go-filecoin,开启全民公测阶段
  • 未来,更多期待...

第一章 搭建Filecoin测试节点

本章我们将一步一步,尝试在自己的macOS和Linux服务器上搭建Filecoin测试节点,小编的实战操作系统环境如下:

Darwin daijialedeMBP.lan 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64 x86_64

1.1 准备环境依赖

在安装和配置go-filecoin的测试节点之前,需要做的准备工作比较繁多,相对复杂,因为小编机器采用的是macOS,将使用homebrew包管理器来安装语言环境。

1.1.1 golang安装

为啥安装就不解释了...


# 需要安装大于v1.11.2版本的golang

brew install go

go version 

go1.11.2 darwin/amd64

设置GOPATH,由于小编采用的是zsh,而非macOS自带的bash,所以环境变量设置在.zshrc中:


vim ~/.zshrc

编辑.zshrc,添加如下图所示内容:

记得重启终端,新的环境变量GOPATH才会生效

1.1.2 rust安装

Filecoin的复制证明工程实现,基本都是使用rust编写的,为此,我们需要安装rust环境:


# 需要安装大于v1.31.0版本的rust/Cargo

brew install rustc

rustc -V
rustc 1.32.0

cargo -V
cargo 1.32.0

1.1.3 pkg-config安装

处理编译go-filecoin产生的linker flags

brew install pkg-config

1.2 安装配置go-filecoin

这里,将介绍两种release安装包的获得方式,一种是通过源码进行自编译,另一种是下载官方发布的release安装包,两种方式各有利弊,小编都实测了一下。

1.2.1 自编译release安装包

可以重构go-filecoin相关源码,定制自己专属的go-filecoin binary release包,方便大伙们来炫技、PR、以及装B。

  • 好处:可自定义的源码编译环节。
  • 坏处:编译准备环节比较复杂,需要较强的Debug和运维能力,同时编译耗时长,对机器CPU性能要求更高。

下载go-filecoin源码仓库

mkdir -p ${GOPATH}/src/github.com/filecoin-project

git clone git@github.com:filecoin-project/go-filecoin.git ${GOPATH}/src/github.com/filecoin-project/go-filecoin

熟悉go语言的朋友肯定不会陌生,源码路径习惯统一维护在${GOPATH}的src下,协议实验室也是提倡大家遵守这样的开发规范。

检查并更新gcc/Clang版本

go-filecoin在构建时需要引用到cgo-compatible rust-proofs library 证明依赖,因此需要c编译器支持,比较常见的c编译器工具有:gcc/clang,下面分别介绍两个工具的配置:

Clang

macOS用户如果安装过xcode,默认应该是高版本的clang配置,小编机器的Clang配置如下:

如图所示,Clang-902.0.39.1版本,是符合接下来的编译需求的。

gcc

gcc需要v7.4.0的高版本支持,以及指定特殊系统变量$CC

brew install gcc-7

export CC=gcc-7

安装gx包管理工具

gx需要单独介绍一下,这是一个很有意思的golang包管理工具,其管理的所有依赖库都存储于IPFS网络之中,由协议实验室的核心工程师whyrusleeping所创造,并灵活运用于协议实验室的各个代码库之中,而go-filecoin的依赖安装也离不开gx:

go get -u github.com/whyrusleeping/gx

gx version

设置了GOPATH,gx是能被识别为全局环境变量的,否则无法进行后续依赖安装。

安装依赖并编译源码

cd ${GOPATH}/src/github.com/filecoin-project/go-filecoin

FILECOIN_USE_PRECOMPILED_RUST_PROOFS=true go run ./build/*.go deps

提示:此过程比较漫长,小编机器跑了44分钟多,且CPU过热导致风扇不停,大家可以看一下自己机器的情况....

构建、安装、测试自编译包

洗了个澡、泡了杯茶,刷了会抖音...

45分钟过去了:

嗯...终于看到了安装并编译好的半成品...

别急,release成品就快了:

# 构建release包
go run ./build/*.go build

# 安装go-filecoin至${GOPATH}/bin目录下
go run ./build/*.go install

# 单元测试
go run ./build/*.go test

1.2.2 获取官方release安装包

如上图所示,可以在https://github.com/filecoin-project/go-filecoin/releases中直接下载官方于2019年2月11日发布的0.0.1版本,将安装包解压至{$gopath}/bin目录下。

  • 好处:绕过了复杂和漫长的源码编译环节。
  • 坏处:由于官方代码仓库在频繁更新,无法获取最新的代码包,实时性滞后。

PS:好奇官方为啥不配置个自动化持续集成...我也是无语了

1.3 验证安装

经过1.2节操作后,全局运行go-filecoin -help,出现如下图菜单栏,说明节点已经成功安装。

1.4 初始化节点

测试网络有多种类型:

  • devnet-user 针对普通用户
  • devnet-nightly 针对开发者用户

我们在初始化的时候,可以按照需求,指定flag:

go-filecoin init --devnet-user --genesisfile=http://user.kittyhawk.wtf:8020/genesis.car

1.5 运行Filecoin节点

如下图所示,完成初始化操作后,即可正式启动并运行我们的Filecoin测试节点了:

go-filecoin daemon

Filecoin发现节点的过程是遵循着gossip协议,逐渐向外发散,我们可以通过go-filecoin swarm peers 来查看所连接对等方的信息和过程。

PS: 存在一些网络连接的错误日志,看来NAT的问题依然存在,测试网并未在libp2p上针对多层NAT进行方案解决升级。

1.6 为节点定义专属昵称

与IPFS不一样,Filecoin考虑到了以Qm..开头的冗长NodeID并不好记忆,这里加了一些比较人性化的设计,即,可以为自己的节点创建专属昵称(nickname),不过仅限字符串:

#设置
go-filecoin config heartbeat.nickname "jialesoho"

#核对
go-filecoin config heartbeat.nickname

1.7 节点与网络的可视化监控

设置节点心跳配置,与Filecoin网络监控建立连接:

go-filecoin config heartbeat.beatTarget "/dns4/stats-infra.kittyhawk.wtf/tcp/8080/ipfs/QmUWmZnpZb6xFryNDeNU7KcJ1Af5oHy7fB9npU67sseEjR"

如下图所示,登录可视化控制台,https://stats.kittyhawk.wtf/,可查看Filecoin测试网(devnet)状态以及个人节点信息:

如图所示,刚刚我们自定义命名的Filecoin节点——jialesoho,已经被点亮在Filecoin的全网可视化监控面板中,除此之外,可视化控制台还有许多全网的交易数据,吞吐量,区块信息可供我们查阅和分析...

至此,我们应该可以通过《【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点》的学习,顺利搭建并测试自己的Filecoin节点了,期望帮正在电脑前研究Filecoin源码仓库的你,少走弯路!

下一章,我们将介绍《【Filecoin源码仓库全解析】第二章:如何创建个人钱包,获取FIL Mock代币》

参考文献:

  • go-filecoin | github

本系列文章赞助合作招募:

本系列文章预计10+篇,欢迎感兴趣的朋友参与,同时将开放赞助渠道,你们的赞助和打赏是支持我业余时间持续写作的动力,我也将尽自己所能,最大化地为阅读者和相关创业公司品牌带来帮助和权益, 具体如下:

品牌和赞助商所享受权益

  • 文尾品牌Logo展示
  • 一条品牌的推荐语
  • 公众号文章转载权限
  • 为平衡用户体验,每篇仅限1家
  • 个人知乎、公众号、简书、头条号等多渠道投放

参与方式

私信我即可,联系方式已在上方联系读者处给出。

示例

星鉴网 是一家专注于IPFS生态的垂直媒体,集信息传播,技术推广,应用孵化于一身;感谢星鉴网(ipfsfirst.com)对嘉乐SOHO原创内容的支持。

联系作者:

深夜写作,不免有不足之处,欢迎指正和更多讨论,可私信微信公众号:jialesoho,或者加我微信:daijiale6239,如果觉得对您有帮助,可以帮点击好看推广打赏支持噢,感激不尽!


http://www.niftyadmin.cn/n/835578.html

相关文章

CSS的超级链接知识点

1、伪类选择器 什么是伪类选择器? 伪类选择器是用来给超级链接的不同状态来设置样式。 超级链接的不同状态 - 正常访问 超级链接没有被访问 :link- 访问过后状态 超级链接已经被访问 :visited- 鼠标放上状态 鼠标放在超级链接上面,但是并没有将…

解决:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...

错误重现: 在发布网站的过程中,虽然不是第一次发布了,但是还是遇到了很多的问题。为了以后可以轻松解决此类问题还是积累下来比较好。 问题:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置&…

golang协程池设计

Why Pool go自从出生就身带“高并发”的标签,其并发编程就是由groutine实现的,因其消耗资源低,性能高效,开发成本低的特性而被广泛应用到各种场景,例如服务端开发中使用的HTTP服务,在golang net/http包中,每一个被监听…

在 win10 环境下,设置自己写的 程序 开机自动 启动的方法

原文:在 win10 环境下,设置自己写的 程序 开机自动 启动的方法1、是登录自己用户时才能开机启 C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup username 替换成 你自己的用户名 2、登录所有用户时都能开机启动 C:\ProgramData\M…

CSS优先级

优先级&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>优先级</title><style>/*给div标签来设置样式*//*标签选择器*/div{color: #f00;}</style> </head> <body><div>…

centos6.8安装node

我们这里安装node&#xff0c;直接下载官网已经编译过的源码&#xff0c;解压即可。不自己编译源码&#xff0c;因为自己编译源码需要升级gcc等一系列的软件&#xff0c;编译过程各种报错&#xff0c;太痛苦。下面安装的node版本为v8.4.0&#xff0c;是目前官网的最新版&#x…

CSS背景样式属性

1.背景颜色 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>背景颜色</title><style>.box{width: 100px; /*背景宽度*/height: 100px; /*背景高度*/background-color: #f00; /*用于给元素设置背景颜色*/}&l…

CSS---position元素定位(一)

position在英文中表示“位置”的意思&#xff0c;它主要是用于实现对元素的定位 在CSS中定位分为三种&#xff1a; position:fixed   固定定位 position:relatvie   相对定位 position:absolute   绝对定位 注意&#xff1a; 在使用定位属性时&#xff0c;一定要…

Wireshark显示结果过滤基本语法

按IP地址过滤&#xff1a;1、仅显示源地址为192.168.1.95的项目&#xff1a; ip.src eq 192.168.1.952、仅显示目的地址为192.168.1.95的项目&#xff1a; ip.dst eq 192.168.1.953、仅显示源地址为192.168.1.95并且目的为59.37.96.63的项目&#xff1a; ip.src eq 192.168.1.9…

python2输出中文乱码问题

python2输出中文乱码问题 1、在源码文件第一行添加 #-*-coding:utf-8-*- 或 #encodingutf-8 或 #encodingUTF-8 注意&#xff1a;一定要在第一行&#xff01; 2、在字符串前加 ‘ u ’ 例&#xff1a; springu"这是一个测试字符串" 3、若上述2种方式仍然不能保证能…

Mac下安装MNMP(Nginx+PHP7)环境

安装Homebrew 打开终端输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 之后就可以使用 brew install **** 来安装所需要的依赖了。 安装PHP7.1&#xff08;FPM方式&#xff09; brew install php7.1 由于OSX已经自…

CSS---position元素定位(二)

绝对定位&#xff1a; 语法&#xff1a;   position:absolute 什么是绝对定位&#xff1f;   绝对定位元素是相对于“祖先定位元素”来进行定位&#xff01; 什么是祖先定位元素&#xff1f;   绝对定位元素它会先去查找其父元素是否设置了定位的属性&#xff0c;如果有…

理解为什么要将全连接层转化为卷积层

理解为什么要将全连接层转化为卷积层 1.全连接层可以视作一种特殊的卷积 考虑下面两种情况&#xff1a; 特征图和全连接层相连&#xff0c;AlexNet经过五次池化后得到7*7*512的特征图&#xff0c;下一层全连接连向4096个神经元&#xff0c;这个过程可以看做有4096个7*7*512的卷…

this是什么以及如何判断它

总结下对this的学习与理解 转眼前端的学习已有一年&#xff0c;日常写代码中经常碰到this这个东西。特别是在用vue的时候&#xff0c;this还是有点多的&#xff0c;哈哈。在翻阅了一部分书籍和一堆大佬的博客后&#xff0c;决定总结一下这些东西&#xff0c;下面谈谈我对this的…

CSS---z-index

z-index z-index表示谁压着谁&#xff0c;数值大的会压盖住数值小的只有定位的元素才有z-index值&#xff0c;只有设置了固定定位、相对定位、绝对定位了的原色它们才会拥有z-indexz-index的值是没有单位的 值是一个正整数 默认的z-index的值是0如果多个定位元素没有设置z-i…

方法命名规范

动词   含义 返回值   can 判断是否可执行某个动作(权限) 函数返回一个布尔值。true&#xff1a;可执行&#xff1b;false&#xff1a;不可执行 has 判断是否含有某个值 函数返回一个布尔值。true&#xff1a;含有此值&#xff1b;false&#xff1a;不含有此值 is 判断是否为…
最新文章