IPFS/Filecoin/lotus/矿池、节点、钱包等开发 前置知识篇

IPFS/Filecoin/lotus/矿池、节点、钱包等开发 前置知识篇

  • 前言
  • 一、文档汇总
    • 1、白皮书
    • 2、官方文档、社区
    • 3、浏览器
  • 二、解读、导读
    • filecoin挖矿机制解析
    • Lotus项目源代码导读(Lotus项目概况、简介)
    • Filecoin挖矿中的P1、P2、C1、C2四个阶段是什么意思?
    • Filecoin挖矿与奖励分配、早期募集成本及解锁机制
    • Filecoin质押机制解读
    • Filecoin惩罚机制
    • Filecoin锁仓和线性释放规则
    • Filecoin挖矿过程中的爆块规则
    • Filecoin经济白皮书解读
    • Filecoin-lotus钱包
  • 三、go语言相关
    • 1、golang项目、依赖管理
      • 1.1、go module(相当于Java项目管理工具maven)
      • 1.2、包关键字package,导包关键字import相关知识
    • 2、golang语法
    • 3、golang面向对象
      • 3.0、前置知识之接收器的概念
      • 3.1、golang是如何实现面向对象的?
      • 3.2、golang是如何控制访问权限的?
      • 3.3、golang结构体之间如何继承?
      • 3.5、golang中结构体如何实现接口?
    • 4、golang进阶:内存原理、协程、并发等
      • 4.1、对golang协程和通道的理解:
      • 4.2、golang main() init()方法的调用
      • 4.3、内存结构:堆栈与逃逸分析
      • 4.4、指针
    • 5、其他

前言

阅读本文需要的前置知识:
1、开发者需要掌握一门编程语言(如Java:基础、面向对象、maven等)
golang大佬、投资人和非程序员的从业人员可略过第三章。
2、 区块链(炒过币,挖过矿,或懂区块链数据结构、加密算法、钱包相关、节点、比特币挖矿等)
没接触过区块链的可以看下面这篇,大佬请略过:
区块链快速入门

一、文档汇总

1、白皮书

Filecoin白皮书中文版
Filecoin白皮书英文原版.pdf

Filecoin经济模型解读.pdf(中文社区官方)
Filecoin经济模型解读(CSDN转载)

2、官方文档、社区

filecoin官方文档中文版
filecoin官方文档英文版

filecoin Github仓库及中文社区

filecoin中文社区旧版资源大全

节点API文档:filecoin官方文档-参考-Lotus-JSON-RPC-Method-API(link to the go documentation)
Lotus设计规范文档(英文原版)
Lotus使用指南文档(英文原版)

3、浏览器

飞狐浏览器
飞驰浏览器
雅典娜收益计算器

二、解读、导读

filecoin挖矿机制解析

翻译:filecoin挖矿机制解析
官方文档的摘要,主要解释了存储、检索两种矿工,复制证明、时空证明。并简要介绍了挖矿的四个阶段及其特点,及官方给出的关于硬件配置的建议。

Lotus项目源代码导读(Lotus项目概况、简介)

Lotus项目源代码导读(Lotus项目概况、简介)
本文给出了项目相关的链接、资料,并对Lotus项目概况进行了介绍,里面的重点是:
1、代码基本情况
上层代码开发语言为 Golang,版本是 1.13 或以上。底层涉及到零知识证明等算法相关的逻辑采用 Rust 语言,toolchain 版本为 nightly-2020-03-19。底层库先是编译成静态库,上层 Golang 通过 cgo 调用底层静态库。底层的代码仓库叫 filecoin-ffi,URL:https://github.com/filecoin-project/filecoin-ffi.git,在主仓库的路径 extern/filecoin-ffi 之下。

2、二进制文件
代码编译后产生三个可执行程序:lotus 和 lotus-miner,lotus-worker。lotus 为全节点,lotus-miner 为矿工软件,lotus-worker为独立的密封软件。这些软件均是命令行方式运行。

Filecoin挖矿中的P1、P2、C1、C2四个阶段是什么意思?

