当用户以守护进程模式启动filecoin时,最终执行的命令位于
commands/daemon.go文件,它的
Run方法直接调用同文件中的
daemonRun函数进行处理。这个函数的处理如下:
调用getRepo,获得本地仓库repo.Repo接口对象。这个方法内部调用仓库的OpenFSRepo函数,生成并初始化仓库对象,它的流程如下:
根据仓库路径和版本,生成仓库repo.FSRepo对象。
锁定相关仓库的repo.lock文件,并设置仓库对象的lockfile属性,从而确保同时只有一个全节点可以使用仓库,以便维护仓库的完整性。
调用仓库对象的loadFromDisk方法,从磁盘上加载仓库的各种数据,并同继续完善仓库对象。这个方法的流程如下:
调用仓库对象的readVersion方法,从仓库文件中读取仓库的版本号,并与仓库对象自身的版本号进行比较。如果不匹配,则抛出错误。
调用仓库对象的loadConfig方法,加载仓库的配置文件config.json。
调用仓库对象的openDatastore方法,加载仓库的数据存储文件。默认情况下,数据存储类型为badgerds,所以加载的文件目录为仓库下的这个目录。这个方法会生成仓库存储对象,并保存在仓库对象的ds属性。
调用仓库对象的openKeystore方法,打开仓库的keystore文件。这个方法会生成私钥存储对象,并保存在仓库对象的keystore属性。
福布斯:已有机构与币安接触拟合作推出替代BUSD的新稳定币:金色财经报道,已有机构与币安接触拟合作推出替代BUSD的新稳定币,据币安首席战略官Patrick Hillmann透露,由于美国监管机构对BUSD发行方Paxos实施禁令不允许再发行更多代币,多家私人和公共实体表示有兴趣与币安共同开展新的稳定币合作计划,“尤其是欧洲和中东地区的实体”,
据悉,“BUSD替代品”可能不会选择美元作为锚定货币,但特里克·希尔曼不愿提供更多细节。特里克·希尔曼补充称:“人们不会寻求购买更多BUSD,除了以太坊用户之外,任何链上的用户都不会想进行BUSD交易”,他还证实币安目前没有美国银行合作伙伴。(福布斯)[2023/2/19 12:15:25]
调用仓库对象的openWalletDatastore方法,打开钱包数据存储。这个方法会生成仓库存储对象,并保存在仓库对象的walletDs属性。这次对象对应的目录为wallet。
调用仓库对象的openChainDatastore方法,打开区块链数据存储。这个方法会生成仓库存储对象,并保存在仓库对象的chainDs属性。这次对象对应的目录为chain。
调用仓库对象的openDealsDatastore方法,打开交易数据存储。
这个方法会生成仓库存储对象,并保存在仓库对象的dealsDs属性。这次对象对应的目录为deals。
获取环境变量。
获取命令行参数。
调用节点的New方法,创建一个节点。首先,生成一个配置对象,使用前面几步形成的选项参数和仓库对象来设置配置对象;然后调用配置对象的Build方法,构建一个Filecoin节点。当我们不带参数启动时,配置对象中只有仓库对象会被设置。Build函数执行流程如下:
Flow区块链推出“超级命令”Flow Setup功能:金色财经报道,Flow 区块链在社交媒体宣布推出“超级命令” Flow Setup 功能,该公司无需进行繁琐的项目设置,只需运行包含“flow.json”文件的命令就能设置基本文件夹结构。此外,Flow 还改进了导入语法,使其像按名称导入一样简单。例如,如果开发人员将名为 Foo.cdc 的合约添加到 contracts 文件夹,之后可以通过编写 import \"Foo\" 命令将其导入到任何其他智能合约中。[2023/1/31 11:38:02]
如果配置对象中没有仓库对象,则生成一个内存版仓库对象。
生成区块存储对象。?
'调用配置对象的buildHost方法,生成libp2pHost对象'。buildHost方法调用libp2p的New方法,这个方法最终调用config/config.go中定义的NewNode方法,这个方法:
首先,调用swarm的NewSwarm方法创建一个swarm对象。
然后,调用basic_host.go中定义的NewHost来创建host对象。在创建host对象过程中,把swarm对象保存为host对象的网络对象,同时设置swarm的连接处理器和流处理器分别为host对象的newConnHandler和newStreamHandler两个方法。
然后,调用swarm的AddTransport方法,添加指定的传输协义。
最后,调用host的Listen方法,开始监听指定的地址。
100多枚与已倒闭加密交易所QuadrigaCX相关的比特币被唤醒:12月20日消息,据外媒报道,上周末,100多枚与已倒闭加拿大加密交易所QuadrigaCX相关的比特币从冷钱包中转出,总价值约为170万美元,其中许多资金已经流入不同的钱包。此前这些比特币已经休眠了三年多。
据悉,QuadrigaCX的破产受托人安永会计师事务所并没有转移资金。安永于2019年2月宣布,在错误地将大约100枚比特币发送至其无法访问的Quadriga冷钱包后,该公司失去了对这些比特币的控制。此后这些地址的比特币一直处于冻结状态,直到上周五,所有五个地址的比特币在美国东部时间下午6点52分至7点14分之间流出。QuadrigaCX在创始人兼首席执行官Gerald Cotten去世后于2019年破产。在Quadriga破产时,它对数千名客户的债务接近2亿美元。(CoinDesk)[2022/12/20 21:55:33]
生成pinger服务对象。
生成区块验证器consensus.DefaultBlockValidator对象。
使用libp2pHost对象和路由对象,生成bitswap网络对象。
使用bitswap网络对象和区块存储对象,生成bitswap对象。
使用区块存储对象和bitswap对象,生成区块服务对象。
生成获取区块net.Fetcher对象,以便从远程节点获取数据。
''调用readGenesisCid函数,获取创世区块的CID''。
加密货币衍生品平台Paradigm将削减15%薪酬:金色财经报道,加密货币衍生品交易平台Paradigm在全公司范围内减薪15%。Paradigm还声称,减薪减少了公司裁员的需求,对组织发展势头的影响也会较小。现在是艰难时期,但我们必须做艰难的事情,并保持财务灵活性,以度过我们作为一个行业所处的动荡时期。(the block)[2022/12/15 21:46:34]
生成chain.Store对象。
生成chain.ChainStateProvider对象。
生成powerTable对象,类型为consensus.MarketView对象。
根据配置对象是否有奖励,调用不同的方法节点共识器。如果奖励对象为空,则调用consensus/processor.go的NewDefaultProcessor函数,生成共识器;否则,调用NewConfiguredProcessor函数,生成共识器。两个函数都生成consensus.DefaultProcessor对象,区块在于它们的属性。
调用consensus/NewExpected.go的NewExpected函数,生成consensus.Protocol接口节点共识consensus.Expected对象。根据配置对象是否有proofs.Verifier接口对象,在生成过程中会使用不同的参数。
调用go-libp2p-pubsub类库的NewFloodSub函数,生成一个发布/订阅pubsub.PubSub对象fsub,监听自身的所有消息。
Bitfinex宣布支持ETHW:9月16日消息,Bitfinex宣布支持ETHW,Bitfinex账户中有ETH余额的客户将收到ETHW代币。[2022/9/16 7:01:42]
使用仓库repo.Repo接口对象的walletDs属性作为钱包后端,生成钱包wallet.Wallet对象。
调用chain/syncer.go的NewSyncer函数,生成区块链chain.Syncer同步对象。
生成core.MessagePool对象。
生成core.Inbox对象。
生成core.MessageQueue对象。
生成node.defaultMessagePublisher对象。消息发布对象绑定的主题为/fil/msgs/devnet-3,它会在这个主题上发布消息。在全节点的启动方法中通过,通过调用porcelain.API对象的PubSubSubscribe方法,订阅这个主题的消息通知。
生成core.Outbox对象。这个对象上一步创建的消息发布对象,当调用porcelain.API对象的MessageSend方法发送消息时,内部调用本对象的Send方法,进行发送。发送方法最终调用消息发布对象的Publish,把经过签名之后的消息发布到相应的主题上。当消息发送之后,别的全节点对象因为订阅了消息主题,所以会调用全节点的processMessage的方法进行处理。具体见全节点启动过程。
'生成PorcelainAPI对象。
'生成Filecoinnode.Node全节点对象。
'生成net.Bootstrapper引导对象。
返回Filecoin全节点对象。
调用内部函数runAPIAndWait,启动全节点。
''调用节点的Start方法,启动Filecon节点''。
调用chain.Store对象的Load方法,加载本地已有区块。
调用全节点对象的miningAddress方法,获取矿工地址;如果配置了矿工地址,则调用node.Node全节点对象的setupMining方法,设置挖矿。这个方法调用initSectorBuilderForNode函数,初始化初始化扇区生成器,并保存在全节点对象的sectorBuilder属性上。
生成syncCallBack同步回调函数对象,用于处理区块同步。
调用protocol/hello/hello.go文件的New函数,进行Hello消息处理设置这个方法内部处理如下:
生成一个hello协义处理器对象,并设置为全节点对象的HelloSvc属性。
设置libp2p/fil/hello/1.0.0协义处理器为protocol.hello.Handler对象的handleNewStream方法。
设置libp2p网络对象的连接通知为protocol.hello.helloNotify对象。
调用Filecoin节点的setupProtocols方法,设置各种协义。这个方法内部处理如下:
生成protocol.block.MiningAPI对象,并保存为全节点对象的BlockMiningAPI属性。
调用protocol/retrieval/api.go文件的NewAPI函数,生成protocol.retrieval.API对象,并促为全节点对象的RetrievalAPI属性。
调用protocol/storage/api.go文件的NewAPI函数,生成protocol.storage.API对象,并促为全节点对象的StorageAPI属性。
以全节点对象为参数,调用protocol/retrieval/NewMiner.go的NewMiner函数,生成一个检索矿工,并为设置全节点对象的RetrievalMiner属性。这个函数首先生成一个检索矿工,然后调用全节点对象的libp2pHost对象的SetStreamHandler方法,设置/fil/retrieval/free/0.0.0协议的处理器为检索矿工的handleRetrievePieceForFree方法,最后返回检索矿工。
调用porcelain.API对象的PubSubSubscribe方法,订阅/fil/blocks/devnet-3主题的区块通知,并设置为全节点的BlockSub属性。?
调用porcelain.API对象的PubSubSubscribe方法,订阅/fil/msgs/devnet-3主题的消息通知,并设置为全节点的MessageSub属性。
启动一个协程,在协程中调用全节点的handleSubscription方法,处理区块通知。这个方法主体是一个无限循环。它从参数指定的主题中读取主题,并调用参数指定的方法进行处理。区块通知订阅的是/fil/blocks/devnet-3,它的处理方法是全节点的processBlock方法。
启动一个协程,在协程中调用全节点的handleSubscription方法,处理消息通知。消息通知订阅的是/fil/msgs/devnet-3,它的处理方法是全节点的processMessage方法。这个方法把收到的消息进行反序列化,然后调用core.Inbox对象的Add方法,把消息对象保存在core.MessagePool对象中。
调用chain.Store对象的HeadEvents方法,使用其返回的发布/订阅对象的Sub方法,订阅新区块头部主题new-head。
调用porcelain.API对象的ChainHead方法,返回处理区块链头部的函数,在一个协程中调用全节点的handleNewHeaviestTipSet方法,处理区块链头部消息。
非离线模式下,启动net.Bootstrapper引导对象。引导对象会连接到所有的引导节点,并在连接成功后,调用protocol.hello.helloNotify对象的Connected方法,从而向远程节点发送自身的顶层区块信息,而远程节点也会向我们发送它的顶层区块信息,从而开启区块同步过程。
设置心跳服务。
生成命令行环境commands.Env对象。
生成服务器配置变量
生成GoServeMux处理器对象,设置它处理/debug/pprof/请求的对象为Go自身的DefaultServeMux;处理/api/请求的go-ipfs-cmds类库的handler对象。handler对象持有上面生成的环境变量、服务器配置变量等。
创建Http服务器。
在一个单独线程中启动Http服务器。
来源:Medium?作者:StephenPerrenod翻译:头等仓_Mark“在加密货币500强的竞赛中,可以查看使用工作量证明的开采量最高的代币.
1900/1/1 0:00:00News.Bitcoin.com已经开始定期汇总世界各地的加密货币监管动态。在第一期中,我们涵盖了美国六大监管机构及印度对最高法院听证会和加密法案的决定、还将介绍中国重新整顿行动和新加坡的衍生品.
1900/1/1 0:00:00迅雷股价暴涨170%、超百只个股集体涨停、入场资金多达数百亿元......朋友圈被区块链刷屏,关于区块链的投资课堂如雨后春笋般出现。不得不说,过去一段时间,整个A股最热的概念之一就是“区块链”.
1900/1/1 0:00:00来源:小葱区块链当地时间周二,芝商所宣布将于2020年1月13日推出比特币期权。据介绍,CME推行比特币期权是为了帮助机构与专业交易者管理比特币现货风险敞口,并在受监管的交易环境下进行比特币期货.
1900/1/1 0:00:00本文来自?News.bitcoin.com,原文作者:JamieRedmanOdaily星球日报译者|Moni 2019年即将进入尾声,在即将过去的一年里.
1900/1/1 0:00:00前言:本文旗帜鲜明地认为对ASIC友好的算法才能让普通的矿机生产商参与进来,而抗ASIC的加密算法反而为普通矿机厂商设立了很高的门槛,导致大型厂商更有竞争优势,从而让挖矿走向中心化.
1900/1/1 0:00:00