如何使用星际文件传输网络搭建区块链 共有链服务

用区块链实现物联网网络的去中心化_物联网新闻_新闻中心_RFID世界网
用区块链实现物联网网络的去中心化
作者:本站采编
来源:IoT先锋
摘要:试想当洗涤剂快用完时,洗衣机可以自动向京东下订单;联网的汽车,可以自动停靠到最近的停车位;生产机器的制造商知道您的机器何时需要订购零部件,而不用人为干涉。
关键词:[4篇]&&
  试想当洗涤剂快用完时,洗衣机可以自动向京东下订单;联网的汽车,可以自动停靠到最近的停车位;生产机器的制造商知道您的机器何时需要订购零部件,而不用人为干涉。
  所有这些情景——甚至更多——将由物联网实现。现在许多行业已经被大量联网设备颠覆了,越来越多的行业也会加入这场变革中。
  物联网与其他技术(如机器学习)相结合时会有更多令人兴奋的应用。但是当前遇到的主要障碍是设备与设备之间以及设备与设备所有者之间的互动。目前物联网通信的模式无法解决这些挑战时,技术公司和研究者希望通过区块链技术解决这些问题,区块链技术是著名的比特币的核心技术。
  中心化模式出现的问题
  当前物联网生态体系依赖的要么是中心化的代理通信模式,或者是服务器/用户端模式。所有的设备都是通过云服务器验证连接的,该云服务器具有强大的运行和存储能力。设备间的连接都会通过互联网实现,即使这只是在几米的范围内发生。
  虽然这样的模式已经连接计算机设备已有几十年了,并且仍然在支持小规模物联网网络,正如我们现在看到的那样,但是这满足不了日益增长的物联网生态体系的需求。
  当前的物联网解决方案是非常昂贵的,因为中心化云服务器、大型服务器和网络设备的基础设施和维护成本是非常高的,在物联网设备的数量增加到数百亿时,会产生大量的通信信息,这会极大的增加成本。
  即使克服了空前的经济和工程方面的挑战,云服务器仍然是一个瓶颈和故障点,这会影响整个网络。当人类健康和生命越来越依赖物联网时,这就显得尤为重要了。
  没有连接所有设备的单一平台。
  而且,设备间多元化的所有权和配套的云服务基础设施让机器对机器通信变得更加困难。没有连接所有设备的单一平台,也无法保证不同厂商提供的云服务是可以互通及相匹配的。
  去中心化物联网设备 
  物联网网络去中心化方案可以解决以上的许多问题。采用标准化点对点通信模式,处理设备间的大量交易信息,将会显著的降低安装维护大型中心化数据中心的成本,同时可以将计算和存储需求分散到组成物联网网络的各个设备中。这可以有效的阻止网络中的任何单一节点的失败,而导致整个网络崩溃的情况发生。
  可是,建立点对点通信本身会带来许多挑战,其中最主要的挑战就是安全问题。我们都知道,物联网安全不仅仅是保护敏感数据。提出的解决方案必须保护物联网中的隐私和安全,同时提供一些交易验证和达成共识的方法,防止电子欺骗和盗窃。
  区块链方案
  区块链为点对点通信平台问题提供了一个完美的解决方案。这是一种允许创建交易分布式数字账本的技术,其账本共享给网络中的所有节点,而不是存储在一个中央服务器中。用区块链注册的参与者可以记录交易。区块链技术用数字货币验证参与者的节点,同时安全的将交易加入到账本中。交易由其他参与到网络的节点验证确认,这样就不需要中央服务器了。
  分布式账本是防篡改的,不会被恶意犯罪分子所操控,因为分布式账本根部不存在任何单点定位,中间商攻击也不会出现,因为没有可以被截断的单线程通信。区块链可以真正实现可信任点对点的消息传送,并且已经通过数字货币如比特币证明了其在金融服务世界的价值,不用第三方经纪商就可以保证点对点支付服务。
  技术公司现在正考虑将区块链带到物联网领域。
  处理能力和能耗也是一个需要担心的问题。区块链交易加密和验证时计算密集型操作,需要极强的处理能力才能执行,这也是许多物联网设备所缺乏的。存储也有同样问题,因为账本记录的信息越来越多,网络节点中存储了过多的账本记录。
  Machina Research分析家Jeremy