封装是什么意思?_IPFS中的P1,P2,C1,C2是什么意思,封装过程需要多久呢
P1、P2、C1、C2 其实就是打包封装数据的四个过程。这四个单词就是 precommit1,precommit2,commit1,commit2.

P1阶段,分割装箱。在 IPFS 网络里,文件都要进行切片,最大不能超过 256K。把文件分割的这个阶段就叫做 P1。分割装箱的阶段需要大量的耗费 CPU,这个事AMD 比较擅长,所以就目前来说,市面上Filecoin 的矿机都是 AMD 的 CPU。

P2阶段,给数据碎片做好文件名和信息记录。即动态哈希列表 DHT 的形成过程,DHT用于寻找文件。这个生成动态哈希列表的过程就叫 P2。因为这个过程需要生成默克尔树,所以需要使用 显卡GPU。密封机里面会加一个显卡来干这个活。至此我们已把数据分割装进“小箱子”之中,然后又生成了文件的信息表。

C1 阶段,给这些小箱子贴标签,C1 阶段很省时间。一般几十秒就弄完了。

C2阶段,要做零知识证明,就是为了将来提交时空证明而准备的,零知识证明就是在我不知道存储的内容的情况下,也能证明我已经保存了这个文件。 C2 阶段需要大量的并行计算,所有算力机是一个必备工具。

总结:封装数据的过程就是 P1、P2、C1、C2,P1 就是分割装箱,需要 AMD CPU 耗时几个小时。P2 就是生成文件的信息表也叫动态哈希列表 DHT 一般需要显卡,几十分钟干完活。C1 就是贴标签几十秒就够,C2 就是做零知识证明。一般需要算力机(主要也是靠CPU)运作 30-40 分钟左右。

Filecoin挖矿与奖励分配、早期募集成本及解锁机制

Filecoin挖矿与奖励分配、早期募集成本及解锁机制
从宏观的角度,介绍Filecoin的募资历史、成本、解锁,分配比例等。

Filecoin质押机制解读

经济白皮书3.4节
初始质押分为:

存储质押——目前通过使用与大约足以支付7天的扇区故障费和1个扇区故障检测费的金额相应的初始存储质押来达到平衡。这通常用扇区的未来期望收益天数(约20天)来计算。

共识质押——防止投机和损害存储用户权益。取决于该扇区加权字节算力(QAP)和网络流通供应量,当网络达到或高于基准线时,目标是约有30%的网络流通供应量被锁定在初始共识质押中。

Filecoin惩罚机制

IPFS/Filecoin的通证分发与惩罚机制

扇区故障费:相当于2.14天估计的区块奖励。

扇区故障检测费:相当于5.00天的估计区块奖励。

扇区终止费:扇区已获得区块奖励的天数估计,最多90天。

网络交易费:基于网络拥堵动态费用结构。

Filecoin锁仓和线性释放规则

对Filecoin180天线性释放的分析解读
假设每天都是100fil的收益,锁仓20天,从第21天开始,每天收益的25%立即释放,75%分180天线性释放。

释放的第一天:25+1/180×75
第二天: 25+2/180×75
第三天: 25+3/180×75
……
第180天: 25+180/180×75
第181天: 25+(180-1+1)/180×75
第182天: 25+(180-1+1)/180×75
……

Filecoin挖矿过程中的爆块规则

Filecoin挖矿过程中的爆块规则

Filecoin经济白皮书解读

Filecoin经济白皮书解读

Filecoin-lotus钱包

Filecoin-lotus钱包

在Filecoin地址规则中,t代表测试网,f代表即将上线的正式网,1代表钱包地址,2是合约地址,3则是矿工地址。

Filecoin中Lotus节点操作及常见问题

三、go语言相关

1、golang项目、依赖管理

1.1、go module(相当于Java项目管理工具maven)

lotus环境搭建:需要rust、go
除了lotus项目代码本身,还需要filecoin-ffi代码,放在项目的extern文件夹。
go语言依赖管理:go.mod文件,go mod相关命令。
golang自动下载所有依赖(包括goland怎么设置)
golang自动下载所有依赖最好用的一个命令
go get -d -v ./… (下载全部依赖,经测试好用。)

1.2、包关键字package,导包关键字import相关知识

