Decentralized Web Summit (DWS) 2018 于2018年7月31到8月2日在旧金山举行。DWS由非盈利组织Internet Archive在2016年发起举办,致力于在全球打造一个能够保护个人隐私,数据安全和行为自治的去中心化网络,参会人员来自各行各业,畅所欲言,共同来定义去中心化网络。
Protocol Labs作为主要赞助方之一,在前两天都有不少的主题宣讲,在最后一天还举办了Lab Day,和观众进行深度互动。当然比较瞩目的还是基于IPFS的FileCoin,作为2017年第二大的私募项目(最大的是BM牵头的EOS),在极短的时间内就募集了2.57亿美元。按照官方的说法,FileCoin承诺最迟将于2022年7月主网上线并开始挖矿,按这个时间进度看,这次FileCoin演示是属于很早期演示,其内容也是合理的。
本文将主要从技术角度点评IPFS创始人Juan Benet在DWS的第二天,做的FileCoin第一次公开在线演示,详细信息可以参考视频(https://www.youtube.com/watch?v=kW6e1GCpqpE 6:54 – 7:02),由于时间限制Juan只用了8分钟做了快速演示,但基本了解到了FileCoin目前进展情况。虽然在第三天的Lab Day有更深入的演示,但限于视频没有公开,目前还没有了解的更详细的信息。
一、演示主要分为两部分:
FileCoin的场景下IPFS节点之间传输什么?
filnetsim (FileCoin网络模拟器)和go-filecoin (FileCoin命令行工具)演示
Log展示
网络可视化演示
区块链数据演示
go-filecoin一些核心命令演示
以下篇章将重点按照这些内容展开:
二、IPFS节点
如上图所示,FileCoin的环境下,IPFS节点间不仅仅只是利用libp2p来传输共享文件,而又承载了维护区块链的重要能力,如Juan提到的:
Peer连接别的有Blockchain的Peer
Peer传播block
Peer传播transactions
Peer之间传输需要保证安全可靠
点评:对于区块链来说,这些观点并没有新意,只不过对于传统的IPFS节点而言,并不需要负担用来维护区块链的存储和网络的额外成本,这些都是传统的IPFS节点升级到FileCoin环境下所要面临的问题,因为FileCoin主节点要求存储快,带宽大能够支撑得起足够多足够快的存储交易量,不过在经济激励的前提下,主力矿机或者矿池应该能够承担起主节点角色。
三、filnetsim和go-filecoin
filnetsim(filecoin-network-sim)和go-filecoin都是filecoin-project的私有项目,非protocol-lab成员暂时无法查看。
filnetsim是一个FileCoin的网络模拟器,可以在一台机器上模拟多个FileCoin的IPFS节点之间发生的询价、报价、交易、支付和挖矿等行为,同时基于这些行为,产生Logs,Network Viz,Chain Viz三大核心模拟功能。值得一提的是filnetsim与FileCoin的核心是完全解耦的,可视化的架构不受底层是DHT、Kaldemlia还是Bitswap实现的影响,当然可能呈现的方式会有些不一样。log文件是模拟器可视化的输入,所以原则上只要把log文件输入到可视化模块,就能看到网络的运行情况。以下几点主要是从filnetsim的帮助来分析这个工具所能提供的主要功能:
目前只支持到单机运行,在未来会支持跨机器运行;
模拟6类Actions:
SendPayment:Miner和Client之间互相转账
StorageAsk:Miner在市场上挂一个卖单StorageBid:Client在市场上挂一个买单
StorageDeal:Miner和Client之间匹配买单和卖单
SendFiles:针对存储,从Client向Miner发送成交的File;针对下载,从Client到Miner(注意:针对Retrieval市场,Miner是可以从Client获取内容)
MineBlock:矿工出块并广播
缺省模拟最大节点数为15个,初始节点数为3;
缺省12秒模拟新加入一个节点,300毫秒发出一个Action,3秒自动出一块;
可设置是否自动发布StorageAsk,StorageBid,StorageDeal,MineBlock或者SendPayment这些Actions,缺省为“是“;
fork-branching:缺省为1,每次出块的Leaders有几个,如果有多个,要在多个之中选择一个出块,其他作为BFT容错,这在FileCoin的白皮书里指的是EC(Expected Consensus)共识模式;
fork-probability:每个Leaders出块的可能性,缺省为1,即为100%,如果fork-branching参数为1,那这个参数一定也为1;
go-filecoin应该是FileCoin的核心命令了,底层应该还是基于IPFS,之上包装了激励层,从命令帮助来看有和钱打交道的钱包地址,交易和支付,有和使用角色打交道的矿工和用户等一系列命令。
filnetsim是通过调用go-filecoin来完成模拟的核心功能的,以下将以Juan展示的顺序,重点讲解这两个命令的深层含义:
如上图所示,Juan启动了filnetsim命令,用来模拟如下情况:
开始3个节点,最多15个节点,中间应该有节点进进出出的模拟,这个量级的模拟,在P2P工程角度看,算是非常初级的工程模拟。
每3s生成一个Block
每300ms提交五项Actions中的一项:Ask(要价),Bid(竞价),Deal(成交)
Payment(支付),Mine(挖矿)–
fork-branching 和 --fork-probability 值都是1矿工自动挖矿
filenetsim结果首先列出了它的核心三大功能及地址:
Logs:http://127.0.0.1:7002/logs 所有logs会被下面的两个可视化的Web界面来消化并展示,所以它也必须是可以Web访问的
Network Viz:http://127.0.0.1:7002/viz-circle 展示整个模拟网络运行情况,稍后会详细说明
Chain Viz:http://127.0.0.1:7002/viz-blockchain 区块链浏览器,展示区块生成情况及内容,稍后会详细说明
接下来,filnetsim会调用go-filecoin来启动3个初始节点,一个客户,一个矿工,另外一个视频中没有显示。它们尽管身份不同,未来绑定的相关Action可能不同,但是从P2P网络的节点来看,其实是对等的,列出了5个属性:
repo dir:数据所在的根目录main wallet address:节点钱包地址miner actor address:只有Miner有,应该是Miner的Peer Addressgo-filecoin swarm connect:兼容以太swarm协议的链接地址go-filecoin cmdapiaddr: API能够调用的本地端口地址
如上图所示,http://127.0.0.1:7002/viz-circle 将展示整个模拟网络运行情况,总共分为5个部分:
CHAIN:显示区块信息,每3秒出一块,每块包含块地址及出块矿工地址,每出一块,对应的ORDERBOOK就会显示块中所包含的BID和ASK以及DEALS里包含的DEAL的智能合约情况。
ORDERBOOK:显示区块内的BID和ASK存储合约情况,ASK合约来自矿工,显示能够提供的存储情况,包括矿工地址,提供的存储单元,存储单元报价;BID合约来自用户,显示需要提供的存储情况,包括用户地址,需要的存储单元,存储单元报价。
STORAGE MARKET DEPTH:直译为存储市场深度,能够动态呈现存储市场变化,横坐标显示存储单元价格,从0到26;纵坐标显示在某存储单元价格下的所有存储合约需要的总的存储单元数,从0到24,000;左侧颜色显示为BID合约,右侧颜色显示为ASK合约。以上图为例,显示ASK存储合约总体深度大于BID存储合约,因此表明矿工存储量供给大于用户存储量需求。价格撮合明显在横坐标中部才能得到满足,不能够匹配的节点只能根据市场行情重新调整自身合约的价格,以便能够被市场撮合成功。
DEALS:显示已撮合成功的存储合约,包括ASK方账号,BID方账号,合约存储单元及单元成交价格。
NETWORK:显示当前网络节点的动态流转信息,包含出块信息,合约信息,交易信息
3、Chain Viz模拟
如上图所示,http://127.0.0.1:7002/viz-blockchain 展示的是实时区块信息,也可以称为区块链浏览器,主要包括:区块高度,打包的消息数量,及打包的矿工账号生成情况及内容。点击某个区块后,如下图所示:
以上图为例,显示了高度为24的区块的4条消息的细节,前2条为交易信息,显示From和To账号及交易值;后两条是调用智能合约的方法”addAsk” 及参数的消息和返回结果。
4、go-filecoin详解
如上图所示,显示的go-filecoin的一级命令,每个命令都会有二级命令。下图所示的例子就是获取某节点orderbook里的所有deals的交易,如需连接到某个节点,只需指定–cmdapiaddr的参数即可:
go-filecoin --cmdapiaddr =:61037 orderbook deals
go-filecoin --cmdapiaddr =:61037 client cat QmQ…Mz
总结一下,go-filecoin主要有如下几类功能:
init:初始化,类似于ipfs的初始化,初始化本节点对应的本地存储目录config:配置的设置和获取
daemon:启动后台服务进程
wallet,paych:钱包管理,支付通道操作,这是FileCoin所独有的,钱包账号转账管理
client,miner,mining:角色管理,根据Client或者Miner角色的不同,相对应的行为和属性也不同,对于Miner来说,还单独有mining一级命令管理
actor,address,bootstrap,dag,log,orderbook,message,show:与一些核心服务或数据结构的交互
chain:获取区块数据
id,ping:网络相关的信息
swarm:与以太的swarm协议互联
mpool:这是内存池mempool的展示。注意,不是矿池,有公众号文章说这是矿池,误导大家认知。
version:版本号
四、总结
短短8分钟,Juan第一次在公众面前做了FileCoin的Demo,主要是一个网络模拟器filenetsim和go-fileicon的交互,但是FileCoin整体架构中最难的部分,也就是各种硬盘证明机制,这次演示并未提及,另外,之前在公开的白皮书8.2上悬赏解决的6大问题,也没有公布进步,估计还没有大的突破,还有这次演示只有几个节点的模拟,说明项目还是处于很早的时期。 不过,这次演示也算是给到FileCoin广大热心群众一个交代。从技术上初步判断,FileCoin的主网上线和启动挖矿的时间,比官方承诺的2022年7月,至少还是能提前1年的,对于广大IPFS爱好者来说,也是一件好事。
文章作者:Wayne Wong
转载请注明出处
如果有关于区块链学习的交流,可以通过下面的方式联系我:
加我微信,注意备注: 区块链学习
wechat:omnigeeker
github: omnigeeker (Wayne Wong)
telegram: @omnigeeker
twitter: @omnigeeker
medium: https://medium.com/@omnigeeker
steemit: https://steemit.com/@omnigeeker
zhihu:@Omnigeeker
jianshu:@omnigeeker