如何理解区块链广播发现节点的节点和peers

公有链、联盟链、私有链及网络配置介绍
文章出于:
以太坊网络
去中心化共识的基础是参与节点的点对点网络,节点维护并保证区块链网络的安全。参见挖矿。
以太坊网络数据统计
EthStats.net是以太坊网络实时数据的仪表板,这个仪表板展示重要信息,诸如现在的区块,散表难度,gas价格和gas花费等。页面上显示的节点只是精选了网络上的实际节点。任何人都可以在EthStats仪表板上添加他们的节点。Github上的Eth-Netstats README描述了如何连接。
<展示了节点数的当前和历史数据以及以太坊主网络和Morden测试网络上的其他信息。
当前实时网络上客户端实现分配 – EtherChain上的实时数据。
公有链、私有链和联盟链
当今大多数以太坊项目都依靠以太坊作为公有链,公有链可以访问到更多用户,网络节点,货币和市场。然而通常有理由更偏好私有链或联盟链(在一群值得信任的参与者中)。例如,银行领域的很多公司都希望以太坊作为他们私有链的平台。
以下是博客发文《关于公有链和私有链》的摘录,它解释了三种区块链在许可方面的区别:
公有链:世界上所有人都可以阅读和发送交易。如果他们合法都有希望看到自己被包括在内。世界上任何人都能参与到共识形成过程——决定在链条上添加什么区块以及现状是怎样的。作为中心化或准中心化信任的替代品,公有链受加密经济的保护,加密经济是经济激励和加密图形验证的结合,用类似工作量证明或权益证明的机制,遵循的总原则是人们影响共识形成的程度和他们能够影响的经济资源数量成正比。这类区块链通常被认为是&完全去中心化&。
联盟链:共识形成过程由预先选择的一系列的节点所掌控,例如,设想一个有15个金融机构的团体,每个机构都操作一个节点,为了使区块生效,其中的10个必须签署那个区块。阅读区块链的权利可能是公开的,或仅限于参与者,也有混合的路径,比如区块的根散表和应用程序编程接口一起公开,使公共成员可以进行一定量的查询,重获一部分区块链状态的加密图形证明。这类区块链被认为是&部分去中心化&。
私人区块链:书写许可对一个组织保持中心化。阅读许可可能是公开的或者限制在任意程度。应用很可能包含对单个公司内部的数据库管理,审查等,因此公共的可读性在很多情况下根本不必要,但在另一些情况下人们又想要公共可读性。
私有链/联盟链可能和公有链毫无联系,他们仍然通过投资以太坊软件开发,对以太坊整体生态系统有利。经过一段时间,这会转变成软件改善,知识共享和工作机会。
Geth会持续尝试在网络上连接到其他节点,直到有了端点为止。如果你在路由器上有可用的UPnP或者在面向因特网的服务器上运行以太坊,它也会接受其他节点的连接。
Geth通过发现协议找到对等端。在发现协议中,节点互相闲聊发现网络上的其他节点。最开始,geth会使用一系列辅助程序节点,这些辅助程序节点的端点记录在源代码中。
检查连接和ENODE身份
要检查客户端在交互控制台上连接了多少对等端点,net模块有两个属性可以提供信息,告诉你对等端点的数量以及你是否在监听的节点。
& net.listening
& net.peerCount
了解更多关于连接对等端点的信息,比如IP地址、端口号和支持协议,用管理员对象的peers()功能。admin.peers()会返回到现在已连接的对等端点列表。
& admin.peers
ID: 'a4de274d3a159e10c2c9a68cb84c9ec52e72ad732eb0b2b1a93cdbe734ed434a085d6d4acdc312db671b',
Name: 'Geth/v0.9.14/linux/go1.4.2',
Caps: 'eth/60',
RemoteAddress: '5.9.150.40:30301',
LocalAddress: '192.168.0.28:39219'
ID: 'a979fbd6db44ffaaceef29b69ad0dce72a4d8db5ebbbec779fbcb0cb6d3331163c',
Name: 'Geth/v0.9.15/linux/go1.4.2',
Caps: 'eth/60',
RemoteAddress: '52.16.188.185:30303',
LocalAddress: '192.168.0.28:50995'
ID: 'f6ba1f1d6ccf5baa6c2c8bc2bd009ca52fb8edbbc991eba36376beaee9d45f16d5dcbf2ed0bcffcf7a172',
Name: 'pyethapp_dd52/v0.9.13/linux2/py2.7.9',
Caps: 'eth/60, p2p/3',
RemoteAddress: '144.76.62.101:30303',
LocalAddress: '192.168.0.28:40454'
ID: 'fcfdea8fa7414a5def7bbe296f5e4a54e8b995de102e0ceae2e826f293c481bd207ba8ecba66fbaf6416c0',
Name: '++eth/Zeppelin/Rascal/v0.9.14/Release/Darwin/clang/int',
Caps: 'eth/60, shh/2',
RemoteAddress: '129.16.191.64:30303',
LocalAddress: '192.168.0.28:39705'
要检查geth使用的端口,发现你自己的enode URI 执行:
& admin.nodeInfo
Name: 'Geth/v0.9.14/darwin/go1.4.2',
NodeUrl: 'enode://aa75a34f2dbd2f8db219ad77f8155abf1a287ce2ba60fc0cf14915eabfdacf914a92b27a0d049dbf4c17694@[::]:30303',
NodeID: 'aa75a34f2dbd2f8db219ad77f8155abf1a287ce2ba60fc0cf14915eabfdacf914a92b27a0d049dbf4c17694',
DiscPort: 30303,
TCPPort: 30303,
ListenAddr: '[::]:30303'
更快下载区块链
启动以太坊客户端时,会自动下载以太坊区块链。用于下载以太坊区块链的时间会根据客户端、客户端设置、连接速度和可用的端点数量变化。下面是更快获取以太坊区块链的一些选项。
如果你在用geth客户端,你可以做些什么来加速下载以太坊区块的时间。如果你用—fast标志来执行以太坊快速同步,不会保留过去的交易数据。
注意:你不能在执行所有或者部分正常的同步操作之后再使用这个标志,也就是说在用这个指令之前,不能下载以太坊区块链的任何部分。查看这个Ethereum Stack.Exchange answer了解更多。
下面是想要更快同步客户端时使用的一些标志。
这个标志使通过状态下载而不是下载整个区块数据来实现快速同步成为可能。这样也能大幅减少区块链尺寸。注意:—fast只在从头开始同步区块链,并且是出于安全原因第一次下载区块链时,才会运行。查看Reddit发文了解更多。
cache=1024
分配到内部缓存的千兆内存(最少 16MB / 数据库)。默认是16MB,所以根据你电脑内存多少,增加到256, 512, 1024 (1GB)或者2048 (2GB)会带来不同。
jitvm 这个标志可以激活JIT VM。
完整的控制台命令示例:
geth --fast --cache=1024 --jitvm console
了解更多关于快速同步和区块链下载次数的讨论,查看这篇Reddit发文。
导出/导入区块链
如果你已经同步了整个以太坊节点,可以从完全同步的节点中导出区块链数据并将其导入新节点。你可以在geth中用geth export filename指令导出所有节点,并用geth import filename将区块链导入节点,来实现这一目的。
静态节点,信任节点和启动节点
Geth支持一个叫静态节点的特征,如果你有特定的端点,你会一直想与静态节点连接。如果断开连接,静态节点会再次连接。你可以配置永久性静态节点,方法是将如下所说的放进/static-nodes.json(这应该是和chaindata以及keystone在同一个文件夹)
"enode://fcfdea8fa7414a5def7bbe296f5e4a54e8b995de102e0ceae2e826f293c481bd207ba8ecba66fbaf.4.2.1:30303",
"enode://pubkey@ip:port"
你也可以在运行期间通过Javascript使用admin.addPeer()加入静态节点。
& admin.addPeer("enode://fcfdea8fa7414a5def7bbe296f5e4a54e8b995de102e0ceae
连接的常见问题
有时候可能无法连接,最常见的原因有:
本地时间不正确。要参与到以太坊网络中,需要精确的时钟。检查OS如何同步时钟(例如sudo ntpdate -s time.nist.gov),即便只快了12秒也有可能导致0端点。
有的防火墙配置可能会阻止UDP流通。可以用静态节点功能或者控制台上的admin.addPeer() 来手动配置连接。
不使用发现协议来启动geth,你可以用—nodiscover参数。你只会在运行测试节点或有固定节点的实验测试网络时才想要这样做。区块链在物联网中的应用
区块链在物联网中的应用
今天的演讲主要包括三个部分:第一部分是物联网的行业痛点和区块链带来的优势,第二部分是区块链+物联网的产业现状和应用场景,第三部分是区块链+物联网的挑战和可新标准的需求。物联网在长期发展演进过程中,遇到了以下5个行业痛点:设备安全、个人隐私、架构僵化、通信兼容和多主体协同5大痛点。在设备安全方面,Mirai创造的僵尸物联网(Botnets of Things)被麻省理工科技评论评为2017年的十大突破性技术,据统计,Mirai僵尸网络已累计感染超过200万台摄像机等IoT设备,由其发起的DDoS攻击,让美国域名解析服务提供商Dyn瘫痪,Twitter、Paypal等多个人气网站当时无法访问。后续,又有奴役物联网设备、让其比特币挖矿的僵尸网络,还有规模更大、更为活跃的http81僵尸网络等。在个人隐私方面,主要是中心化的管理架构无法自证清白,个人隐私数据被泄露的相关时间时有发生。就最近而言,人民网报道的,成都266个摄像头被网络直播就是一个案例。在架构僵化方面,目前的物联网数据流都汇总到单一的中心控制系统,随着低功耗广域技术(LPWA)的持续演进,可以预见的是,未来物联网设备将呈几何级数增长,中心化服务成本难以负担。据IBM预测,2020年万物互联的设备将超过250亿个。在通信兼容方面,全球物联网平台缺少统一的语言,这很容易造成多个物联网设备彼此之间通信受到阻碍,并产生多个竞争性的标准和平台。在多主体协同方面,目前,很多物联网都是运营商、企业内部的自组织网络。涉及到跨多个运营商、多个对等主体之间的协作时,建立信用的成本很高。区块链凭借主体对等、公开透明、安全通信、难以篡改和多方共识等特性,对物联网将产生重要的影响:多中心、弱中心化的特质将降低中心化架构的高额运维成本,信息加密、安全通信的特质将有助于保护隐私,身份权限管理和多方共识有助于识别非法节点,及时阻止恶意节点的接入和作恶,依托链式的结构有助于构建可证可溯的电子证据存证,分布式架构和主体对等的特点有助于打破物联网现存的多个信息孤岛桎梏,促进信息的横向流动和多方协作。其次,我们介绍一下,区块链+物联网的产业现状和相关的应用场景。产业现状一:物联网龙头纷纷开始布局区块链。根据Forrester Wave:物联网软件平台(2016年第4季度)的报告显示, IBM、PTC、GE和微软已成为占据物联网平台市场的主导企业。SAP、AWS、Cisco、LogMeln、Exosite、Ayla Networks和Zebra Technologies名列前11名。对于排名靠前的物联网平台龙头企业,除了美国参数技术公司(PTC)没有实质披露区块链相关项目以外(该公司很多区块链相关的文章),IBM、微软、亚马逊和SAP都在各自的云平台上提供区块链服务(Blockchain-as-a-Service),为未来海量的物联网设备接入提供弹性资源池,做了超前布局。通用电气GE和思科更多地是关注设备的标识和存证问题。探讨区块链+物联网的进展,要跟垂直的行业结合才有针对性,我们以能源物联网为例,传统公司和区块链初创公司正双向发力,不断促进区块链在行业里的广泛普及和加速融合。从传统电力公司的角度看,主要是通过与初创公司合作、成立子公司、甚至买下初创公司等方式,投资不同的试点项目,打造分布式能源系统和点对点的能源交易平台。这里包括瑞典国营电力公司VattenFall(瀑布电力)投资了荷兰阿姆斯特丹的初创公司(PowerPeers),构建让消费者自由选择电力渠道的能源共享平台,也有德国的莱茵公司(RWE)和初创公司Slock.it合作,推出的BlockCharge电动车充电项目。莱茵公司RWE成立子公司Innogy SE,推出了连接电动汽车车主、公共和私有充电站的一个区块链交易平台Share&Charge。从初创公司看,初创公司主要从分布式能源系统、新型交易模式、认证和交易市场等不同角度切入区块链领域,开始初步涉及相关的物联网硬件制造,例如Slock.it公司推出的Smart Plug充电器适配装置,不断丰富区块链+的产业生态。产业现状三是,垂直行业的生态格局已初步具有雏形。根据咨询公司Indigo的报告,还是以电力行业的区块链+物联网应用举例,从终端支付(加密数字货币)、能源交易市场、技术支撑+行业组织、智能家居点对点交易、打造智慧城市等方面已形成良好生态格局。对于我们国家而言,万向要在浙江打造基于区块链的、聚合能源、电动车、物联网、金融科技的聚能城,量子链也即将推出物联网的区块链项目等。产业现状四是,区块链+物联网的国际标准先行探索。2017年3月,中国联通联合众多公司和研究机构在ITU-T SG20成立了全球首个物联网区块链(BOT,Blockchain of Things)标准项目,定义了去中心化的可信物联网服务平台框架。我院在ITU-T的SG 16工作组也完成了区块链的相关立项。现在我们来介绍一下区块链+物联网的应用场景。由于区块链技术并未成熟定型,很多区块链和物联网结合的案例都是在PoC(概念验证)阶段,因此,今天的一些分享希望能给大家提供更多创新的灵感。在第一个应用场景中,传统的供应链运输需要经过多个主体,例如发货人、承运人、货代、船代、堆场、船公司、陆运(集卡)公司,还有做舱单抵押融资的银行等业务角色。这些主体之间的信息化系统很多是彼此独立,互不相通的。一方面,存在数据做伪造假的问题,另一方面,因为数据的不互通,出现状况的时候,应急处置没法及时响应在这个应用场景中,在供应链上的各个主体部署区块链节点,通过实时(例如船舶靠岸时)和离线(例如船舶运行在远海)等方式,将传感器收集的数据写入区块链,成为无法篡改的电子证据,可以提升各方主体造假抵赖的成本,更进一步地厘清各方的责任边界,同时还能通过区块链链式的结构,追本溯源,及时了解物流的最新进展,根据实时搜集的数据,采取必要的反应措施(例如,冷链运输中,超过0℃的货舱会被立即检查故障的来源),增强多方协作的可能。共享经济可以认为是平台经济的一种衍生。一方面是,平台具有依赖性和兴趣导向性,摩拜和OFO做单车共享,但并没有做摩托车的共享。另一方面,平台也会收取相应的手续费,例如滴滴打车司机要将打车费用的20%上交,作为平台提成。初创公司Slock.it和OpenBazaar等主要是希望构建一个普适的共享平台,依托去中介化的区块链技术,让供需双方点对点地进行交易,加速各类闲置商品的直接共享,并节省第三方的平台费用。在这个案例中,首先依托区块链网关,构建整个区块链网络。资产拥有者基于智能合约,通过设置租金、押金和相关规则,完成各类锁与资产的绑定。最终用户通过APP,支付给资产所有者相应的租金和押金,获得打开锁的控制权限(密钥),进而获取资产的使用权。在使用结束后,归还物品并拿回押金。这里有一个优势是,精准计费,可以按照智能合约上的计费标准,实时精准地付费,而不是像目前共享单车的粗犷式收费(按半小时、一小时收费)。虽然节省了平台手续费(20%),但是,也引发了很多思考,例如没上保险,出了事故如何解决;客户租车开了200公里,直接锁车结账走人了,谁将车开回来等,在实际应用中,应该会遇到很多问题。在应用场景三中,主要是传统输电的线路损耗率达到5%,住户建立的微电网中盈余能源无法存储,也不能共享给有能源需求的其他住户。纽约初创LO3 Energy和ConsenSys合作,由LO3 Energy负责能源相关的控制,ConsenSys提供区块链底层技术,在纽约布鲁克林区实现了一个点对点交易、自动化执行、无第三方中介的能源交易平台,实现了10个住户之间的能源交易和共享。主要实现方式是,在每家住户门口安装智能电表,智能电表安装区块链软件,构成一个区块链网络。用户通过手机APP在自家智能电表区块链节点上发布相应智能合约,基于合约规则,通过西门子提供的电网设备控制相应的链路连接,实现能源交易和能源供给。对于我国来说,也有一家点对点能源交易的初创企业,Energo。主要是通过将各家住户的可再生能源存储到分布式储能设备中,通过代币的形式评估能源的占有量和消耗量,基于智能合约设置能源交易规则和微电网切换主电网的策略,实现无中介的点对点能源交易平台。在第四个应用场景中,主要面临的是多家充电公司支付协议复杂、支付方式不统一、充电桩相对稀缺、充电费用计量不精准等行业痛点,由德国莱茵公司和Slock.it合作,推出的基于区块链的电动汽车点对点充电项目。通过在各个充电桩里安装树莓派等简易型Linux系统装置,基于区块链将多家充电桩的所属公司和拥有充电桩的个人进行串联,使用适配各家接口的Smart Plug对电动汽车进行充电。使用流程为:(以Innogy的软件举例)首先,在智能手机上安装Share&Charge APP。在APP上注册你的电动汽车,并对数字钱包进行充值。需要充电时,从APP中找到附近可用的充电站,按照智能合约中的价格付款给充电站主人。APP将与充电桩中的区块链节点进行通信,后者执行电动车充电的指令。第五个应用场景主要是针对未来无人机和机器人的快速发展,机器与机器之间的通信必须要从两个方面去考量:一方面,每个无人机都内置了硬件密钥。私钥衍生的身份ID增强了身份鉴权,基于数字签名的通信确保安全交互,阻止伪造信息的扩散和非法设备的接入。另一方面,基于区块链的共识机制,未来区块链与人工智能的结合点——群体智能,充满了想象空间,MIT实验室已经在这个交叉领域展开了深入研究。接着,我们介绍一下区块链+物联网的应用挑战和对可信标准的需求。区块链+物联网会遇到以下四个方面的挑战:在资源消耗方面,IoT设备普遍存在计算能力低、联网能力弱、电池续航短等问题。比特币的工作量证明机制(PoW)对资源消耗太大,显然不然适用于部署在物联网节点中,可能部署在物联网网关等服务器里。其次,以太坊等区块链2.0技术也是PoW+PoS,正逐步切换到PoS。分布式架构需要共识机制来确保数据的最终一致性,然而,相对中心化架构来说,对资源的消耗是不容忽视的。在数据膨胀方面,区块链是一个只能附加、不能删除的一种数据存储技术。随着区块链的不断增长,IoT设备是否有足够存储空间?例如,比特币运行至今,需要100G物理存储空间。在性能瓶颈方面,传统比特币的交易是7笔/秒,再加上共识确认,需要约1个小时才写入区块链,这种时延引起的反馈时延、报警时延,在时延敏感的工业互联网上不可行。在分区容忍方面,工业物联网强调节点“一直在线”,但是,普通的物联网节点失效、频繁加入退出网络是司空见惯的事情,容易产生消耗大量网络带宽的网络震荡,甚至出现“网络割裂”的现象。从改进方面,可以从两个方面去衡量。从区块链的角度来看,(1)对于资源消耗,可以不使用基于挖矿的、对资源消耗大的共识机制,使用投票的共识机制(例如PBFT等),减少资源消耗的通知,还能有效提升交易速度,降低交易时延。当然,在节点的扩展性方面,会有一定损耗,这个需要一个面向业务应用的权衡。(2)对于数据膨胀,可以使用简单支付交易方式(SPV),通过默克尔树对交易记录进行压缩。在系统架构上,支持重型节点和轻型节点。重型节点存储区块链的全量数据,轻型节点只存储默克尔树根节点的256哈希值,只做校验工作。(3)对于性能瓶颈,已经有很多面向物联网的区块链软件平台做了改进。例如,IOTA就提出不使用链式结构,采用有向非循环图(DAG)的数据结构,一方面提升了交易性能,另一方面,也具有抗量子攻击的特性。Lisk采用采用主链-侧链等跨链技术,进行划区划片管理,也在性能方面取得了不少突破。(4)对于分区容忍,针对可能存在的网络割裂,可以选择支持链上链下交易,尤其是离线的交易,并在系统设计时支持多个CPS集群。从物联网的角度来看,(1)对于资源消耗,随着eMTC、NB-IoT、LoRA等低功耗广域网(LPWA)技术的发展,传输质量、传输距离、功耗、蓄电量的问题将得以逐步解决。(2)对于数据膨胀,根据摩尔定律和超摩尔定律,存储成本下降,物联网存储能力持续上升。(3)对于性能瓶颈,随着MEMS传感器、SiP封装工艺等新技术、新工艺、新架构的不断成熟、成本降低,小体积、低功率的传感节点有望广泛应用。区块链以算法和软件来承担信任基础。但是,刚刚我们提到,有的区块链软件已经不使用“链式结构”了。区块链,顾名思义,区块+链,不用链的结构了,对于最终用户,会有些云里雾里。此外,还存在多链协同、跨链整合、链上链下、分区划片、共识切换等多方面的改进,区块链技术正处于待成熟、未定型的阶段。那么,最终用户如何相信企业的信息披露,选择合适的区块链产品呢?这就需要可信的规则来规范,从用户的角度、以业务为导向,围绕智能合约是否有效执行、共识机制是否保证数据最终一致、私钥存储是否安全、权限管理是否分级分类、企业信息披露是否准确等多个方面,提出标准规范,增强区块链的可信程度, 给区块链的信任增加砝码。数据中心联盟于日成立可信区块链工作组,由30多家单位组成,包括中国信通院、中科院计算所、中国联通、中国电信、腾讯、华为、中兴通讯、金证股份、浪潮、世纪互联、飞天诚信、曙光信息、IBM、思科、太一云、火币网、比特大陆、布比、优刻得、中联润通、万国数据、深信服等单位。可信区块链工作组主要致力于标准的制定和输出,目前,已经在国际标准中的ITU-T SG16完成立项,行业标准中的CCSA TC1完成立项,促进标准的相关落地,包括可信区块链的标准预测试、建立区块链开放实验室和测试平台,推进区块链和物联网、云计算和大数据等前言技术的交叉创新,加速区块链在金融、能源、供应链等各行各业的广泛普及和融合创新。欢迎大家关注可信区块链的最新进展!
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 跟着我感受文字
作者最新文章后使用快捷导航没有帐号?
如何使用星际文件传输网络(IPFS)搭建区块链服务(一)
TS9BUJ[G5B0L$`L(RU((X.png (49.5 KB, 下载次数: 7)
20:59 上传
&#9642;& &&&分布式超媒体分发协议-IPFS&&&#9642;& & 1. 简介&#9642;& & 2.使用IPFS&#9642;& & 2.1 安装 &#9642;& & 2.2 初始化&#9642;& & 2.3 加入IPFS网络&#9642;& & 2.4 获取内容&#9642;& & 2.5 发布内容&#9642;& & 2.6 缓存内容到本地 &#9642;& & 2.7 IPNS域名访问&#9642;& & 2.8 更多&#9642;& &&&3. IPFS是如何工作&#9642;& & 3.1 身份验证&#9642;& & 3.2 网络&#9642;& & 3.3 路由&#9642;& & 3.4 块交换&#9642;& & 3.4.1 信用体系&#9642;& & 3.4.2 策略&#9642;& & 3.4.3 账单&#9642;& & 3.4.4 接口规范&#9642;& & 3.5 Merkle DAG&#9642;& & 3.6 文件系统&#9642;& & 3.6.1 blob&#9642;& & 3.6.2 list&#9642;& & 3.6.3 tree&#9642;& & 3.6.4 commit&#9642;& & 3.7 命名和可变状态&#9642;& & 3.7.1 自验证命名&#9642;& & 3.7.2 更加友好的命名方式&#9642;& &&&4. 基于IPFS的应用&#9642;& &&&5. IPFS与区块链技术的结合
1. 简介IPFS(InterPlanetaryFile System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。IPFS提供了一个友好的WEB访问接口,用户可以通过本机的 IPFS-HTTP 网关(http://localhost:5001/ipfs/) 或者公共的网关() 获取IPFS网络中的内容,也可以通过特定的浏览器或者插件通过ipfs:/or fs:/的方式直接获取内容。也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
2. 使用IPFS2.1 安装&#8226;$ go get -u -/ipfs/go-ipfs&#8226;$ cd $GOPATH//ipfs/go-ipfs&#8226;$ make install2.2 初始化&#8226;$ ipfs init2.3 加入IPFS网络&#8226;$ ipfs daemon2.4 获取内容&#8226; $ipfs cat/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/r& &eadme&&&#8226;http://localhost:5001/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemTYgPpHdWEz79ojWnPbdG2.5 发布内容&#8226;$ ipfs add hello.jpg&#8226;& &IPFS文件还可以抽象成特殊的IPFS目录,从而标注一个可读的文件名(透明的映射到IPFS哈希),在访问的时候会像HTTP一样获取一个目录索引。在IPFS上建立网站的流程和过去一样,而且把网站加入到IPFS节点的指令只需要一条指令:ipfs add -r yoursitedirectory。2.6 缓存内容到本地 &#8226;$ ipfs pin add-r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8&#8226;& & 缓存到本地的内容不仅可以自己使用,还能为其他节点提供资源2.7 IPNS域名访问&#8226;& & IPFS哈希只能用来表示不可变数据,因为一旦数据改变,哈希值也会改变。从某种意义上来说,这是保持数据持续性的好的设计。但是我们& && && &&&也需要一种方法来标记最新更新网站的哈希,这个方法我们称作IPNS。&#8226;& & IPNS的原理是从域名的TXT记录里获取IPFS哈希地址,然后根据这个哈希地址从IPFS网络中获取数据。比如& && && && & &#8226;& & 接下来IPFS还打算支持Namecoin。Namecoin从理论上完全实现了分布式Web的去中心化,整体的运行中不再需要中心化的授权。支持了Namecoin的IPFS不再需要ICANN、中心服务器,不受政治干涉,也无需授权证书。2.8 更多&#8226;& & 更多信息请浏览IPFS的API文档&#8226;& & 如果你想机遇IPFS做一些开发,这里有各种语言实现的API调用接口3. IPFS是如何工作的3.1 身份验证和比特币相似,每一个节点都会由NodeId(公钥的哈希值)来标识,节点存储着公钥和加密过的私钥。
首次连接时,节点间交换公钥,并检查 hash(other.PublicKey)是否等于other.NodeId。如果没有,则终止连接。type NodeId Multihashtype Multihash []byte&&//self-describingcryptographic hash digest
type PublicKey []bytetype PrivateKey []byte// self-describing keys
type Node struct {& & NodeId NodeID PubKey PublicKey& & PriKey PrivateKey}
3.2 网络每个节点与网络中的相连的其他数百个节点进行定期通信。
IPFS的网络传输具有如下特性:&#8226; 传输: IPFS可以使用任何传输协议,如 WebRTC 和 uTP。&#8226; 可靠性:如果底层网络不能保证可靠性,IPFS可以使用 uTP 或 SCTP 来保& & 证&#8226; 连接:IPFS还使用 ICE NAT 穿越技术&#8226;&&完整性:使用哈希校验和检查消息的完整性。&#8226;&&真实性:可以使用发送者的公钥和HMAC来检查消息的真实性。同时IPFS不仅仅是通过IP来连接节点,还支持很多其他协议。IPFS内部使用& &不同的地址格式来选择不同的网络协议。 # an SCTP/IPv4 connection/ip4/10.20.30.40/sctp/1234/
# an SCTP/IPv4 connectionproxied over TCP/IPv4/ip4/5.6.7.8/tcp/5678/ip4/1.2.3.4/sctp/1234/
3.3 路由IPFS通过通过基于 S/Kademlia 和 Coral 的 DSHT 来寻找匹配的节点和特定节点的地址信息,IPFS的对象和使用模式的大小类似于 Coral 和 Mainline,因此 IPFS DHT 根据其大小对存储的值进行区分。小值(等于或小于1KB)直接存储在DHT上。对于更大的值,DHT存储拥有这些块的节点NodeId。
DSHT的接口定义如下:typeIPFSRouting interface {FindPeer(node NodeId)// 得到指定节点的地址
SetValue(key[]bytes, value []bytes)// 小值可直接存储在DHT上
GetValue(key[]bytes)// 从DHT中获取值
ProvideValue(key Multihash)// 宣布此节点可以提供一个大值
FindValuePeers(keyMultihash, min int)// 得到拥有特定大值的所以节点}3.4 块交换在IPFS中,通过使用 BitSwap 协议与其他节点进行块(block)交换来实现数据分发。
BitSwap 维持着两个列表,想要获得的块和已保存的块。但与 BitTorrent 不同的是,BitSwap 不限于一个torrent中的块。BitSwap 节点可以从整个IPFS网络获取所需的块,而不管这些块属于哪些文件,这大大提高了下载效率。
同时,网络中存在一些激励节点会主动缓存和传播稀有的文件片段。3.4.1 信用体系我们希望所有的节点都乐于分享他们拥有的块,但某些自私节点只从P2P网络中获取块,而从不做种。
IPFS使用了一套简单的信用系统来解决这个问题。&#8226; 从其他节点获取块会产生“债务”,向其他节点发送块可以偿还“债务”&#8226; 每个节点都记录与相连节点间的“债务”情况&#8226;欠债越多的节点其优先级越低,如果一个节点只获取而从不奉献将会很快被& & 其他节点进行忽略超时操作。3.4.2 策略BitSwap 采用的不同策略对整体的演变表现有着非常不同的影响。
在 BitTorrent 中,虽然规定了标准策略,但是也已经实现了许多其他方法,从 BitTyrant (尽可能分享)到BitThief(利用漏洞并且永远不会分享),到 PropShare (按比例分享)。
我们需要的策略的目标应该是:1.& &最大化节点的交易性能和整体交换效率2.& &防止“吃白食”的情况发生3.& &有效抵抗其他未知策略4.& &对受信任的节点限制宽松一种在实践中可行的策略是一个跟债务率挂钩的算法
节点的负债率 r = bytes_sent / (bytes_recv + 1)
发送率 P (send|r) = 1&#+exp(6&#8722;3r))
当节点的负债率超过已建立信用额度的两倍时,发送率迅速降低。3.4.3 账单BitSwap 节点维持与其他节点的传输计费账单,当节点间建立连接时,双方交换账单,如果账单不匹配,则清除已有账单,重新开始记账。当然,恶意节点可能会故意丢失账单,希望清除债务,其他节点可以将其视作不当行为,并拒绝。
账单的数据结构如下:type Ledger struct {owner& && &NodeIdpartner& & NodeIdbytes_sent intbytes_recv inttimestamp&&Timestamp}3.4.4 接口规范// Additionalstate kepttype BitSwap struct{ledgersmap[NodeId]Ledger// Ledgers knownto this node, inc inactive
active map[NodeId]Peer// currently openconnections to other nodes
need_list []Multihash// checksums ofblocks this node needs
have_list[]Multihash// checksums ofblocks this node has}
type Peer struct {nodeid NodeIdledger Ledger// Ledger between the node and this peer
last_seenTimestamp// timestamp oflast received message
want_list[]Multihash// checksums ofall blocks wanted by peer// includes blocks wanted by peer’s peers}
// Protocol interface:interface Peer {open (nodeid:NodeId, ledger :Ledger);send_want_list(want_list :WantList);send_block (block :Block) -& (complete :Bool);close (final :Bool);}3.5 Merkle DAGDHT 和 BitSwap 技术让 IPFS形成一个用于快速而强大的存储和分发块的 P2P 系统,。
在此之上,IPFS还构建了一种有向无环图 Merkle DAG,使用嵌入数据源中的目标哈希散列构建对象之间的链接。Merkle DAGs 为IPFS提供了许多有用的属性,包括:1.内容寻址:所有内容(包括链接)都由其多哈希校验和进行唯一标识2. 防篡改:所有内容都使用其校验和进行验证。如果数据被篡改或损坏,& && & 则IPFS会检测到该数据。3. 去冗余:所有内容完全相同的对象,只存储一次。这对索引对象特别有,& &&&比如git tree和commits,或者是公共部分的数据。IPFS对象的定义如下:type IPFSLink struct{Name string// name or aliasof this link
Hash Multihash// cryptographichash of target
Size int// total size oftarget}
type IPFSObject struct {links []IPFSLink// array of links
data []byte// opaque contentdata}Merkle DAG 是一种非常灵活的数据存储方式,唯一的要求是 a) 使用内容寻址 b) 使用上述编码格式。这使得我们可以用路径的方式访问对象, /ipfs/&hash-of-object&/&name-path-to-object&,如:/ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/test/foo.txt3.6 文件系统在 Merkle DAG 之上,IPFS还定义了一组对象用于对版本化文件系统进行建模。
这个对象模型类似于Git:1.block: 可变大小的数据块。2.list:块或其他列表的集合。3.tree:块、列表或其他树的集合。4.commit:树的版本历史中的快照。3.6.1blobblob 对象包含了可寻址的数据单元,表示一个文件。{“data”:”some data here”,// blobs 是没有 link 的}一个IPFS文件由 blobs 和 lists 构成3.6.2listlist 对象将很多去重的 blobs 连接到一起,包含了一组有序的 blob 或 list 对象。{& &”data”:[&blob&, &list&, &blob&],// 列表里的数据类型和links里面的一一对应
“links”: [{&hash&: &XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x&,&size&: 189458},{ &hash&:&XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5&,&size&:19441 },{ &hash&:&XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z&,&size&:5286 }// listshave no names in links}3.6.3 treetree 对象代表一个路径,内容包括 blob、list、tree、commit,同时标记了对象的名称。{“data”: [&blob&,&list&, &blob&],// trees have anarray of object types as data“links”:[{ &hash&:&XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x&,&name&:&less&, &size&:189458 },{ &hash&:&XLHBNmRQ5sJJrdMPuu48pzeyTtRo39tNDR5&,&name&:&script&, &size&:19441 },{ &hash&:&XLWVQDqxo9Km9zLyquoC9gAP8CL1gWnHZ7z&,&name&: &template&,&size&: 5286}// treesdo have names}3.6.4commitcommit 对象代表对象的历史快照。{ ”data”: {“type”:”tree”,“date”:” 12:44:06Z”,“message”:”This is a commit message.”},“links”: [{ &hash&:&XLa1qMBKiSEEDhojb9FFZ4tEvLf7FEQdhdU&,&name&:&parent&,&size&: 25309 },{ &hash&:&XLGw74KAy9junbh28x7ccWov9inu1Vo7pnX&,&name&:&object&, &size&:5198 },{ &hash&:&XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm&,&name&:&author&, &size&:109 }}3.7 命名和可变状态到目前为止,IPFS堆栈形成了构建内容寻址对象 DAG 的P2P交换。它可以用于发布和检索不可变的对象,甚至可以跟踪这些对象的版本历史。但是,仍缺少一个关键组件:可变命名。没有它,用户就得在IPFS系统外获取到新的内容地址了。3.7.1 自验证命名&&1.& &定义节点的NodeId为该节点公钥的哈希2.& &通过 /ipns/的方式可以访问该节点下的内容3.& &当其他节点从该节点获取文件时,可以验证其公钥和NodeId是否匹配
通过自验证命名,我们可以实现这样的访问效果
&&/ipns/&NodeId&/docs/test.md而不必用/ipfs/&test.md’s Hash&这样的方式3.7.2 更加友好的命名方式自验证命名虽然解决了一些问题,但对用户来说还不够友好, IPFS提供了如下解决方案:1. 节点链接通过执行 ipfs link //friends/bob /便可将 bob 节点链接到 alice 节点的 friends/bob 路径下,这样只需要知 道alice的地址就可以访问bob了2.&&域名访问IPNS可以从域名的TXT记录里获取IPFS哈希地址,然后根据这个哈希地址从IPFS网络中获取数据例如我们设置 ipfs.benet.ai 的TXT记录为”ipfs=XLF2ipQ4jD3U …”,访问 /ipns/ipfs.benet.ai 便相当于 ipns/XLF2ipQ4jD3U …3. Proquint可发音方案IPNS支持将哈希地址译成可发音的单词例如 /ipns/dahih-dolij-sozuk-vosah-luvar-fuluh将解析为 /ipns/KhAwNprxYVxKqpDZ
4. 短地址服务以shorten.er为例,用户可以获得一个指向特定地址的链接例如 /ipns/shorten.er/foobar将解析为 /ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm这时shorten.er就类似于我们今天使用的DNS服务器了。4. 基于IPFS的应用&#8226;& & ipfs.pics - 免费的永久图床,上传和分享你的图片。&#8226;& & OrbitChat - 基于IPFS的去中心化聊天室,用户可以自由创建和加入channel并参与讨论。&#8226;& & Neocities - 免费帮助人们创作和发布网页的组织,将用户上传的网页永久存储在IPFS网络中,即使Neocities关闭了,人们仍然可以在IPFS网络中浏览到这些创作。&#8226;& & AKASHA - 基于IPFS和以太坊的下一代社交博客平台。&#8226;& & git-ipfs-rehost - 将你的git仓库托管在IPFS网络上。&#8226;& & GlobalUpload - 文件传输服务&#8226;& & IPFSSEARCH - 搜索IPFS网络中的内容5. IPFS与区块链技术的结合IPFS弥补了现有区块链系统在文件存储方面的短板,将IPFS的永久文件存储和区块链的不可篡改、时间戳证明特性结合,非常适合应用于保护版权、身份证明、来源证明等方面。
同时用基于区块链的代币来激励IPFS节点存储数据也是最好的选择。
在去中心化的世界里,QTUM智能合约提供各种逻辑服务,IPFS提供文件资源,两者结合,共同构建去中心化的网络世界。原文出处:
width:100%">
表示不是专业人士没看懂,不过还是很赞。
width:100%">
width:100%">
谢谢分享 赞
width:100%">}

我要回帖

更多关于 区块链 只读节点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信