Go语言中import后面的最后一个元素是包名还是目录名?真相-------目录名

2、golang语法

Go 编程语言规范【译】

Go语言规范英文版:The Go Programming Language Specification

golang语言规范

go语言与Java相比,在语法上的一些特性:
声明变量时,先写变量名,再写类型;
可以声明变量的同时进行类型推导;
——语法为 —— 变量名:=值(可以是数值,也可某个方法的返回值)
在if语句中可以进行赋值操作;
——参考:带赋值操作的if语句

3、golang面向对象

golang中的结构体就是java中的类。

3.0、前置知识之接收器的概念

接收器是golang写结构体成员方法的常用语法。

函数除了函数名、参数、返回值,还有接收器的概念,接收器只能有一个,接收器的概念类似于面向对象概念中的this或self,传入的接收器对象(一般要加星以便可对其修改),在函数中可以对其进行修改。
go语言方法和接收器
go函数声明语法:函数名前的括号内的东西
func (接收器)函数名(参数)(返回值){
函数体
}

函数可以有多个返回值,函数可以写在类的外面;
一个文件中可以有多个类、接口和函数。

3.1、golang是如何实现面向对象的?

go语言中并没有像C++,Java语言中这类的Class,它只含有像C语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是go的面向对象,包括go语言中的map等操作都是借助了结构体。其实,说白了,C++、Java等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。然而这使得很多人刚接触面向对象的时候很不理解这些东西。

参考转载:GO语言面向对象

3.2、golang是如何控制访问权限的?

golang 访问权限控制:
1.类(结构体)、方法首字母小写:仅仅同一个包访问
2.反之,大写:全项目访问
go 基础 结构体 接口 访问权限

3.3、golang结构体之间如何继承?

匿名字段实现类似继承的效果:
//问:此处为何只有类名,没有变量名?
//struct中只写一个类型不写字段名定义的字段叫做匿名字段。
//golang把这个类型的所有成员到装到了当前struct中。
//直接当前struct.XXX就能访问这个类型的子成员了。

type Manager struct {
     
	ls         stores.LocalStorage
	storage    *stores.Remote
	localStore *stores.Local
	remoteHnd  *stores.FetchHandler
	index      stores.SectorIndex

	sched *scheduler

	storage.Prover//问:此处为何只有类名,没有变量名?
	//struct中只写一个类型不写字段名定义的字段叫做匿名字段。
	//golang把这个类型的所有成员到装到了当前struct中。
	//直接当前struct.XXX就能访问这个类型的子成员了。

	workLk sync.Mutex
	work   *statestore.StateStore

	callToWork map[storiface.CallID]WorkID//此处:map关键字实现的是类似Java中Hashmap的数据结构
	//方括号内是key,后面的value。
	//https://blog.csdn.net/weixin_39689870/article/details/112327967
	// used when we get an early return and there's no callToWork mapping
	callRes map[storiface.CallID]chan result

	results map[WorkID]result
	waitRes map[WorkID]chan struct{
     }
}

3.5、golang中结构体如何实现接口?

对接口的实现不靠implements关键字,而是这样子写:
var _ SectorManager = &Manager{}//下划线的妙用:我们要接一下返回值,但又不会使用这个返回值,就用下划线占个位。长这样的一句代码的作用是——判断Manager类是否实现了Sectormanager接口。

local := []*cli.Command{
     //:=类型推导,[]数组,*引用类型
		initCmd,
		runCmd,
		//todo...
}

for _, cmd := range local {
     //此处下划线处是下标index,用不到就可以占位略过
		cmd :=cmd
//todo...
}

4、golang进阶:内存原理、协程、并发等

4.1、对golang协程和通道的理解:

go语言协程的理解
go的协程
深入浅出golang的chan
GO的协程调度和GMP模型

4.2、golang main() init()方法的调用

golang main() init()方法的调用

4.3、内存结构:堆栈与逃逸分析

Golang的内存逃逸分析(深入浅出)
【golang】逃逸分析(与C++比较)

4.4、指针

go指针详解

5、其他

Go全栈面试题(1) -Go基础语法面试题

Golang精编100题-搞定golang面试

你可能感兴趣的:(笔记,区块链)