Green解释说,由区块链驱动的自治物联网网络将会给制造商的商业模式带来颠覆,包括有持续收入来源的长期订阅关系,同时商业和经济模式要进行大刀阔斧的变革。
  现在说区块链是否是解决快速发展的物联网行业中出现的问题的解决方案还为时过早。现在区块链技术还不完善,尽管如此,物联网和区块链的结合是前途无量的,去中心化自治网络会对物联网的未来起决定性作用。
相关新闻:8-17-146-35-31
关键字搜索:技术文章:[0篇]&&成功应用:[0篇]&&解决方案:[0篇]&&
图片新闻:
最新发布产品今天小编要来放大招了,听过IPFS吗?(我知道你现在肯定跟小编一样正在打开百度......-_-)小编今天都帮你整理好了啊,干货!!就怕你不敢看!打开脑洞想象一下,如果Qtum跟IPFS结合将碰撞出什么火花呢?来,把目光转移过来:分布式超媒体分发协议-IPFS &。1. 简介。2. 使用IPFS?& &&2.1 安装&?&&& 2.2 初始化?&&& 2.3 加入IPFS网络?&&& 2.4 获取内容?&&& 2.5 发布内容? &&2.6 缓存内容到本地?&&& 2.7 IPNS域名访问?&&& 2.8 更多?&&& 3. IPFS是如何工作?&&& 3.1 身份验证?&&& 3.2 网络?&&& 3.3 路由&?&&& 3.4 块交换?&&& 3.4.1 信用体系?&&& 3.4.2 策略?&&& 3.4.3 账单?&&& 3.4.4 接口规范?&&& 3.5 Merkle DAG?&&& 3.6 文件系统?&&& 3.6.1 blob?&&& 3.6.2 list?&&& 3.6.3 tree?&&& 3.6.4 commit?&&& 3.7 命名和可变状态?&&& 3.7.1 自验证命名?&&& 3.7.2 更加友好的命名方式?&&& 4. 基于IPFS的应用?&&& 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/) 或者公共的网关(http://ipfs.io/) 获取IPFS网络中的内容,也可以通过特定的浏览器或者插件通过ipfs:/or fs:/的方式直接获取内容。也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。2. 使用IPFS2.1 安装?$ go get -u -/ipfs/go-ipfs?&$ cd $GOPATH//ipfs/go-ipfs?$ make install2.2 初始化?$ ipfs init2.3 加入IPFS网络?$ ipfs daemon2.4获取内容&?&$ipfscat/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme?http://localhost:5001/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG2.5 发布内容?$ ipfs add hello.jpg?&& IPFS文件还可以抽象成特殊的IPFS目录,从而标注一个可读的文件名(透明的映射到IPFS哈希),在访问的时候会像HTTP一样获取一个目录索引。在IPFS上建立网站的流程和过去一样,而且把网站加入到IPFS节点的指令只需要一条指令:ipfs add -r yoursitedirectory。2.6 缓存内容到本地?$ ipfs pin add-r & & & QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8?&&& 缓存到本地的内容不仅可以自己使用,还能为其他节点提供资源2.7 IPNS域名访问?&&& IPFS哈希只能用来表示不可变数据,因为一旦数据改变,哈希值也会改变。从某种意义上来说,这是保持数据持续性的好的设计。但是我们也需要一种方法来标记最新更新网站的哈希,这个方法我们称作IPNS。?&&& IPNS的原理是从域名的TXT记录里获取IPFS哈希地址,然后根据这个哈希地址从IPFS网络中获取数据。比如http://ipfs.io/ipns/ipfs.git.sexy/?&&& 接下来IPFS还打算支持Namecoin。Namecoin从理论上完全实现了分布式Web的去中心化,整体的运行中不再需要中心化的授权。支持了Namecoin的IPFS不再需要ICANN、中心服务器,不受政治干涉,也无需授权证书。2.8 更多?&&& 更多信息请浏览IPFS的API文档https://ipfs.io/docs/api/?&&& 如果你想机遇IPFS做一些开发,这里有各种语言实现的API调用接口3. IPFS是如何工作的3.1 身份验证和比特币相似,每一个节点都会由NodeId(公钥的哈希值)来标识,节点存储着公钥和加密过的私钥。首次连接时,节点间交换公钥,并检查 hash(other.PublicKey)是否等于other.NodeId。如果没有,则终止连接。type&NodeId Multihash?type&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的网络传输具有如下特性:? 传输: IPFS可以使用任何传输协议,如 WebRTC 和 uTP。?&可靠性:如果底层网络不能保证可靠性,IPFS可以使用 uTP 或 SCTP 来保证?&连接:IPFS还使用 ICE NAT 穿越技术? &完整性:使用哈希校验和检查消息的完整性。?&&真实性:可以使用发送者的公钥和HMAC来检查消息的真实性。同时IPFS不仅仅是通过IP来连接节点,还支持很多其他协议。IPFS内部使用 & 不同的地址格式来选择不同的网络议。#anSCTP /IPv4 connection/ip4/10.20.30.40/sctp/1234/# an SCTP/IPv4 connectionproxiedoverTCP/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使用了一套简单的信用系统来解决这个问题。&& ? 从其他节点获取块会产生“债务”,向其他节点发送块可以偿还“债务”&& ? 每个节点都记录与相连节点间的“债务”情况&&&?欠债越多的节点其优先级越低,如果一个节点只获取而从不奉献将会很快被 & &其他节点进行忽略超时操作。3.4.2 策略BitSwap 采用的不同策略对整体的演变表现有着非常不同的影响。 在 BitTorrent 中,虽然规定了标准策略,但是也已经实现了许多其他方法,从 BitTyrant (尽可能分享)到BitThief(利用漏洞并且永远不会分享),到 PropShare (按比例分享)。我们需要的策略的目标应该是:& 1.&& 最大化节点的交易性能和整体交换效率& 2.&& 防止“吃白食”的情况发生& 3.&& 有效抵抗其他未知策略& 4.&& 对受信任的节点限制宽松一种在实践中可行的策略是一个跟债务率挂钩的算法节点的负债率 r = bytes_sent / (bytes_recv + 1)发送率 P (send|r) = 1? 1/(1+exp(6?3r))当节点的负债率超过已建立信用额度的两倍时,发送率迅速降低。3.4.3 账单BitSwap 节点维持与其他节点的传输计费账单,当节点间建立连接时,双方交换账单,如果账单不匹配,则清除已有账单,重新开始记账。当然,恶意节点可能会故意丢失账单,希望清除债务,其他节点可以将其视作不当行为,并拒绝。账单的数据结构如下:type&Ledger&struct {&&& owner&&&& &NodeId& &&partner&&& NodeId&&& bytes_sent int&&& bytes_recv int&&& timestamp& Timestamp}3.4.4 接口规范// Additionalstate kepttype BitSwap struct{ledgersmap[NodeId]Ledger// Ledgers knownto this node, inc inactiveactive map[NodeId]Peer// currently openconnections to other nodesneed_list []Multihash// checksums ofblocks this node needshave_list[]Multihash// checksums ofblocks this node has}type Peer struct {nodeid NodeIdledger Ledger// Ledger between the node and this peerlast_seenTimestamp// timestamp oflast received messagewant_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 linkHash Multihash// cryptographichash of targetSize int// total size oftarget}type IPFSObject struct {links []IPFSLink// array of linksdata []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.3treetree 对象代表一个路径,内容包括 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的应用& ?&&& ipfs.pics - 免费的永久图床,上传和分享你的图片。& ?&&& OrbitChat - 基于IPFS的去中心化聊天室,用户可以自由创建和加入channel并参与讨论。& ?&&& Neocities - 免费帮助人们创作和发布网页的组织,将用户上传的网页永久存储在IPFS网络中,即使Neocities关闭了,人们仍然可以在IPFS网络中浏览到这些创作。& ?&&& AKASHA - 基于IPFS和以太坊的下一代社交博客平台。& ?&&& git-ipfs-rehost - 将你的git仓库托管在IPFS网络上。& ?&&& GlobalUpload - 文件传输服务& ?&&& IPFSSEARCH - 搜索IPFS网络中的内容5. IPFS与区块链技术的结合IPFS弥补了现有区块链系统在文件存储方面的短板,将IPFS的永久文件存储和区块链的不可篡改、时间戳证明特性结合,非常适合应用于保护版权、身份证明、来源证明等方面。同时用基于区块链的代币来激励IPFS节点存储数据也是最好的选择。在去中心化的世界里,QTUM智能合约提供各种逻辑服务,IPFS提供文件资源,两者结合,共同构建去中心化的网络世界。&
本文来源于微信公众号,如有侵权,请与我们联系。
转载请说明出处()。
微信扫一扫
分享文章到朋友圈24070人阅读
区块链(15)
& &&区块链开发(一)搭建基于以太坊的私有链环境
& & 通过本文所述方法和项目中的脚本,我们可以快速的搭建好自己的私有链进行区块链开发测试,本文基于以太坊技术进行搭建,分两个部分,一个是Ubuntu下搭建方法,另一个是Windwos下搭建方法,关于以太坊相关的基础知识,可以看我原先发表的一些文章,地址如下:& &&
一、&&&Ubuntu下安装Geth客户端
& & 之所以采用Ubuntu,是因为以太坊的官方对Ubuntu支持的很好,是在各个linux系统中安装最简单。
& & Geth官方安装指南:
& & /ethereum/go-ethereum/wiki/Building-Ethereum
& & 进入ubuntu命令行,执行如下命令
sudo apt-get update
sudo apt-get installsoftware-properties-common
sudo add-apt-repository -yppa:ethereum/ethereum
sudo add-apt-repository -yppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
& & 系统联网执行后,即完成了安装以太坊客户端,其中包括geth,bootnode, evm, disasm, rlpdump,ethtest
& & 此时如果输入Geth命令,会出现启动以太坊启动的画面
二、&&&&&&&安装Windows下Geth客户端
& & Windows必须64位系统,从官方网站下载编译好的win64客户端,解压缩即可运行,下载地址如下:
& &&/ethereum/go-ethereum/releases/
& & 下载后,只有一个Geth.exe的文件。
& & 安装图像化客户端Mist,依然是从官方地址下载编译好的客户端即可,下载地址:
& &&/ethereum/mist/releases/
& & 下载解压缩后,Ethereum-Wallet即为以太坊图形化界面。
三、&&&&&&&准备创世块文件
& & 配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通,此方法在windows和Ubuntu下通用。
& & 新建文件piccgenesis.json,输入如下内容并保存
&&& &nonce&:&0x0042&,
&&& &mixhash&:&0x0000&,
&&& &difficulty&: &0x4000&,
&&& &alloc&: {},
&&& &coinbase&:&0x0000&,
&&& &timestamp&: &0x00&,
&&& &parentHash&:&0x0000&,
&&& &extraData&: &PICC GenesisBlock&,
&&& &gasLimit&:&0xffffffff&
& & 解释一下各个参数的作用:
与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.
nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty
设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
矿工的账号,随便填
设置创世块的时间戳
parentHash
上一个区块的hash值,因为是创世块,所以这个值是0
附加信息,随便填,可以填你的个性信息
该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
四、&&&&&&&启动私有链节点
& & 启动Geth即可以启动以太坊的区块链,为了构建私有链 ,需要在Geth启动时加入一些参数,Geth参数含义如下:&
区块链的标示,随便填写,用于标示目前网络的名字
指定创世块文件的位置,并创建初始块
设置当前区块链网络数据存放的位置
网络监听端口
启动rpc通信,可以进行智能合约的部署和调试
设置允许连接的rpc的客户端,一般为db,eth,net,web3
设置当前区块链的网络ID,用于区分不同的网络,是一个数字
启动命令行模式,可以在Geth中执行命令
1、& 在Ubuntu启动区块链节点
& & 在Ubuntu下,首先切换到打算运行的目录,目录下应该有配置好的piccgenesis.json文件,执行如下命令
basepath=$(cd `dirname $0`; pwd)
获取当前的目录
geth&&--datadir &$basepath/chain& init piccgenesis.json&
创建数据存放地址并初始化创世块
geth --identity&PICCetherum& &--rpc& --rpccorsdomain &*& --datadir &$basepath/chain& --port &30303&& --rpcapi &db,eth,net,web3&--networkid 95518 console
& & 启动后界面如下,光标停留在最后的命令行上,可以执行以太坊命令。
I:43.680087 ethdb/database.go:82]Alloted 128MB cache and 1024 file handles to /home/lihe/桌面/chain/chaindata
I:43.726008ethdb/database.go:169] closed db:/home/lihe/桌面/chain/chaindata
I:43.728913 ethdb/database.go:82]Alloted 128MB cache and 1024 file handles to /home/lihe/桌面/chain/chaindata
I:43.908795 ethdb/database.go:82]Alloted 16MB cache and 16 file handles to /home/lihe/桌面/chain/dapp
I:43.969506 core/genesis.go:92]Genesis block already in chain. Writing canonical number
I:43.980337 eth/backend.go:274]Successfully wrote custom genesis block:6e92f8b23bcdfdf34dc813cfaf1d84b71beacd63a2df10fe23a660
I:43.980618 eth/backend.go:184]Protocol Versions: [63 62], Network Id: 95518
I:43.981567core/blockchain.go:204] Last header: #81 […] TD=
I:43.981645core/blockchain.go:205] Last block: #81 […] TD=
I:43.981677core/blockchain.go:206] Fast block: #81 […] TD=
I:43.p/server.go:313]Starting Server
I:45.p/discover/udp.go:217] Listening,enode://c61c27f91caaf499be813e29c9f986e2eac62d47e02b13a8e51776c1caeaed26ceda7ac48a83a60113ff@[::]:30303
I:45.835853 node/node.go:366]HTTP endpoint opened: http://localhost:8545
I:45.p/server.go:556]Listening on [::]:30303
I:45.849731 node/node.go:296] IPCendpoint opened: /home/lihe/桌面/chain/geth.ipc
Welcome to the Geth JavaScript console!
instance:Geth/v1.5.0-unstable/linux/go1.5.1/PICCetherum
coinbase:0xb2b974b07ef0b52e07cde1
at block: 81 (Tue, 05 Jul :25CST)
&datadir: /home/lihe/桌面/chain
&modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
& & 可以看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,说明已经启动成功
&&&&注意:如果想将Ubuntu作为永久区块链节点使用,当使用nohup命令时,Geth启动参数console必须去掉,否则Geth会自动停止。
2、& 在windows启动区块链节点
& & 进入Windows下Geth的目录 ,放置配置好的piccgenesis.json文件,执行如下命令:
geth&&--datadir &%cd%\chain& init piccgenesis.json&
创建数据存放地址并初始化创世块
geth--identity &PICCetherum& --rpc--rpccorsdomain &*& --datadir &%cd%\chain& --port&30303&& --rpcapi&db,eth,net,web3& --networkid 95518 console
& & 当看到Listening on [::]:30303和Welcome to the Geth JavaScript console!的提示,说明已经启动成功
五、&&&&&&&使用节点创建账号
& & 启动节点成功后,会进入Geth的命令行模式,输入如下命令
personal.newAccount()
& & 系统会提示你输入账号密码,并确认,最后会显示一个新生成的账号。
六、&&&&&&&启动Windows下私有链图形节点
& & 首先按上面的步骤启动Geth并创建了账号,然后解压缩Ethereum-Wallet,运行Ethereum-Wallet.exe,即启动成功,如果区块链正常的话,会在右上角显示“PRIVATE-NET”,点击“LAUNCH APPLICATION”进入图形界面即可。
七、&&&&&&&连接其他节点
& & 首先要知道自己的节点信息,在Geth命令行界面下输入命令,注意大小写
admin.nodeInfo
& & 系统会显示
& enode:&enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eeceefcad17c161aa93d61bdbfb28ed152c143c7eb501db58bcb62d742@0.0.0.0:30303“
enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eeceefcad17c161aa93d61bdbfb28ed152c143c7eb501db58bcb62d742@0.0.0.0:30303
& & 就是自己节点的信息,注意要把“0.0.0.0“换成你自己的IP。将这个信息发送给其他节点,在其他节点的命令行中输入:
admin.addPeer(‘enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eeceefcad17c161aa93d61bdbfb28ed152c143c7eb501db58bcb62d742@192.168.1.101:30303’)
& & 如果添加成功,输入admin.peers会显示出新添加的节点。
八、&&&&&&&使用节点进行挖矿
& & 在Geth命令行界面下,输入miner.start()即启动挖矿,挖矿后,会不停刷屏,输入miner.stop()即停止,不用管刷屏导致的命令不全,命令会正常执行。
& & &到这一步,已经组建一个私有链的网络,可以像其他区块链一样不停的扩充这个网络,下一篇文章,我会介绍如何在私有链上编写、调试和部署智能合约。
&参考文章:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:208373次
积分:1389
积分:1389
排名:千里之外
原创:16篇
转载:22篇
评论:124条
(1)(1)(4)(1)(1)(4)(1)(12)(2)(10)(2)

我要回帖

更多关于 区块链搭建 的文章

 

随机推荐