当前位置:首页 - 第120页

08月23日

8.2 开发环境准备

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 875次

区块链程序本质上与普通的软件是一样的,因此在开发方式上并没有什么特别的区别。从开发语言上来说,但凡是图灵完备的语言都可以用来开发,比如C++/Java/Go/等,还有现在比较流行的Node.js,目前来说,生产环境的正式程序开发,使用C++和Go比较多,比如比特币就是使用C++开发的,以太坊是使用Go开发的(以太坊同时也有其他语言的版本,如C++、Python),而一些测试环境的程序会使用Node.js,比如模拟以太坊环境的testrpc程序,testrpc是使用JavaScript开发的,并且以Node包的形式发布。可以说,语言选择上没什么限制,选择自己熟悉的即可,个人比较推荐Go,运行效率不错,且Go本身是运行在虚拟机上的,因此也跨平台,语法也容易上手,不过Go目前不太适

08月23日

8.3 设计一个简单的结构

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 915次
8.3 设计一个简单的结构

现在,我们先来看一下微链打算展示哪些功能设计,如下:·具备一个微链核心,支持同步区块数据并验证和存储区块数据到主链。·具备一个钱包功能,可以存储公钥私钥以及账户余额。·具备一个挖矿功能,用于打包区块数据并发行新的微币。到这里就结束了,对于一个区块链应用程序来说,大的功能模块其实就是这些,其他各种功能(如区块数据同步、数据完整性验证、解锁与锁定脚本等),都可以从属于这三大模块,这些功能之间的从属关系大致可以如下定义。(1)微链核心1)命令交互系统,用于与节点核心进行功能调用;2)节点RPC服务,支持外部程序通过RPC的方式访问节点;3)节点数据监听,用于与其他节点进行区块数据同步以及其他数据交换;4)脚本系统,通过脚本的锁定与解锁执行交易合约;5)区块链账本维护,用于验证网络中的区块数据并打包

08月23日

8.4 源码解析

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 915次
8.4 源码解析

8.4.1 目录结构我们来看一下微链程序的目录结构,如下所示:1)cmd:这是程序的主程序目录,其中包含了入口main函数以及一个命令行接口环境,微链就在这里启动。2)blockchain:区块链程序,其主要的数据结构就是区块,其中就定义了微链的区块结构。3)encrypt:微链中使用RSA算法生成私钥公钥以及钱包地址,并使用SHA256算法对事务以及区块计算哈希值,这些算法都定义在此目录中。4)transaction:比特币中将一次转账交易或者挖矿获得新币的动作都称为事务,微链中也一样,在这个目录中,定义了事务的数据结构。5)script:区块链应用中一个非常典型的特点就是可编程合约,比特币中使用了一组锁定和解锁脚本来表明一笔比特币的所有权,以太坊扩展了这个脚本的能力,将其变成了图灵完备的

08月23日

8.5 微链实验的注意问题

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 865次

我们在实验开发微链的时候,为了减少复杂度,去除了相当多的异常处理,就以上述的微链设计来讲,是有很多问题没有考虑的,比如:数字货币仅支持整数货币;基本不做错误处理;区块数据维持在内存中;不支持创建多个地址;不考虑临时分叉的情况;出块的时间戳顺序校验;没有严格的区块数据验证;不支持数据的并发处理……很多问题都是没有去细化的,这一点读者一定要注意。要开发一个真正能大规模使用的区块链应用,要考虑非常多的细节,任何一个问题的疏忽,都会留下潜在的巨大威胁,目前的知名公链系统(如比特币、以太坊等),在这些年的运行过程中都暴露过很多问题,直到现在也仍然有很多潜在的问题威胁。不过值得庆幸的是,作为开源软件项目,社区的力量是巨大的,无数多专业且热心的开发者不断提出各种改善方案,为系统的健康运转添

08月23日

8.6 知识点导图

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 900次
8.6 知识点导图

如果说区块链技术就像是一片星空等待我们去探索,那么本章所演示的仅仅只是一粒尘埃,无论是底层设施还是各种应用设计,都有着巨大的想象空间。区块链技术也并不只是独立的存在,其与传统的数据平台,或者说区块链的外部世界也在不断进行融合对接,比如将链外数据喂入到链内的预言机、见证人、数据审计技术,而不同的链之间也在进行多链的数据对接,这将是多么五彩缤纷的场景。我们就从最简单的微链起步,像滚雪球一样不断完善和积累,从而迈向未来。下面我们看一下本章的一个知识点思维导图:

08月22日

第9章 潜在的问题

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 898次
第9章 潜在的问题

