一,区块链基础
《比特币白皮书》http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system
《以太坊白皮书》https://ethfans.org/posts/ethereum-whitepaper
《精通比特币》http://book.8btc.com/master_bitcoin
《腾讯区块链方案白皮书》http://www.cbdio.com/BigData/2017-04/25/content_5503014.htm
本文来自链客区块链问答社区链客区块链问答社区
1.什么是区块链?
答:区块链是一种去中心化的分布式数据库。任何人只要架设自己的服务器,接入区块链网络,都可以成为这个庞大网络的一个节点。区块链本质就是数据库,基本单元为区块。
2.区块链技术都能做那些领域的工作
答:基于区块链本身的特性,区块链内部由于hash的存在,区块内部数据是无法篡改的。又因为运用了非对称加密技术,所以在节点间交易也很安全,加上区块链的本质,交易也不会用到第三方的介入。所以大概能运用到一下几个领域:
1)金融领域-----------用到区块链的技术公开和不可篡改性。例如:跨境支付,保险理赔,正确,票据
2)物联网领域---------中心化的大型服务器维护费用高昂,链技术会大量降低成本。例如:租房等
3)公共服务领域-------建立不可篡改的数字化证明。例如:数字版权,知识版权,证书等
4)公益慈善领域--------不可篡改性。例如:慈善机构的项目,明细,资金流向等
5)供应链领域-------不可篡改,产品防伪,交易追溯。例如:解决供应链纠纷,根除供应链内产品流转过程中的假冒位列问题
3.区块链的特点
答:去中心化。可溯源,不可篡改,公开透明。
4.你了解过区块的技术结构么?
答:这个问题的话,我自己用java吧,写了个稍微简单一点的比特币区块链系统,很明白这个。在区块中的数据结构是这样的,他基本分为区块头和区块体,主要变量包括,本区块的hash,上一区块的hash,时间戳,数据,难度,默克尔根信息等等。区块头里只有hash和一个随机数nonce值。区块与区块之间用hash进行连接。然后在各种验证方法下,就可以确保区块链的顺利进行。
二,区块链进阶
1.主流的共识算法
答:有POW,POS,DPOS等。
1)PoW英语为proof of work,工作量证明。是中本聪率先使用的共识机制,它通过各个节点的算力比拼,从而在哪个节点来执行挖矿的问题上达成共识。具体细说的话就是:在比特币中,每一个区块的区块头里有一个Nonce随机数,节点是这样计算的,当节点对区块头里hash+nonce这个数进行双重SHA256运算,如果算的值小于目标值的时候,此时的随机数nonce就算是工作量证明。并向全网广播。刚才说的目标值和难度的问题,我可以举个小例子来解释,为什么双重hash计算后的值要小于目标值。就如同打麻将扔骰子一样,如果你有两个骰子,让你不停地扔,两个骰子的点数之和小于10的概率是不是比小于5的概率要大很多。所以说,目标值越小,概率就越小。就在此时,给你了五个筛子一起扔,是不是扔出点数之和小于5的概率就更加小了。
说到底,PoW的意义还是跨时代的,但是也会出现很多问题。比如说,大量算力的浪费,或者出现巨大的算力中心,这都与区块链技术的去中心化不相符合。
2)基于PoW的各种不足,出现了PoS--Proof of Stake 权益证明。PoS通过消耗币龄从而铸币。即,你的财富越大,存放时间越长,你的币龄或者说你的权益就更大,这样你就与其他节点达成共识,你就拥有了下一个区块铸币的权利,消耗掉你所有的币龄,并获得奖励。POS保留了POW作为铸币流程的初始部分以促进初始铸币,但是作用类似于股票交易的上市首发,之后就不需要POW机制进行铸币了。但是,与POW不同的是,币权交易的哈希操作是在一个有限的搜索内执行(更具体地说,是每秒在每个未支付的钱包进行一次hash),而不是像POW那样在一个无限的搜索空间内进行,因此不需要消耗大量的能源。另外,POS的哈希目标是连续调整的,不像比特币有两周的调整间隔,可以避免网络产出率的突然波动。POS保留了POW作为铸币流程的初始部分以促进初始铸币,但是作用类似于股票交易的上市首发,之后就不需要POW机制进行铸币了。
但可是,PoS也有他的不足。即财富中心!拥有巨大财富的节点,将会拥有更多的权益用来铸币,必然会导致“富者越富,穷者更穷”的马太效应。即持有数字货币权益越多得人,他创建新区快的可能性更高。而穷人由于初始权益很少,币龄不足,获得创建区块的可能性大为降低了。
3)应运而生的DPoS----Delegated Proof of Stake。中文:授权股权证明机制。现今使用DPoS的代表就是比特股了,基于比特股来说,DPoS与POS最大的不同在于,铸币权不再是由系统根据特定算法随机选出,而是由网络的全部节点基于权益随机投票选出101位授权委托代表,由这101位代表进行铸币以及维护网络安全。POS机制下,每一个持有数字币的钱包拥有权益,可以确认交易、参与铸币以及赢得数字币。DPOS机制下,每一个持有数字币的账户可以投片选出代表,由这101位代表(比特股系统中设置的是101位代表)来完成确认交易、维护区块链以及获取交易费用的功能。股东投票给见证人的过程充分体现了去中心化的特点。
DPoS的工作机理是这样子的:1.每一个持有数字货币的账户类似于股份公司的股东,它可以投票选择任意数量的见证人(即代表,delegate)来产生区块。2.每个股东(账号)可以投票给一位见证人,最终得票数最高的前n位见证人被系统选中担任代表。(此代表的数目为:至少有50%的投票股东认为已经充分中心化所需的数量。例如比特股中就设置了101名代表)此投票过程充分体现了去中心化的特点。
不足之处那就是选民对投票漠不关心,一些小规模的数字币持有者对于投票并不积极,因为即使投票选举了符合自己意愿的代表,但是代表在执行其职责期间所做的决定对只持有者的利益没有什么影响,所以小规模权益持有者不愿意话费太多精力来关注精选代表。如果,小规模持有者的参与程度不足,很有肯能导致一些大规模持有者控制了授权代表的选举,他们也会投票选择自己来担任授权代表,这必然影响到“去中心化”的实现。
所以说,并不存在绝对好的共识算法,要根据需要适当的去选取和设计自己共识算法。
2.密码学
一般用的比较多的就是RSA,MD5还有就是椭圆曲线加密。我对这个椭圆曲线加密,有点了解。我给您说说。
比特币系统中的椭圆曲线加密算法,在其数学原理的基础上,充分应用了椭圆曲线加密算法的单向特性,在区块链的钱包中,私钥可以产生出公钥,而反过来要想从公钥推算出私钥则不可能;用公钥加密的信息,可以用私钥来解密;而用私钥签名的信息,则由公钥来验证,验证通过后说明该信息确实为私钥持有人所发布。
1)先说椭圆曲线的特性。这个涉及到数学问题和椭圆曲线的数学原理,椭圆曲线的特性为:(1)所有椭圆曲线都基于X轴对称。(2)任何不平行与X轴的直线,与椭圆曲线最多有三个焦点。
举例说明,椭圆曲线的加密数学原理(可以画出来):在去线上任意一点A作为基点,由基点出发向曲线上任意一点B打点(射线),如果有第三个交点,则取这个交点的关于X轴映射点C。再由基点A向此映射点C打点,如果有第三个交点,则继续去交点的X轴映射点D。直至没有第三个交点为止。看图可知A向E打点就没有第三个交点了。
我们来设想一下。如果有个人窃取了点A的为止、曲线的形状、和最后点E的位置;但是不知道点B的位置。是不是也无法知道整个打点过程一共打过几次点,并且也不知道每一次打点的交点都在哪。
以上就是椭圆曲线的特性。
2)椭圆曲线在使用中的加密解密原理:
想知道的同学可以悄悄来问我,实在写不出来!
3.Solidity以太坊智能合约开发
https://ethereum.github.io/browser-solidity/#optimize=false&version=soljson-v0.4.24+commit.e67f0147.js Remix IDE 智能合约测试网站 (删除源代码直接编写即可)
4.以太坊私有链搭建
教程:https://blog.csdn.net/xiabing082/article/details/77197607
5.IPFS
6.truffle
https://truffleframework.com/boxes/
7.web3.js API
http://web3.tryblockchain.org/Web3.js-api-refrence.html API文档
三,区块链高级
1.比特币:
(1)java模拟一
(2) java模拟二
(3)比特币/以太坊中,区块头里的Nonce值
他是创建新区快的“钥匙”,当然钥匙是加了双引号的。以比特币为例,其工作原理如下:区块头及区块主体构建完成以后,挖矿也就是解数学题就可以开始进行了,挖矿的目标就是通过不断改变区块头中的Nonce值,使得对区块头使用SHA-256算法得出的哈希值符合难度值的要求。
比特币挖矿的目标就是找到一个这样的nonce值,使得在这个值下的区块头的SHA-256哈希值的输出必须小于难度值中设定的值,矿工通过不停地变更区块头的随机数,即不断变更nonce的数值,并对每次变更后的区块头做双重SHA-256运算,即【SHA-256(SHA-256(Block_Header))】,将运算结果值与目前网络中的目标值做对比,如果小于目标值,则工作量证明完成,区块创建成功,该名矿工并会全网络广播这一Nonce值,经过其他矿工验证通过,即可获得全网络节点的认可,加入到区块链中成为行的区块,其他矿工则迅速以该区块作为福区块进行新的计算,并试图挖出新的区块。
(4)比特币源码的seed()方法当中还有一个小nonce随机数。
这个nonce只为了在挖矿方法里,同时启动五个线程,从五个随机数开始进行递增同时去挖矿。所以说这个小nonce随机数,与挖矿只有间接关系,没有什么直接关系!
2.比特币和以太坊的区别
(1)从定义上
共同的定义是,比特币和以太坊都是成功的区块链技术应用,是最典型的代表。再细说点呢,有了比特币才有区块链技术,有了以太坊人们才认识到区块链还可以独立出来,不仅仅是比特币才能有区块链技术,也是以太坊为后面开启了区块链世界的思路思想。
因为都是区块链技术的应用,所以底层基础思路是一样的。都是点对点的网络节点、公开的账本、共识基础算法,都是通过挖矿来维护网络。
不同的定义是,比特币是点对点数字化支付系统,类似的是一家可以全球结算的银行,而这个银行是没有中心化组织成员的,没有CEO,没有管理员,只有代码和共识的基础原则。而这个银行的结算或者发行的货币就叫比特币,这叫银行也叫比特币。最主要的是银行的账本完全公开的,任何人查看每笔交易和记录都可以,而且每笔交易都可以追溯到源头,通过加密及数学魅力也实现了账本不可更改等特性。而且最大的特点,点对点价值传输,不需要其他第三方,或者信任机构。
而以太坊的定义呢,是点对点的去中心化的虚拟机,虚拟机是干什么的,就有点像在阿里云买的服务器,各种环境已经配置好了,就等你按照开发框架和开发语言来编写自己的程序代码,把程序安装在这个虚拟机系统运行,如果是一台虚拟机和现在的也没太大区别,但是整个以太坊系统是可以由全球任何计算机加入到这个体系了,每台电脑只要安装了以太坊客户端就可以成为以太坊的一个节点一个虚拟机,所以整个以太坊系统未来规模再发展的话,可以说是全球超级计算机系统,人人都可以开发程序放在这个超级计算机运行。再说一点,这种模式的优点,现在的都是集中的云服务器,中心化的,可能有几个备份,但是一旦坏死,就不能运行,但是点对点的网络特点就是,就算几个节点下线了,或者被攻击了,有一部分在运行整个系统还是可以运行,抗风险抗错性很高。
所以从最底层的定义来说,比特币解决的世界货币问题,没有能增发货币,没有能说取消或者没收你财产,直接真正存在网络上,你自己完全保管。以太坊则是,做全球的超级计算机,提供整个系统的底层,未来以太坊可能像现在电一样的底层基础资源。(后面还会学习量子链,也有可能是基础)
(2)从技术上
还是说点吧,上面已经说了,比特币是点对点数字货币系统,整个系统是基于UTXO的交易模型建立的,侧重点是在交易和数据结构的布局及记录。而以太坊呢,是虚拟机,完整的说法应该是智能合约虚拟机,也就是侧重按照合约的模式执行合约的虚拟机。所以呢以太坊是基于Account模型的(也有地方说EVM,就智能合约虚拟机,为什么说Account,是账户模式,以太坊是基于账户体系的)。所以呢,以太坊虽然在比特币基础学习了一些,但也创造了新的模式,为后面开发者提供了思路,同时呢后面开发应用者基本是在这两种模式下选择一种作为自己的应用模式。量子链做的事情就希望兼容两种模型,或者说打通两者,使更多应用相应的兼容。
其他技术上面呢,算哈希和工作量证明上也是不同的。比特币是基于矿工计算唯一正确的哈希值,来证明工作量来获得记账打包区块权,从而获得奖励,这个用的就是工作量证明(Pow)。而以太坊希望优化这个工作,因为比特币挖矿的这种模式算力比较集中,比如专业的矿机出现,第二也比较浪费电力,浪费社会资源。提出权益证明机制(Pos),能避免一定的算力集中和资源浪费。现在以太坊才有是两种机制混合型,占比不同,以后逐步过渡到全Pos机制。
本文来自链客区块链问答社区https://www.liankexing.com/index.php/Home/Note/note_page.html?id=243
网友评论