私链挖矿失败
很多人很好奇,为什么人们说比特币是挖出来的。下面我给你解释下,为什么比特币这样的区块链项目需要“挖矿”。
交易需要记账人
为了达成交易,买卖双方转账需要有可信赖的人、机构来记账清算。
比如你通过支付宝把100元转账给朋友,支付宝就把你的账户减少100元,而朋友的账户增加100元。这个场景支付宝就是记账人。
信息不对称问题
可是比特币生来没有支付宝、微信、银行来支持它。比特币也不准备依赖于这些中心化机构。
其发明者中本聪设计,任何都可以来帮助记账,记账就可以获取比特币作为奖励。可是问题来了,想要帮助记账获取比特币的人很多,选择谁来记账出错概率低呢?这实际是一个信息不对称问题。
比特币系统想选出可信的人来记账,却不了解想来记账的众多参与者。为了解决这个问题,众多区块链项目想出了不同招数。
为了使得记账人可信,部分区块链干脆仅仅让个别使用者自己记账,这类项目称为私有链,实际上区块链用处不大
部分区块链项目,加入前需要先经过其他成员审核同意,这类项目叫做联盟链
还有一类区块链项目,允许任何人自由加入记账,被称为公链,比特币就属于这一类
挖矿减少信息不对称
公链要解决“记账人是否可信”这个信息不对称问题,就要用到一些手段。实际上各自挖矿方式就是在想办法解决这个问题。
下面简单介绍下常用的挖矿手段,以及解决信息不对称问题的原理。
1、工作量证明(POW)
POW是Proof of Work的简称,参与者需要证明自己确实花费了足够工作成本。
中本聪设计了一个解谜 游戏 ,要解开必须得花费大量的计算,需要购买设备、消耗电量、花费时间。谁最先解开了谜,就证明谁确实花费了不少的成本,于是让他负责记账并获得奖励。然后重新开始新一轮解谜,如此往复。这个过程你开着机器(电脑),在无数数字中寻宝,人们形象地比喻为“挖矿”。
POW其实是生活常用的减少信息不对称的手段。比如:
你肯定想到了,POW证明不是那么牢靠。早期就算付出了成本,当真的掌权也可能乱来,人性使然。对应地比特币设计了一定的防攻击措施,比如记账内容至少要超过半数的算力认可。
2、权益证明(POS)
POS是Proof of Stake的简称,参与者需要证明自己拥有足够的份额。
其假设是你有一个系统不少的股权,则你更加可信。每轮在参与者中,根据其持股的比例,给予相应概率被选为记账人。
POS也是生活常用的减少信息不对称的手段。比如:
3、POI、DPOS等其他方法
除了以上解决信息不对称的方法,一些项目对以上方法进行组合,改进衍生出一些新方法。比如:
#比特币[超话]# #数字货币# #欧易OKEx#
㈡ 以太坊多节点私有链部署
假设两台电脑A和B
要求:
1、两台电脑要在一个网络中,能ping通
2、两个节点使用相同的创世区块文件
3、禁用ipc;同时使用参数--nodiscover
4、networkid要相同,端口号可以不同
1.4 搭建私有链
1.4.1 创建目录和genesis.json文件
创建私有链根目录./testnet
创建数据存储目录./testnet/data0
创建创世区块配置文件./testnet/genesis.json
1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json
1.4.3 启动私有节点
1.4.4 创建账号
personal.newAccount()
1.4.5 查看账号
eth.accounts
1.4.6 查看账号余额
eth.getBalance(eth.accounts[0])
1.4.7 启动&停止挖矿
启动挖矿:
miner.start(1)
其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
停止挖矿,在 console 中输入:
miner.stop()
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
1.4.8 转账
目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:
我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:
发送交易,账户 0 -> 账户 1:
需要输入密码 123456
此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。
使用 miner.start() 命令开始挖矿:
miner.start(1);admin.sleepBlocks(1);miner.stop();
新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
用同样的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json
启动私有节点一,修改 rpcport 和port
可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。
假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点二连接到节点一。
首先要知道节点一的 enode 信息,在节点一的 JavaScript console 中执行下面的命令查看 enode 信息:
admin.nodeInfo.enode
" enode://@[::]:30303 "
然后在节点二的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点一:
addPeer() 的参数就是节点一的 enode 信息,注意要把 enode 中的 [::] 替换成节点一的 IP 地址。连接成功后,节点一就会开始同步节点二的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。
通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。
除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点
参考: https://cloud.tencent.com/developer/article/1332424
㈢ 专业开发矿机挖矿系统模式|区块链DAPP挖矿模式开发
矿机挖矿系统软件开发搭建,矿机挖矿系统软件开发案例,矿机挖矿系统源码开发,矿机挖矿系统APP开发需求,矿机挖矿软件系统开发案例,矿机挖矿定制系统开发,矿机挖矿系统软件开发,区块练中所有数据前后相连成能够构成一个无法篡改的时间节点,这样所有的在区块上发生的事件都能够贴上一套无可伪造的真实记录,区块练技术的去中心化能够解决数据追踪以及信息的防伪问题
一、区块链挖/矿系统是什么?
区块链挖矿系统主要采用“ 娱乐 即挖/矿”的全新玩法,为 娱乐 赋能,打破传统游/戏商/业模式。用户在平台通过玩游/戏即可产生“算力”,从而实现“挖/矿”,挖到的矿可用于游/戏内道/具购/买,也可到交/易所进行区/块链资/产兑/换。
二、区块链挖矿有哪些类型?
1、主链挖/矿系统:
致力于主链、联盟链、私有链搭建。基于分布式部署、各种智能合约、共识机制、可扩展性强、高TPS的性能搭建商/业化主链系统
2、钱/包挖/矿系统:
区块链钱/包挖/矿系统开发支持多链、多币种、多语言、多模式。私钥自持,唯一助记词,安全无忧!支持钱/包内置各类DAPP,持/币生/息、共振模式、分/销经济等多种模式
3、交/易系统:
支持币/币交/易、OTC交/易、合/约交/易、杠/杆交/易等多种交/易形式。专业、多维度的安全系统、市值管理系统、预/警系统以及财/务多个管理系统。支持PC、iOS、Android多端同时登陆。
4、区块链浏览器:
是浏览区块链信息的主要窗口,每一个区块所记载的内容都可以从区块链浏览器上进行查阅。方便数字资产用户使用区块链浏览器查询记录在区块中的交易信息,信息全网公开透明
5、DAPP挖/矿系统:
结合行业特定需求,定制开发去中心化应用。方案设计、通证模型设计、生态角色设计以及Token流通设计等。包含区块链商城、虚拟挖/矿、公益事业等多款行业类型应用
6、挖/矿系统:
实体挖/矿服务提供机器购买、转售、回购、运输、维修服务。对接国国内外合规矿场,矿池、电力等资源,不限矿机台数,资/金随进随出,挖矿收/益日结
7、虚拟挖/矿服务:
提供定制化的虚拟挖/矿系统开发,支持中心化服务和去中心化服务。
8、行业解决方案:
根据行业定制化符合企业现状的区块链解决方案。其中包括供应链金/融、内容版权、电商积分、跨境支/付、通用溯源以及各类行业,为企业持续发展共创价值生态你所有的想法和需求。
二、区块链挖矿APP怎么玩?
目前市场上的区块链挖矿模式千变万化,呈现了各种各样的挖矿模式,今天我将要介绍的区块链挖矿系统系统,它是一种主流的挖矿模式,商户可以在这个基础上去自定义玩法。
例如,在区块链矿机APP平台,用户可以通过注册会员成为矿工,矿工可以通过各种行为挖矿赚取收益,比如购买一台专用的挖矿设备,就可以开始挖矿了,再比如:购买即挖矿、交易即挖矿、签到即挖矿、评价即挖矿、买矿机即挖矿、邀人即挖矿等。也就是说,用户在区块链平台上任务操作都可视为挖矿行为。
用户每一次的挖矿行为,都在为平台做贡献值,平台理应给予币的奖励。而用户挖到的矿可以在商户自己的生态里流转,例如,可在平台进行买入、卖出等理财交易,亦可用来购买抵扣、提现等。
㈣ 为什么区块链将重新定义世界
比特币背后的技术建立起了一个可依赖的账薄,从而改变很多人的生活,其意义远远超过加密货币的范畴。
1,当洪都拉斯警方在2009年某天冲进Mariana Catalina Izaguirre家里并要驱逐她离开的时候,她已经在这个破旧的房屋住了三十多年。与她的邻居不同,Mariana Catalina Izaguirre甚至都有政府的房屋证明,但很不幸,来自当地政府房屋委员会的资料显示,该房屋署与另外一个人,而这个「房主」向法院申请驱逐令,最终 Lzaguirre女士被迫离开。
由于登记不详或记录丢失,这类扯皮的事情在全球都很普遍。房屋所有权保障的缺失也是不公正的源头。也从让利用房屋或土地作为抵押物进行融资等等变得困难。
比特币可以让这类问题消失,比特币是一种基于加密算法的「聪明」货币,我们更应该关注的是比特币背后的技术:区块链。它的意义要远远超越货币或现金。它创造的一种解决彼此之间不信任的记账方式。
这正是政客们咨询Factom公司来清理洪都拉斯财产机构的原因,Factom是一家美国的创业公司,为基于区域链的土地登记提供一种原型。希腊也对此产生了兴趣,它没有合适的土地登记政策,只有7%的土地在绘出的地图上是正确的。
2,区块链与相似的「分布式账簿」的其他应用可以扩展到阻止钻石偷窃与超市流水线。NASDAQ交易所很快就会用区块链系统来记录私有企业的交易。英国银行以不喜欢科技文明,但看起来也被刺激了:它在去年的研究报告中写到,分布式账簿是个了不起的创新,会对金融业有着深远的影响。
政客则想得更远:当合作伙伴与左翼聚集在今年的巴黎的OuiShare Fest来讨论草根企业是如何撼动了大型数据公司如Facebook的时候,区域链出现在了每一场演说中。在世界的自由梦想里,更多的政府规范被个人间的私人合同所取代——加密算法会自行加强。
区块链由Satoshi Nakamoto所设想,了不起且至今唯一被确认身份的比特币创始人——「完全对等的电子货币」,他在2008年发表的文章里写道。为了让它像货币一样,比特币必须要从争取的账户里转移,可以被同一个人消费两次。为了实现Nakamoto这样去中央化的系统的梦想,比特币必须避免任何对第三方的依赖,例如隐藏在普通支付系统背后的银行。
而区块链可以替代第三方。它可以容纳每个比特币的交易历史,提供任何时间任何人物的证据。分配系统可以在几千台电脑中复制——比特币的「节点」——在全世界的每个地方,并可以公开。但即使有如此的公开性,它依然是可信的,安全的。数学算法的复杂性与建在它的「共识机制」——节点同意根据比特币流通来升级区块链的处理过程——内的计算暴力破解保证了这一点。
举个例子,Alice希望给Bob支付租赁服务。他们都有着比特币钱包——一种直接通往区块链,而不是像浏览器通往网页但没有识别系统内的用户的软件。Alice的钱包开始提出申请的时候交易开始了,区块链开始改变,以显示Alice的钱包少了一些,而Bob的多了一些。
网络在此过程中需要通过数个阶段来完成改变。当申请通过网络内多个节点检查,检查账本,确认Alice是否有她想要花费的比特币。如果一切看起来没问题,特定节点会指令miners捆绑Alice的请求连通其他相似的有信誉的交易,在区块链中创造一个新的模块。
这其中牵涉到需要通过给加密一个散列函数来将模块分解为一系列指定长度的数据(见图表)。像许多加密一样,这种散列是一条单行路。数据分散可以,但反过来由分散聚合为数据是不可能的。但是尽管散列并不容纳数据,它依然是独特的。通过任何一种方法来改变进入模块——通过简单的一个数码来改变交易——散列就会不同。
3,随着其他的数据一起,散列会被放置在制定模块的首位(header)。首位继而变成切实数学谜题的基本,又一次涉及到散列函数。谜题只能被测试与错误解开。通过网络,miners要实验上亿种可能来寻找答案。当一个miner终于找出答案时,其他节点会迅速检查(又一次通过单行路:解决很难,但检查容易),每个节点会确认解决方法随之升级到区块链。首位的散列会成为新模块的确认线,这个模块现在是账簿的一部分了。Alice支付给Bob,模块里容纳的其他所有交易都被确认。
解密阶段引进了三种大大加强比特币安全性的东西。一个是偶然性。你无法预测哪个矿工会解决谜题,因此无法预测谁会在指定时间升级区块链,除了它必定是最用功的一个矿工,而不是其他随机的怠工者。这让作弊很困难。
第二点是历史。每一个新的首位容纳了之前模块首位的散列函数,其容纳了后者之前的散列函数,如此循环往复直至起点。这种关联让模块成了一个循环链。从账簿里的所有数据开始,重新产生最新模块的首位是一件小事。尽管在任何地方制造一个改变——甚至返回到最早的几个模块之一——改变了的模块首位会变得不同。这意味着下一个模块也是如此,以及所有以后的模块。账簿将不会通过最新的模块识别器,并被拒绝。
有没有解决的办法呢?想象一下Alice改变了支付Bob的主意,试着重写历史,这样的比特币就会还在她的钱包里。如果她是一个有能力的矿工,她可以解决亟待处理的谜题,并制作出一个区块链新版本。但是在她这样做的时间内,网络中的其余人会已经延长了原始的区块链。节点会一直在区块链最长的版本中工作。这个规定阻止了两个矿工同时找到了解决办法的情况并导致了链中出现比临时叉更糟的后果。它还会阻止作弊。为了让系统接受她的新版本,Alice需要比其他人更快地延长它。无法控制一半以上的电脑——专业术语叫做「51%的攻击」——那应该是不可能做到的。
4,且不说颠覆上述网络的可能性,另一个深层次的问题是:为什么要成为这个网络的一员呢?这个答案就是第三个「解密」步骤,而且还是有奖励的,每个新区块有新的比特币,解开谜题的人会得到25个比特币奖励,约合7500美元。
所有上述精巧的设计并非比特币真正吸引人的原因。其价值在于不稳定性和不可预测性,如下图所示,但比特币的总量却是一定的。区块链的机制也运行良好。根据一家名叫blockchain.info的网站数据,平均每天有超过12万的交易记录被添加到区块链中,这意味着大约有7500万美元的交易。目前有38万区块,这个帐本的大小将近45GB。
大多数位于区块链里的数据都是比特币,但这也不是必须的。Mr Nakamoto 也创造一种分布式系统,并且撰写了相关阐释。科技极客们称之为:开放式平台。这个平台仿照的就是就是互联网,也包括诸如Android或Windows这样的操作系统。开发者可以开发基于区块链上基本功能的应用程序,并不用得到任何人的许可。投资多家比特币创业公司的Andreessen Horowitz公司Chris Dixon表示:这种网络最后会变成一个公开的数据库。据了解,Andreessen Horowitz公司已经投资了比特币钱包公司Coinbase以及面向大众的比特币硬件设备公司21。
目前基于区块链的应用有三大领域。第一种就是将所有建议都通过区块链的方式完成。创业公司Colu押注在这个模式,他们开发了一种算法去「润色」一些小额的比特币交易,从而使得这些交易可以代表诸如证券、贵金属交易。
保护土地或房屋签名有效性成为第二类的典型应用。比特币交易都会将签名一起加入到区块链的账本上。一家名叫everledger的创业公司用这种方式保护奢侈品,比如他们在区块链数据中记录一块宝石的质地属性,假如宝石丢失可以提供最直观的证明。Onename使用类似方式存储个人信息;注意,由于这种应用并非纯粹的比特币交易,因此你需要首先赋予更多信任,比如你需要将自己的一些准确信息告诉应用开发者。
第三种应用则有着更大的雄心,「智能合同」能够自动检测是否具备生效的各种环境。这是因为,比特币可以被编程,这样就能保证在特殊情境下的可用或不可用。
由一位知名比特币工程师Mike Hearn开创的Lighthouse就是一个去中心化众包的项目。如果足够多的资金进入这个项目,那么一切就启动,如果目标没有达到,就停止。Heran认为,他的项目能够比那些以比特币协议的友商们更便宜也更独立。
5,在纽约风险资本公司Albert Wenger of USV看来,分布式账本的出现开启了一个几乎是全新象限的可能性,这家公司已经投资了多家去中心化的公司,比如提供P2P交易的OpenBazaar。在对区块链一片欢呼声之外,也有人质疑其的安全性和扩展性。区块链在比特币上很适用,但在一些小众的应用程序上,还无法承载数百万用户的使用。
尽管 Nakamoto的对区块链的设计到目前为止证明是攻坚不摧的,学术研究也认为,假如没有控制整个区块链的51%,想在区块链上做坏事几乎也是不可能的。过去比特币的玩家都局限在很小的圈子里,如今的比特币挖矿被各种大比特币池把持,在这里「池」里,小的挖矿者分享他们的努力并获得奖励。
另一个对担心则是对环境。为了获得更多比特币,挖矿者对于计算能力的要求很高,也这意味着要不断增加计算机的功耗。根据blockchain.info的数据显示,挖矿者每秒要进行45万次的计算尝试,这些都会带来巨大的能量消耗。
由于矿工们对于硬件的情况守口如瓶,外界很难知道这些计算机的具体功耗。一份粗略的计算显示,如果每个人都采用最具效率的硬件,每比特的电力消耗为2兆瓦,一年的电力消耗约为加州15000居民的用电量。
但这些围绕比特币的挥霍都是有极限的。Nakamoto当时对于比特币的设计是这样的:每兆数据中约有1400次交易,这意味着每秒的交易数为7次。相比于目前美国的确每秒1736次的Visa卡交易,比特币区块还能更大,不过更大的区块要通过花费更长时间去生成,也会增加一定的风险。
以前的一些经验或许可以参考。当上世纪90年代网络浏览器发明后,数百万的人开启了在线生活,很多预言家都预测互联网会停滞发展。但事实上互联网一直在发展中,同样道理,比特币的发展也不会停滞。更多可用于挖矿的计算设备会更节能,开发者们也会更热衷于基于比特币的平台上开发应用,并使用比特币交易,更快的网络连接也会加速比特币区块的扩大速度。
关于比特币的很多问题并非是缺乏解决方案,比特币机制的任何变化都需要得到比特币社区的许可,而要达成意见并不容易。一方主张尽快扩大比特币区块的规模从而能够成为传统支付的颠覆者,但另一方却认为如果不进行调整,现有的系统可能会在明年崩溃。
6,Hearn先生与Gavin Andresen是两位比特币大亨,是比特币大交易的领头人。他们呼吁挖矿企业来安装比特币的新版本,支持更大的交易规格。一些矿工们的确遭受到了网络攻击,并且在广泛证明其需求与危险下,这次升级与系统正在被浩如烟海的微小交易逼到极限。
这一切都为比特币区块链建立一个替代品的提出奠下基础,可以优化存储分布式账簿而不是加密运行。复试链(multichain),Coin Science所提供的一个定制区块链的平台证明了可能的方向。它还提供了建立一个像比特币一样的区块链的所需资源,并可以用来建立私有链,仅对特定用户开放。如果所有用户开始相信矿工的需求,工作证据被减少或消除,那么现有对账簿的连接就变成了多余的选择。
第一个采用这样的区块链的后代的企业也许正是那些最开始失败并启发了Nakamoto的公司之一:金融。在最近的几个月,私有区块链以防止破坏的银行融资热情开始涨高。比讽刺还要讽刺的是,其中一个原因是反政府自由人士的技术诞生可以让银行在知晓它们的客户与反洗钱规则后更好地符合政府需求。但是这里还有一个更深层的吸引存在。
工业历史家们指出新能源早在最高效的处理方法产生前就存在。当电动机第一次研发时,它们就像之前出现过的巨大的蒸汽引擎机器一样。生产商花费了数十年才看到了分散的电动机可以重组他们做事的任何方面。英国银行在它的数字货币报告中写到,它也在金融行业中看到了相似的东西正在前进中。这要感谢便宜的计算金融公司已经将它们内部的工作数字化,但是它们还没有将自己的组织改变到足以与之相匹配。支付系统目前仍然是中心化的:货币的转移要通过中央银行。当金融公司彼此生意往来时,同步内部的账簿是个耗时几天的繁重任务,桎梏住了资本并带来了风险。
分布式账簿在几分钟甚至几秒钟就完成交易,对解决这些问题和实现数字化银行的承诺可能大有帮助。账簿还可以帮助银行节省很多钱:Santander银行,到2022年这些账簿可以降低行业每年高达200亿美元的账簿。供应商仍然需要证明,他们可以处理过高的比特币交易价格;但大银行已经开始推动比特币这种新兴技术标准化。其中瑞银联合银行,已提议建立一个标准的「结算货币」。R3 CEV的第一要务是块环链的启动,瑞士投资银行与高盛、摩根大通和其它22家银行联合投资,为私人帐开发标准化的架构。
7,银行的问题也并不是唯一的。很多公司和公共机构都难以维护,同时还有经常不兼容的数据库和相互交流的高成本问题。这就是Ethereum想解决的问题,可以说是最雄心勃勃的分布帐项目。21岁的加拿大编程天才Vitalik Buterin的创作品,Ethereum的分布式分类帐可以比「比特币」处理更多的数据。它有一个编程语言,允许用户编写更复杂的智能合约,当货物到达自动支付并打印发票,或如果利润达到一定水平,自动发送给业主股息。Buterin先生希望,如此聪明的「去中心化的自治组织」的形成——基本上,虚拟企业只是给「Ethereum blockchain」设置一些运行的规则。
这样的想法可能有激进影响的领域之一就是在「物联网」——数十亿之前静音日常用品,如冰箱、门闩和草坪洒水装置。从IBM最近的一份题为「设备民主」的报告,认为不可能集中跟踪和管理这些数以十亿美元计的设备,这样的尝试也不明智;这种尝试会让他们容易受到黑客攻击以及政府的监督。分布式寄存器似乎是一个不错的选择。
Ethereum提供的可编程性,不仅仅是让人们的财产被跟踪和注册。它有一些新的用途。在各种各样的方法规则下,车钥匙中嵌入Ethereum blockchain,就可以被出售或出租,产生出租或共享汽车的新P2P。更远,一些人谈论应用该项技术,使自动驾驶的汽车成为社会公共资源。根据预先设置的程序规则,这样的车辆可以自己存储一些数字的钱来支付他们从出租燃料,维修和停车位。
8,不出所料,一些人认为这些计划过于激进。Ethereum1(「创世纪」),8月才被开发,目前只是一个小的启动生态系统集群。虽然Buterin先生在最近的博客中承认这有点缺钱,但区块链最终繁荣的特定细节,远远少于广泛分布式帐的激情,而真实这些激情带领着初创企业和现有的大型企业,检查他们各自的潜力。尽管社会对会计师的能力总是嘲笑,但帐目确实重要。
当今世界深深依赖着复式记账法。其记录着借方和贷方的标准化系统,是理解一个公司核心财务状况的必然选择。在20世纪早期,德国社会学家的维尔纳?桑巴特声称,现代资本主义为了发展,是否绝对需要这样的簿记,值得更深入地去讨论。虽然复式记账系统始于文艺复兴时期的意大利商人,也刚好是一个时间巧合;那时候,复式记账在世界各地的传播比资本主义的传播更缓慢,直到在19世纪末才开始广泛使用。但毫无疑问,技术的根本重要性,不仅仅在于记录一个公司做什么,而是能够定义公司的未来。
帐目,不再需要由公司或政府维护,可以及时刺激新公司和政府关于工作方式的变化、对未来的期望以及当下能做的工作。没有集中记录的系统,可以一样值得信赖,因为他们也能带来彻底的改变。
这些想法虽然仍是一个只适用在几个领域的新奇事物,和他们传播能力以及被扩大的可能性。他们还面临一些未知的阻力。一些比特币的批评人士一直将其视为最新「加州意识形态」的尝试。(加州意识形态意指那种以技术拯救世人的使命感)。这只是一个编码的信任机制,而并非民主政治、合法性和问责制,很难吸引人或者授权。
与此同时,整个世界都会被数字化地记录,这也将有很多好处。如果区块链有一个基本的矛盾,也就是:即使提供了相同的过去和现在,区块链的未来会很不一样。
本文选自《经济学人》,机器之心编译出品,参与成员:黄志臻、Chen、赵赛坡
瑞泰币、莱特币、狗狗币等数字加密货币也都是利用了区块链技术。
㈤ 区块链与公链、私链、联盟链有啥区别
区块链严格定义上被划分为3种类型:公有链,私有链、和联盟链。这三种类型的区块链的核心区别在于访问权限的开放程度,或者叫去中心化程度不同。一般来说,去中心化程度越高、信任和安全程度越高,交易效率则越低。
总的来说,每一种类型的区块链都有自己特定的模式和价值,不能说哪一种更好,只要谁解决了需求谁就是有价值的。
㈥ 区块链的挖矿是什么意思
2009年中本聪发明比特币,并且设定了比特币只有2100万个,加入到比特币网络中,通过参与到区块的生产中,提供工作量证明(PoW),即可获得比特币网络的奖励。这个过程即是挖矿。
“挖矿”的概念取自于我们现实经济生活中已有的概念,黄金挖矿、白银挖矿等,因为矿物是有价值的,所以才驱使人们去付出劳动力来挖。
比特币挖矿还有一个重要的点是因为参与挖矿的矿工认可比特币的价值,他们挖矿挖到的比特币市场上有人愿意花钱。所以,比特币的挖矿是有意义的。
(6)私链挖矿失败扩展阅读
比特币的货币特征
1,去中心化
比特币是第一种分布式的虚拟货币,整个网络由用户构成,没有中央银行。去中心化是比特币安全与自由的保证。
2,全世界流通
比特币可以在任意一台接入互联网的电脑上管理。不管身处何方,任何人都可以挖掘、购买、出售或收取比特币。
3,专属所有权
操控比特币需要私钥,它可以被隔离保存在任何存储介质。除了用户自己之外无人可以获取。
4,低交易费用
可以免费汇出比特币,但最终对每笔交易将收取约1比特分的交易费以确保交易更快执行。
5,无隐藏成本
作为由A到B的支付手段,比特币没有繁琐的额度与手续限制。知道对方比特币地址就可以进行支付。
6,跨平台挖掘
用户可以在众多平台上发掘不同硬件的计算能力。
㈦ 共识算法系列之一:私链的raft算法和联盟链的 pbft 算法
对数据顺序达成一致共识是很多共识算法要解决的本质问题
Fabic的pbft算法实现
现阶段的共识算法主要可以分成三大类:公链,联盟链和私链
私链,所有节点可信
联盟链,存在对等的不信任节点
私链:私链的共识算法即区块链这个概念还没普及时的传统分布式系统里的共识算法,比如 zookeeper 的 zab 协议,就是类 paxos 算法的一种。私链的适用环境一般是不考虑集群中存在作恶节点,只考虑因为系统或者网络原因导致的故障节点。
联盟链:联盟链中,经典的代表项目是 Hyperledger 组织下的 Fabric 项目, Fabric0.6 版本使用的就是 pbft 算法。联盟链的适用环境除了需要考虑集群中存在故障节点,还需要考虑集群中存在作恶节点。对于联盟链,每个新加入的节点都是需要验证和审核的。
公链:公链不仅需要考虑网络中存在故障节点,还需要考虑作恶节点,这一点和联盟链是类似的。和联盟链最大的区别就是,公链中的节点可以很自由的加入或者退出,不需要严格的验证和审核。
在公有链中用的最多的是pow算法和pos算法,这些算法都是参与者的利益直接相关,通过利益来制约节点诚实的工作,解决分布式系统中的拜占庭问题。拜占庭容错算法是一种状态机副本复制算法,通过节点间的多轮消息传递,网络内的所有诚实节点就可以达成一致的共识。
使用拜占庭容错算法不需要发行加密货币,但是只能用于私有链或者联盟链,需要对节点的加入进行权限控制;不能用于公有链,因为公有链中所有节点都可以随意加入退出,无法抵挡女巫攻击(sybil attack)
raft 算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一时刻只能是这三种状态的其中一种,这三种角色是可以随着时间和条件的变化而互相转换的。
raft 算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。raft 算法支持最大的容错故障节点是(N-1)/2,其中 N 为 集群中总的节点数量。
国外有一个动画介绍raft算法介绍的很透彻,链接地址为: http://thesecretlivesofdata.com/raft/ 。这个动画主要包含三部分内容,第一部分介绍简单版的领导者选举和日志复制的过程,第二部分内容介绍详细版的领导者选举和日志复制的过程,第三部分内容介绍的是如果遇到网络分区(脑裂),raft 算法是如何恢复网络一致的。
pbft 算法的提出主要是为了解决拜占庭将军问题
要让这个问题有解,有一个 十分重要的前提 ,那就是 信道必须是可靠的 。如果信道不能保证可靠,那么拜占庭问题无解。关于信道可靠问题,会引出两军问题。两军问题的结论是,在一个不可靠的通信链路上试图通过通信以达成一致是基本不可能或者十分困难的。
拜占庭将军问题最早是由 Leslie Lamport 与另外两人在 1982 年发表的论文《The Byzantine Generals Problem 》提出的, 他证明了在将军总数大于 3f ,背叛者为f 或者更少时,忠诚的将军可以达成命令上的一致,即 3f+1<=n 。算法复杂度为 o(n^(f+1)) 。而 Miguel Castro (卡斯特罗)和 Barbara Liskov (利斯科夫)在1999年发表的论文《 Practical Byzantine Fault Tolerance 》中首次提出 pbft 算法,该算法容错数量也满足 3f+1<=n ,算法复杂度为 o(n^2)。
首先我们先来思考一个问题,为什么 pbft 算法的最大容错节点数量是(n-1)/3,而 raft 算法的最大容错节点数量是(n-1)/2 ?
对于raft算法,raft算法的的容错只支持容错故障节点,不支持容错作恶节点。什么是故障节点呢?就是节点因为系统繁忙、宕机或者网络问题等其它异常情况导致的无响应,出现这种情况的节点就是故障节点。那什么是作恶节点呢?作恶节点除了可以故意对集群的其它节点的请求无响应之外,还可以故意发送错误的数据,或者给不同的其它节点发送不同的数据,使整个集群的节点最终无法达成共识,这种节点就是作恶节点。
raft 算法只支持容错故障节点,假设集群总节点数为n,故障节点为 f ,根据小数服从多数的原则,集群里正常节点只需要比 f 个节点再多一个节点,即 f+1 个节点,正确节点的数量就会比故障节点数量多,那么集群就能达成共识。因此 raft 算法支持的最大容错节点数量是(n-1)/2。
对于 pbft 算法,因为 pbft 算法的除了需要支持容错故障节点之外,还需要支持容错作恶节点。假设集群节点数为 N,有问题的节点为 f。有问题的节点中,可以既是故障节点,也可以是作恶节点,或者只是故障节点或者只是作恶节点。那么会产生以下两种极端情况:
第一种情况,f 个有问题节点既是故障节点,又是作恶节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。也就是说这种情况支持的最大容错节点数量是 (n-1)/2。
第二种情况,故障节点和作恶节点都是不同的节点。那么就会有 f 个问题节点和 f 个故障节点,当发现节点是问题节点后,会被集群排除在外,剩下 f 个故障节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。所以,所有类型的节点数量加起来就是 f+1 个正确节点,f个故障节点和f个问题节点,即 3f+1=n。
结合上述两种情况,因此 pbft 算法支持的最大容错节点数量是(n-1)/3
pbft 算法的基本流程主要有以下四步:
客户端发送请求给主节点
主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程。
节点处理完三阶段流程后,返回消息给客户端。
客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。
为什么收到 f+1 个节点的相同消息后就代表共识已经正确完成?从上一小节的推导里可知,无论是最好的情况还是最坏的情况,如果客户端收到 f+1 个节点的相同消息,那么就代表有足够多的正确节点已全部达成共识并处理完毕了。
3.算法核心三阶段流程
算法的核心三个阶段分别是 pre-prepare 阶段(预准备阶段),prepare 阶段(准备阶段), commit 阶段(提交阶段)
流程的对比上,对于 leader 选举这块, raft 算法本质是谁快谁当选,而 pbft 算法是按编号依次轮流做主节点。对于共识过程和重选 leader 机制这块,为了更形象的描述这两个算法,接下来会把 raft 和 pbft 的共识过程比喻成一个团队是如何执行命令的过程,从这个角度去理解 raft 算法和 pbft 的区别。
一个团队一定会有一个老大和普通成员。对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行。那什么时候重新老大呢?只有当老大挂了才重选老大,不然生是老大的人,死是老大的鬼。
对于 pbft 算法,共识过程就是:老大向我发送命令时,当我认为老大的命令是有问题时,我会拒绝执行。就算我认为老大的命令是对的,我还会问下团队的其它成员老大的命令是否是对的,只有大多数人 (2f+1) 都认为老大的命令是对的时候,我才会去执行命令。那什么时候重选老大呢?老大挂了当然要重选,如果大多数人都认为老大不称职或者有问题时,我们也会重新选择老大。
四、结语
raft 算法和 pbft 算法是私链和联盟链中经典的共识算法,本文主要介绍了 raft 和 pbft 算法的流程和区别。 raft 和 pbft 算法有两点根本区别:
raft 算法从节点不会拒绝主节点的请求,而 pbft 算法从节点在某些情况下会拒绝主节点的请求 ;
raft 算法只能容错故障节点,并且最大容错节点数为 (n-1)/2 ,而 pbft 算法能容错故障节点和作恶节点,最大容错节点数为 (n-1)/3 。
pbft算法是通过投票来达成共识,可以很好的解决包括分叉等问题的同时提升效率。但仅仅比较适合于联盟链私有链,因为两两节点之间通信量是O(n^2)(通过优化可以减少通信量),一般来说不能应用于超过100个节点。
pbft有解的前提是 信道必须是可靠的 ,存在的问题是 可扩展性(scalability)差
部分来自: https://blog.csdn.net/kojhliang/article/details/80270223
区块链在设计上就是为了BFT
㈧ 比特币之挖矿与共识(二)
比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它 转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。
独立校验还确保了诚实 的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失 去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。
当一个节点接收到一个新的区块,它将对照一个长长的标准清单对该区块进行验证,若没有通过验证,这个区块将被拒 绝。这些标准可以在比特币核心客户端的CheckBlock函数和CheckBlockHead函数中获得
它包括:
为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?
这 是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒 绝,因此,该交易就不会成为总账的一部分。矿工们必须构建一个完美的区块,基于所有节点共享的规则,并且根据正 确工作量证明的解决方案进行挖矿,他们要花费大量的电力挖矿才能做到这一点。如果他们作弊,所有的电力和努力都 会浪费。这就是为什么独立校验是去中心化共识的重要组成部分。
比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。一旦一个节点验证了一个新的区块, 它将尝试将新的区块连接到到现存的区块链,将它们组装起来。
节点维护三种区块:第一种是连接到主链上的,第二种是从主链上产生分支的(备用链),最后一种是在已知链中没有 找到已知父区块的。在验证过程中,一旦发现有不符合标准的地方,验证就会失败,这样区块会被节点拒绝,所以也不 会加入到任何一条链中。
任何时候,主链都是累计了最多难度的区块链。在一般情况下,主链也是包含最多区块的那个链,除非有两个等长的链 并且其中一个有更多的工作量证明。主链也会有一些分支,这些分支中的区块与主链上的区块互为“兄弟”区块。这些区 块是有效的,但不是主链的一部分。 保留这些分支的目的是如果在未来的某个时刻它们中的一个延长了并在难度值上超 过了主链,那么后续的区块就会引用它们。
如果节点收到了一个有效的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被认为是“孤块”。孤块会被 保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块并且将其连接到现有区块链上,节点就会将孤块从 孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时间间隔内被挖出来,节点有 可能会以相反的顺序接收到它们,这个时候孤块现象就会出现。
选择了最大难度的区块链后,所有的节点最终在全网范围内达成共识。随着更多的工作量证明被添加到链中,链的暂时性差异最终会得到解决。挖矿节点通过“投票”来选择它们想要延长的区块链,当它们挖出一个新块并且延长了一个链, 新块本身就代表它们的投票。
因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链全貌。
解决的办法是,每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就 是最长的或最大累计工作的链(greatest cumulative work chain)。节点通过累加链上的每个区块的工作量,得到建立这个链所要付出的工作量证明的总量。只要所有的节点选择最长累计工作的区块链,整个比特币网络最终会收敛到一致的状态。分叉即在不同区块链间发生的临时差异,当更多的区块添加到了某个分叉中,这个问题便会迎刃而解。
提示由于全球网络中的传输延迟,本节中描述的区块链分叉自动会发生。
然而,倒三角形的区块不会被丢弃。它被链接到星形链的父区块,并形成备用链。虽然节点X认为自己已经正确选择了获胜链,但是它还会保存“丢失”链,使得“丢失”链如果可能最终“获胜”,它还具有重新打包的所需的信息。
这是一个链的重新共识,因为这些节点被迫修改他们对块链的立场,把自己纳入更长的链。任何从事延伸星形-倒三角形的矿工现在都将停止这项工作,因为他们的候选人是“孤儿”,因为他们的父母“倒三角形”不再是最长的连锁。
“倒三角形”内的交易重新插入到内存池中用来包含在下一个块中,因为它们所在的块不再位于主链中。
整个网络重新回到单一链状态,星形-三角形-菱形,“菱形”成为链中的最后一个块。所有矿工立即开始研究以“菱形”为父区块的候选块,以扩展这条星形-三角形-菱形链。
从理论上来说,两个区块的分叉是有可能的,这种情况发生在因先前分叉而相互对立起来的矿工,又几乎同时发现了两个不同区块的解。
然而,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则非常罕见。比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。
2012年以来,比特币挖矿发展出一个解决区块头基本结构限制的方案。在比特币的早期,矿工可以通过遍历随机数 (Nonce)获得符合要求的hash来挖出一个块。
难度增长后,矿工经常在尝试了40亿个值后仍然没有出块。然而,这很容 易通过读取块的时间戳并计算经过的时间来解决。因为时间戳是区块头的一部分,它的变化可以让矿工用不同的随机值 再次遍历。当挖矿硬件的速度达到了4GH/秒,这种方法变得越来越困难,因为随机数的取值在一秒内就被用尽了。
当出现ASIC矿机并很快达到了TH/秒的hash速率后,挖矿软件为了找到有效的块, 需要更多的空间来储存nonce值 。可以把时间戳延后一点,但将来如果把它移动得太远,会导致区块变为无效。
区块头需要信息来源的一个新的“变革”。解决方案是使用coinbase交易作为额外的随机值来源,因为coinbase脚本可以储存2-100字节的数据,矿工们开始使用这个空间作为额外随机值的来源,允许他们去探索一个大得多的区块头值范围来找到有效的块。这个coinbase交易包含在merkle树中,这意味着任何coinbase脚本的变化将导致Merkle根的变化。
8个字节的额外随机数,加上4个字节的“标准”随机数,允许矿工每秒尝试2^96(8后面跟28个零)种可能性而无需修改时间戳。如果未来矿工穿过了以上所有的可能性,他们还可以通过修改时间戳来解决。同样,coinbase脚本中也有更多额外的空间可以为将来随机数的扩展做准备。
比特币的共识机制指的是,被矿工(或矿池)试图使用自己的算力实行欺骗或破坏的难度很大,至少理论上是这样。就像我们前面讲的,比特币的共识机制依赖于这样一个前提,那就是绝大多数的矿工,出于自己利益最大化的考虑,都会 通过诚实地挖矿来维持整个比特币系统。然而,当一个或者一群拥有了整个系统中大量算力的矿工出现之后,他们就可以通过攻击比特币的共识机制来达到破坏比特币网络的安全性和可靠性的目的。
值得注意的是,共识攻击只能影响整个区块链未来的共识,或者说,最多能影响不久的过去几个区块的共识(最多影响过去10个块)。而且随着时间的推移,整个比特币块链被篡改的可能性越来越低。
理论上,一个区块链分叉可以变得很长,但实际上,要想实现一个非常长的区块链分叉需要的算力非常非常大,随着整个比特币区块链逐渐增长,过去的区块基本可以认为是无法被分叉篡改的。
同时,共识攻击也不会影响用户的私钥以及加密算法(ECDSA)。
共识攻击也 不能从其他的钱包那里偷到比特币、不签名地支付比特币、重新分配比特币、改变过去的交易或者改变比特币持有纪录。共识攻击能够造成的唯一影响是影响最近的区块(最多10个)并且通过拒绝服务来影响未来区块的生成。
共识攻击的一个典型场景就是“51%攻击”。想象这么一个场景,一群矿工控制了整个比特币网络51%的算力,他们联合起来打算攻击整个比特币系统。由于这群矿工可以生成绝大多数的块,他们就可以通过故意制造块链分叉来实现“双重支 付”或者通过拒绝服务的方式来阻止特定的交易或者攻击特定的钱包地址。
区块链分叉/双重支付攻击指的是攻击者通过 不承认最近的某个交易,并在这个交易之前重构新的块,从而生成新的分叉,继而实现双重支付。有了充足算力的保证,一个攻击者可以一次性篡改最近的6个或者更多的区块,从而使得这些区块包含的本应无法篡改的交易消失。
值得注意的是,双重支付只能在攻击者拥有的钱包所发生的交易上进行,因为只有钱包的拥有者才能生成一个合法的签名用于双重支付交易。攻击者在自己的交易上进行双重支付攻击,如果可以通过使交易无效而实现对于不可逆转的购买行为不予付款, 这种攻击就是有利可图的。
攻击者Mallory在Carol的画廊买了描绘伟大的中本聪的三联组画(The Great Fire),Mallory通过转账价值25万美金的比特币 与Carol进行交易。在等到一个而不是六个交易确认之后,Carol放心地将这幅组画包好,交给了Mallory。这时,Mallory 的一个同伙,一个拥有大量算力的矿池的人Paul,在这笔交易写进区块链的时候,开始了51%攻击。
首先,Paul利用自己矿池的算力重新计算包含这笔交易的块,并且在新块里将原来的交易替换成了另外一笔交易(比如直接转给了Mallory 的另一个钱包而不是Carol的),从而实现了“双重支付”。这笔“双重支付”交易使用了跟原有交易一致的UTXO,但收款人被替换成了Mallory的钱包地址。
然后,Paul利用矿池在伪造的块的基础上,又计算出一个更新的块,这样,包含这 笔“双重支付”交易的块链比原有的块链高出了一个块。到此,高度更高的分叉区块链取代了原有的区块链,“双重支付”交 易取代了原来给Carol的交易,Carol既没有收到价值25万美金的比特币,原本拥有的三幅价值连城的画也被Mallory白白 拿走了。
在整个过程中,Paul矿池里的其他矿工可能自始至终都没有觉察到这笔“双重支付”交易有什么异样,因为挖矿程序都是自动在运行,并且不会时时监控每一个区块中的每一笔交易。
为了避免这类攻击,售卖大宗商品的商家应该在交易得到全网的6个确认之后再交付商品。或者,商家应该使用第三方 的多方签名的账户进行交易,并且也要等到交易账户获得全网多个确认之后再交付商品。一条交易的确认数越多,越难 被攻击者通过51%攻击篡改。
对于大宗商品的交易,即使在付款24小时之后再发货,对买卖双方来说使用比特币支付也 是方便并且有效率的。而24小时之后,这笔交易的全网确认数将达到至少144个(能有效降低被51%攻击的可能性)。
需要注意的是,51%攻击并不是像它的命名里说的那样,攻击者需要至少51%的算力才能发起,实际上,即使其拥有不 到51%的系统算力,依然可以尝试发起这种攻击。之所以命名为51%攻击,只是因为在攻击者的算力达到51%这个阈值 的时候,其发起的攻击尝试几乎肯定会成功。
本质上来看,共识攻击,就像是系统中所有矿工的算力被分成了两组,一 组为诚实算力,一组为攻击者算力,两组人都在争先恐后地计算块链上的新块,只是攻击者算力算出来的是精心构造 的、包含或者剔除了某些交易的块。因此,攻击者拥有的算力越少,在这场决逐中获胜的可能性就越小。
从另一个角度 讲,一个攻击者拥有的算力越多,其故意创造的分叉块链就可能越长,可能被篡改的最近的块或者或者受其控制的未来 的块就会越多。一些安全研究组织利用统计模型得出的结论是,算力达到全网的30%就足以发动51%攻击了。全网算力的急剧增长已经使得比特币系统不再可能被某一个矿工攻击,因为一个矿工已经不可能占据全网哪怕的1%算 力。
待补充
待补充