任何一个软件系统都很难做到十全十美,在实际的使用过程中,会经受各种问题的考验。不同类型的软件都会有自己特有的问题,区块链应用作为一种具有特有功能的软件系统,也有着自己特有的问题。而本身区块链应用的设计思想就是一种实验,需要经过时间的考验。在全世界第一个区块链应用程序比特币的“关于”说明中,也指明了这是一类实验性的软件系统。如图所示:“这是实验性的软件。”事实上从比特币开始,之后的所有区块链应用系统都是实验性的软件,链式的账本结构、去中心化的思想、最终一致性的特点等,这些设计特点能否在实际的商业应用中稳定运行,都需要大量的实验论证。事实上,这些年各类区块链应用在使用过程中已经暴露了各种问题,甚至还发生过重大的漏洞事故,区块链技术被认为可以很好地应用在金融、审计、支付、见证等领域,这

08月22日

9.1 两个哭泣的婴儿:软分叉与硬分叉

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 882次
9.1 两个哭泣的婴儿:软分叉与硬分叉

我们知道,所谓区块链,就是一个个的区块数据,通过区块的哈希值(相当于区块的身份证号)串联起来,如此而形成一个链条般的账本数据。在这里先问大家一个问题,假设在区块增长到2号的时候,此时软件升级了,增加了之前版本中不能识别的一些数据结构,会发生什么?在传统的中心化软件体系中,似乎并没有什么问题,无论是微信、支付宝、美团等,隔三差五就升个级,能有什么问题呢。这是因为这些中心化的系统,数据存储都是集中的,版本管理也是集中的,如果是重大的升级,完全可以设置为若不更新到最新版就不能进行登录操作,从而确保用户使用的总是正确的版本。然而区块链先天是去中心的使用方式,一旦有新的软件版本发布后,是不是每个人都会去升级到新版本是很难控制的,这就可能导致如下图所示的问题。在2号区块生成的时候发布了新的版本,

08月22日

9.2 达摩克利斯剑:51%攻击

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 956次

我们知道,区块链应用是一个点对点的网络程序,彼此之间通过一个共识规则来进行数据的一致性同步,这个共识规则在软件中也就是一个共识算法,比如比特币中的工作量证明(ProofofWork),以太坊中也是使用工作量证明(根据开发计划,以太坊会更改共识算法),还有一些应用会使用其他共识算法,比如PoS、DPoS等。这些算法各自也有很多变种,无论是哪一类,其目的都是一致的,就是提供一个相对公平也容易遵守的机制来确保节点区块链数据的一致,谁来运行这些算法程序,那谁就是矿工,也就是运行挖矿程序的节点。矿工通过完成某种证明算法,得到区块数据的打包权,可以将网络中已经发起但还没有打包到主链的事务数据打包存储到新的区块,并且广播给其他节点。倘若某个人通过某种手段,十之八九的打包机会都被他占

08月22日

9.3 简单的代价:轻钱包的易攻击性

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 879次
9.3 简单的代价:轻钱包的易攻击性

我们先来看一下,通常一个标准的钱包应用是什么组成。钱包之于区块链应用程序来说,是一个前端工具,其作用主要是提供给用户一个交互操作的应用,以便于用户可以通过钱包来进行密钥管理、转账交易、余额查询、合约部署等一系列操作。通过上图我们看到,标准情况下,钱包客户端是与完整区块链账本数据在一起的,对于这些保有完整的、最新的区块链拷贝的钱包应用,称为“完全钱包”,能够独立自主地校验所有交易事务,而不需借由其他的节点服务,除了这种完全钱包,另外还有一种钱包只保留了区块链的一部分,准确地说是只保留了区块头而去除了区块体中的详细事务数据,因此可以大大减少需要同步的数据量,它们通过一种名为“简易支付验证”(SPV)的方式来完成交易验证,这也就是所说的轻钱包的概念。我们知道,当通过钱包进行一次转账交易

08月22日

9.4 忘了保险箱密码:私钥丢失

发布 : xiaohuanglv | 分类 : 区块链精品文章 | 评论 : 0 | 浏览 : 968次
9.4 忘了保险箱密码:私钥丢失

在日常生活中,能够标识我们身份的那就是身份证了,每个人都有自己的身份证号,我们在银行办了卡如果忘记了密码可以凭身份证去银行重设;我们要去办理住房公积金也是要凭身份证;要买机票火车票等也是要凭身份证。如果身份证丢失了那可就麻烦了,身份证就是我们在这个国家的唯一标识(当然也还有其他证明比如护照、驾驶证,这里暂且不表)。那么,在区块链应用的世界里,唯一标识一个用户的身份的是什么呢?答案就是私钥。在这里,每个用户都拥有一对密钥:公钥和私钥。如图所示,用户在办身份证的时候,系统会首先生成一个私钥,然后根据私钥生成公钥,这俩是一对,然后再对公钥进行一些编码处理得到一个钱包地址,几乎所有的区块链应用都是这样一个身份管理过程,只是具体使用的算法不同而已。可以看出,私钥是多么重要,掌握了私钥就什么

网站分类

标签列表

最近发表

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

本站资源大部分来自互联网,版权归原作者所有!