码迷,mamicode.com
首页 > Web开发 > 详细

Node.js区块链开发 随笔

时间:2019-02-17 12:42:58      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:上进   分布式   入库   数字化   分布存储   生成   行数据   原理   基础   

  本书主要讲述了区块链的基础一集js开发工程师如何开发区块链,不仅仅是互联网思维,调用api文档进行开发,而是在基础之上进行的拓展式的开发。

  本书主要讲述了,加密货币的一些特征,以及node.js的基础,服务启动如何与链进行交互,以及node.js在区块链技术领域的调查描述,并进行了案例示范,其次对源码进行解读。从架构设计的角度,层层剖析区块链的设计原理,深刻解读相关概念和技术。从项目设计的角度谋篇,从项目入口程序出发,介绍了亿书项目的整体结构,分别介绍了P2P网络、加密解密、签名和多重签名、区块链、共识机制等区块链核心内容及其代码实现。还详细介绍了加密解密技术,函数式编程等编程方法论。让开发者更好的开发和应用区块链技术,帮助开发者从更深层次写代码。

 开始看本书本来当作工具书查询的,源码解析很清晰,对于开发者来说,代码实战比文字说明要来的清晰明了,从最基础的服务开始,监听端口启动服务,进行模块依赖,npm包的安装,对于新手来说十分的友好,可以当入门node.js的一次实践,由浅到深,js开放工程师可以渐进式的学习区块链的知识,无论是去中心化的还是中心化的项目都可以得心应手。

 从本书来说,首先了解概念,区块链。分布存储:区块链处于P2P网络之中,无论什么公链、私链,还是联盟链,都要采取分布式存储,使用一种机制保证区块链的同步和统一,公开透明,每个节点都有一个区块链副本,区块链本身没有加密,数据可以任意检索和查询,甚至可以修改,无法篡改。这是加密技术的巧妙应用,每一区块都会记录前一区块的信息,并实现验证,确保无法篡改。这里的无法篡改不是不能改,而是局部修改的数据,无法通过验证,要想通过验证,必须修改整个区块链,这在理论上可行,操作上不可行,区块链是公开的,从任一区块都可以向前追溯,直到第一个区块,并通过区块查到与之关联的全部交易。存在分叉,这是由P2P网络等物理环境,以及软件开发实践过程决定的,人们无法根本性杜绝。区块链的设计,确保本地区块链合法,未被篡改,处理新区块。加载后,该节点就可以处理网络中的交易了。同步区块链。确保本地区块链与网络中完整的区块链同步加密货币的概念,加密货币首先是一种数字货币。早在比特币出现之前,“数字货币”、“虚拟货币”、“电子货币”等就已经出现了,特别以“虚拟货币”居多,最简单的理解就是“货币数字化或虚拟化”。这里的货币是现实的法币,比如美元、人民币,数字化就是不用拿钞票,直接通过网银、支付宝等就可以支付。后来,在游戏平台,最早提出了游戏币的概念,通过法币直接兑换,然后,玩家使用它购买各种装备道具。接着,很多网站也推出了各种币,通过游戏的思维,用以吸引用户。这些所谓的数字货币,最直观的解释,其实就是“代币“,这些“代币“同样具有价值,有根据P2P网络,没有发行机构,总量基本固定,加密,电子通货等特点。

 其实这些加密货币也同样具有价值,目前市面上的交易所有法币交易和币币交易,去中心化的和中心化的,诠释了这些货币市场的交易。因为共识机制,多个节点,所以有着非常高的可靠性,Pow工作量证明机制,就是“按劳取酬”,挖矿难度自动调整、区块奖励逐步减半等,这些因素都是基于经济学原理,能吸引和鼓励更多人参与。但是也耗费电力,是对能源的直接消耗,,算力的提供已经不再是单纯的CPU了,而是逐步发展到GPU、FPGA,乃至ASIC矿机。用户也从个人挖矿发展到大的矿池、矿场,算力集中越来越明显。这与去中心化的方向背道而驰,渐行渐远,随着奖励减少,挖矿的成本高于挖矿收益时,人们挖矿的积极性降低Pos就由此产生,在创世区块内写明了股权分配比例,之后通过转让、交易的方式(通常就是IPO),逐渐分散到用户手里,并通过“利息”的方式新增货币,实现对节点的奖励,诠释了去中心化,节能,避免紧缩,但是只能通过IPO的方式发行,信用基础不够牢固,因此采用PoW+PoS的双重机制,通过PoW挖矿发行加密货币,使用PoS维护网络稳定,DPos社区选举的授权股权认证就产生了,能耗更低,更加去中心化,更快的确认速度比如EOS,有超级节点选举。

  区块链可以简单的分为三个层次,协议层、扩展层和应用层,应用层包括,客户端,交易网站,第三方扩展BTC ETH EOS进行的币币交易法币交易,扩展层包括智能合约各种侧链应用,B/S架构的产品中的服务端,以及一些文档图片视频的储存,协议层又包括网路层和储存层,网络层包括通过挖矿网络保证节点安全的出块,储存层则是储存区块,用到的技术有网络编程、分布式算法、加密签名、数据存储技术。

  因为职务是前端工程师,js肯定是最熟悉的语言,也因为Nodejs平台强大的网络编程能力,先下载node.js安装包,npm install koa2 pm2,使用pm2就可以快速起一个服务,pm2的简单实用,无论是调试还是线上,都可以自动重启,对项目进行路由拆分,然后就可以提供接口了,简单的后台就搭建好了,还可以提供静态资源的服务,就可以用来开发一个简单的p2p网路服务,设置Access-Control-Allow-Origin为*,允许所有的客服端使用,这样,对于编写接口进行实现,一个简单的后台就实现了,本书也有很多关于node.js运行机制数据流,异步操作,捕获异常。作为简单的p2p网路首先要做的是初始化节点,在没有其他任何节点信息的情况下,仅仅靠网络扫描去寻找其他节点,将是一件很难完成的事情,在配置文件里面config.json进行节点配置,其次在写入节点,就是持久化,或者保存到数据库,或者保存到某个文件。我在开发区块链浏览器的时候使用的mongo数据库,进行数据存储,提供接口供外部查询,数据入库然后对于区块进行解析,区块,交易,地址提供持久化存储。根据业务逻辑不同,进行分表查询,依赖超级节点以及提供的api服务。用数据库的概念理解,区块链就是一张“自引用”的数据库表。每条记录代表一个区块,这条记录(区块)记录着它前面(时间上)一条记录的信息,可以直接查询到前一条记录,因此从任何一条记录开始都可以往前顺序追溯,直到第一条记录。普通自引用表结构,通常使用ID作为关联外键,加密货币使用的是经过加密处理的信息字段,具有签名认证作用,可实现自我验证,防止被篡改。本书的peer.js产品提供初始节点列表,保障了初始化节点快速完成,不至于成为孤立节点,节点具备跨域访问能力,任何节点之间都可以自由访问,节点具备自我更新能力,定期查询和更新死掉的节点,保障网络始终畅通,实现了p2p网络。

  加密算法对于区块链技术来说尤其重要,私钥和公钥更为贴心与先进,用私钥签名的信息,公钥可以认证确认,相反也可以。这就为网络传输和加密提供了便利。这就是“非对称加密”,私钥必须始终保持机密,因为一旦被泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远丢失。Node.js的Crypto模块,提供了一种封装安全凭证的方式,用于HTTPS网络或HTTP连接,也对OpenSSL的Hash,HMAC,加密,解密、签名和验证方法进行了封装,sha256hash算法(除此之外,还有MD5,sha1,sha512等),通过node.js自带的crypto模块,简单加密生成一个哈希值cypto.createHash(‘256‘).update(‘data‘).digest()就可以生成简单的hash,用户角色仅仅就是一个地址,该地址是可以是转账交易操作,要生成一笔交易。这里是指一条包含交易双方加密货币地址、数量、时间戳和有效签名等信息,而且不含任何私密信息的合法交易数据;广播到网络。几乎每个节点都会获得这笔交易数据。验证交易合法性。生成交易的节点和其他节点都要验证,没有得到验证的交易,是不能进入加密货币网络的。写入区块链。签名就是一个数字资产的多个签名。签名标定的是数字资产所属和权限,多重签名预示着数字资产可由多人支配和管理。在加密货币领域,如果要动用一个加密货币地址的资金,通常需要该地址的所有人使用他的私钥进行签名,这样极大的保证了安全性。

 

 

Node.js区块链开发 随笔

标签:上进   分布式   入库   数字化   分布存储   生成   行数据   原理   基础   

原文地址:https://www.cnblogs.com/yuxiazi/p/10390635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!