区块链技术,比特币技术的汇总笔记

来源:互联网 发布:淘宝下拉推广 编辑:程序博客网 时间:2024/05/17 09:42

区块链:

所谓区块链技术,也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。最早是比特币的基础技术,目前世界各地均在研究,可广泛应用于金融等各领域。



比特币:

概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。



什么是区块链共识?

作者: tuanzhang

共识(Consensus)过程是一个非常有趣的过程。

在我们的日常生活中,几乎所有的事情都是达成共识的过程。

达成共识越分散的过程,其效率就越低,但满意度越高,因此也越稳定;相反,达成共识越集中的过程,效率越高,也越容易出现独裁和腐败现象。

达成共识常用的一种方法就是通过物质上的激励以对某个事件达成共识;但是这种共识存在的问题就是容易被外界其它更大的物质激励所破坏。

还有一种就是群体中的个体按照符合自身利益或整个群体利益的方向来对某个事件自发地达成共识;当然形成这种自发式的以维护群体利益为核心的共识过程还是需要时间和环境因素的,但是一旦达成这样的共识趋势,其共识结果也越稳定,越不容易被破坏。

在比特币和其它区块链币中,也存在如何达成共识的问题。或者说,比特币或其它区块链币最核心的问题也是如何在去中心化的环境中达成共识。

区块链是比特币背后的核心技术,也是支撑比特币的基础架构。因此在谈区块链共识,就必然要谈比特币的共识。

比特币最核心的突破是在去中心化的情况下对交易事件达成了共识,即在没有中心组织的情况下对某个交易的有效性达成了一致。

比特币实现这个共识的方法主要包括两个部分:

激励;即通过每个区块产生一定量的新比特币来激励参与者;

引入外部资源确保安全;即通过大量的外部计算来确保共识的安全性,也就是工作量证明(Proof of Power);

这也是几乎所有PoW币种所采用的的方法。

而这套方法要能持续长期运行下去的前提就是:

这种激励对参与者要有足够的吸引力;也就是说比特币要一直涨价,才能吸引参与者持续参与挖矿计算,以维护整个网络的运行;否则就会导致参与的人减少,破坏网络安全;

没有外部攻击;由于比特币引入了外部计算来确保安全,因此只要有足够的挖矿算力(超过维护系统算力的51%)就能对系统成功进行攻击,这也是比特币长期存在的安全隐患之一;因为只要有钱,就能买到设备和算力。

正是由于比特币存在的问题,例如消耗大量的资源、外部51%攻击等,出现了PoS(Proof of Stake)共识机理。

总体上,PoS共识理论和实践目前仍处在探索阶段。

最原始的PoS机理就是用股权代替PoW中的挖矿算力,来模拟比特币的挖矿过程。请注意,这个过程没有引入外部资源,而是仅仅依靠自身的币种股份来维护网络安全,因此其不需要消耗大量能源来进行计算;而且由于其没有引入外部的资源,因此不会担心外部攻击,例如外界的算力攻击。

看起来PoS是很完美的,但是它存在一个严重漏洞。

PoS存在内部的Nothing-at-Stake攻击。

什么是Nothing-at-Stake(常写作N@S)攻击?

假设系统中出现了两个分支链,那么对于持有币的”挖矿者“来讲,最佳的操作策略就是同时在两个分支上进行“挖矿”,这样,无论哪个分支胜出,对币种持有者来讲,都会获得本属于他的利益,即不会有利益损失。而且由于不需要算力消耗,因此PoS中在两个分支上挖矿是可行的。

这导致的问题是,只要系统存在分叉,“矿工们”都会同时在这几个分支上挖矿;因此在某个情况下,发起攻击的分叉链是极有可能成功的,因为所有人也都在这个分叉链上达成了共识;而且甚至不用持有51%的币量,就可以成功发起分叉攻击;

而这在PoW中是不可行的,因为挖矿需要消耗算力,矿工只能在一个分支上进行挖矿。

第二个问题是重写历史攻击;即攻击者可以通过购买原始持有币种的账户来从头发起攻击,重新分叉一个区块链。因为原始的币种持有者可以将币转移至其它账户,因此他是可以在没有损失的情况下将原始账户出售给攻击者的。攻击者需要的就是有足够数量币的原始账户;当然了,这也只是概率问题,因为有可能原始账户持有者不会出售他们的账户,但是理论上确实存在这种攻击。

第三个问题是,尽管PoS中的挖矿不用消耗算力,运行成本很低,但是也存在如何激励矿工的问题。因为一般的PoS系统是没有新币产生的,矿工只能赚取交易费,而且在交易费不高的情况下,对矿工的激励也是很有限的。

当然了,也有很多PoS币种解决这个问题的办法就是持续的再产生新币来激励挖矿者,这导致的问题就是通胀。

上述3个问题是PoS要解决的,尤其是N@S的问题尤为重要,因为如果没有其它约束机制,这种攻击是完全有可能实现的。

从以上可以看出,无论是PoW还是PoS机理的共识过程,其必要条件有两个:

信息公开共享;

个体参与;

以现实为例,事件的信息越透明、所涉及到的人员参与度越高,最终形成的共识也就越稳定、越持久。这与区块链共识是一致的。

以上是个人的对区块链共识的一些学习心得,期望能看到更多这方面的讨论和研究文章,与爱好者一起分享。


什么是智能合约?

区块链tuanzhang 1个月前 (09-01) 37℃0评论

智能合约被认为是使用区块链技术的又一个热门技术,在这个领域内,最著名的初创企业就属Ethereum和Eris Industries了,近期很多媒体也一直在报道相关的新闻。

智能合约其实并不是特别智能,也不是严格意义上的合约。

智能合约是什么

从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。

从技术角度来讲,智能合约被认为是网络服务器,只是这些服务器并不是使用IP地址架设在互联网上,而是架设在区块链上。从而可以在其上面运行特定的合约程序。

但是与网络服务器不同的是,所有人都可以看到智能合约,因为这些智能合约的代码和状态都在区块链上(假设区块链是公开的)。而且,与网络服务器不同的是,智能合约不依赖某个特定的硬件设备,事实上,智能合约的代码由所有参与挖矿的设备来执行(这也意味着进入单个合约的算力是有限的,尽管挖矿难度的自动调整会调节这种影响)。

智能合约是编程在区块链上的汇编语言。通常人们不会自己写字节码,但是会从更高级的语言来编译它,例如用Solidity,与JavaScript类似的专用语言。这些字节码确实给区块链的功能性提供了指引,因此代码可以很容易与它进行交互,例如转移密码学货币和记录事件。

代码的执行是自动的:要么成功执行,或者所有的状态变化都撤消(包括从当前失败的合约中已经送或接收的信息。)这是很重要的,因为它避免了合约部分执行的情况(例如,在证券购买交易中,证券所有者已经转移发送了证券,但是密码学货币的支付转移却失败了)。在区块链环境中,这尤为重要,因为没有办法来撤消执行错误所带来的不好的后果(而且如果对手不配合的话,根本就没有办法逆转交易)。

智能合约的使用案例


证券登记和清算。合约状态包含了证券所有权的信息。如果登记的证券所有者注意到该合约中证券已经出售给了其他的参与者,其他参与者就会把密码学货币发送到担保账户,然后证券登记信息就会更新,货币就会转发给原来的证券持有者。取决于哪个信息先到达,证券或货币都会保管在一个担保账户中以避免双重使用,当交易取消或过时后,担保也将取消。


银行现有账户。区块链本身已经使用了密码学货币账户,因此这里不需要智能合约。然而,现实生活中的人们想说欧元或美元账户,与上面所讲到的证券登记账户类似。使用合约会存在合约对手风险,正如在现实世界中的任何银行一样。这种风险可以通过对手风险监管来转移,或者通过担保来消除这种风险。


衍生产品、博彩。假设对手同意某个在互联网能够访问的数据源,他们就可以对数据源的价值进行衍生合约或博彩。

预付款和再充值。合约可以和移动SIM卡、预支付电费卡等绑定,当收到密码学货币时,就可以进行充值。

智能合约面临的问题

智能合约目前还处在初级阶段,尚未有任何实质进展。关键问题是信任度的问题,这与影响区块链实施的问题类似:这些系统都设计成了无需信任的环境,这意味着无法改正出现的错误。例如,在区块链中,如果你将货币发送给某个地址,这个操作是无法撤销的。因此,如果你与欺诈者进行交易 – 或者你已经将货币发送到错误的地址中 – 那么金钱损失是无法挽回的。

智能合约能够转移欺诈对手的问题 – 事实上,这就是智能合约设计的原因之一:无论何时,合约都能能够可靠地监控合约中参与方的执行情况,参与方是无法进行欺骗的。

然而,问题并没有解决,只不过是出现在了新的层级:例如,合约可能有漏洞,能够转移证券,但却无法转移货币。

在现实生活中,这些事情可以通过中心化的系统来撤消。但是如果是去中心化的系统,则只能自己承担风险。

同样地,也有欺诈的问题:某人需要设计(编程)合约,在合约设计时就会需要确保没有欺诈的问题。至少参与者要确保:

  • 高层级(例如Solidity)的代码中需要充分描述合约参与方的目的

  • 代码中的字节码实际上相当于高层级的代码,需要在进入合约之前进行审核

  • 合约信息需要很好地理解,以避免出现乌龙指操作(例如,人们用错误的报价方式-例如USD/ERU而不是EUR/USD-这会导致严重损失。

在现实生活中,上述的这些问题原则上都可以在事后进行处理解决,如果需要的话,还可以通过法院,但是在无需信任的工作量证明区块链中这是不可能的:问题是为什么人们想要依赖一个工作量证明系统(背后的原理是浪费大量的能源来挖矿,这样的话攻击这个系统在经济上是不划算的)而不是使用一个中心化运行的公开账本和依赖中心化的权力机构 – 政府、法院等 – 来执行合约。


  比特币技术体系

比特币(BitCoin)是最早也是全球最广泛使用和真正意义的去中心化区块链技术,因此他的开源技术体系非常值得参考。

比特币区块链的核心技术框架采用C++语言开发,共识算法采用POW算法,工作量(挖矿)证明获得记账权,容错50%,实现全网记账,公网性能TPS<7。

开源地址为:https://github.com/bitcoin/bitcoin

 

虽然说POW算法比较低效率和耗能,比特币区块链由于推出时间比较早又不够强大(如不支持智能合约),但不可否认的是,目前市场上相对成熟和稳定的区块链体系还是比特币。市面上群魔乱舞的山寨币,正是基于比特币的源代码照搬或小改动而创造的,在比特币区块链的体系基础上,还创造了几种区块链技术体系:

 

彩色币(染色币),彩色币本身就是比特币,是在历史上的创世交易里面被转移过的比特币。在技术上将比特币网络从其货币价值中抽离出来,它们具有一些特殊的属性,比如支持代理或聚集点,从而具有与比特币面值无关的价值。彩色币可以用作替代货币、商品证书、智能财产以及其他金融工具,如股票和债券等。

 

闪电网络,是为了解决比特币区块链的瓶颈处理能力而生的,他可以有效解决时延、容量扩展、最终性的问题,为比特币区块链提供了一个可扩展的微支付通道网络,使用闪电网络后,TPS最大可以扩展到300。交易双方若在区块链上预先设有支付通道,就可以多次、高频、双向地通过轧差方式实现瞬间确认的微支付;双方若无直接的点对点支付通道,只要网络中存在一条连通双方的、由多个支付通道构成的支付路径,闪电网络也可以利用这条支付路径实现资金在双方之间的可靠转移。

 

比特币侧链

侧链是以锚定比特币为基础的新型区块链,就像美金锚定到金条一样。比特币的在区块链相当在货币体系的黄金地位,因为他是最去中心化、最多分布节点、最公平区块链。侧链是以融合的方式实现加密货币金融生态的目标,而不是像其它加密货币一样排斥现有的系统。利用侧链,我们可以轻松的建立各种智能化的金融合约,股票、期货、衍生品等等。你可以有成千上万个锚定到比特币上的侧链,特性和目的各不相同,所有这些侧链依赖于比特币主区块链保障的弹性和稀缺性。比较著名的比特币侧链是Rootstock和BlockStream推出的元素链。

 

Rootstock是一个基于比特币侧链的开源智能合约平台,他使得比特币拥有了智能合约,基于Rootstock的智能合约能够运行无数应用,为核心比特币网络增加价值和功能。Rootstock使用一种比特币双向挂钩技术,这种双向挂钩以一种固定的转换率输送或输出Rootstock上的比特币,Rootstock双向挂钩是一种混合驱链和侧链的技术。更值得关注的是,Rootstock向后兼容以太坊,实现了以太坊虚拟机的一个改进版本,所以以太坊发布的DApps程序能够轻松地在Rootstock上使用,实现比特币级别的安全性和以太坊大量Dapps的复用性,更快的执行性并和比特币发生更强的相互作用。使用Rootstock可以将性能扩展到TPS为300。

 

元素链(Elements)是Blockstream的开源侧链项目,同样使用比特币双向挂钩技术,除了智能合约外,他还给比特币快速带来许多创新技术,包括私密交易、证据分离、相对锁定时间、新操作码、签名覆盖金额等等特性。核心技术框架采用C++语言开发,开源地址为:https://github.com/ElementsProject/elements


优点

  1  完全去处中心化,没有发行机构,也就不可能操纵发行数量。其发行与流通,是通过开源的p2p算法实现。
  2  匿名、免税、免监管。
  3  健壮性。比特币完全依赖p2p网络,无发行中心,所以外部无法关闭它。比特币价格可能波动、崩盘,多国政府可能宣布它非法,但比特币和比特币庞大的p2p网络不会消失。
  4  无国界、跨境。跨国汇款,会经过层层外汇管制机构,而且交易记录会被多方记录在案。但如果用比特币交易,直接输入数字地址,点一下鼠标,等待p2p网络确认交易后,大量资金就过去了。不经过任何管控机构,也不会留下任何跨境交易记录。
  5  山寨者难于生存。由于比特币算法是完全开源的,谁都可以下载到源码,修改些参数,重新编译下,就能创造一种新的p2p货币。但这些山寨货币很脆弱,极易遭到51%攻击。任何个人或组织,只要控制一种p2p货币网络51%的运算能力,就可以随意操纵交易、币值,这会对p2p货币构成毁灭性打击。很多山寨币,就是死在了这一环节上。而比特币网络已经足够健壮,想要控制比特币网络51%的运算力,所需要的cpu/gpu数量将是一个天文数字。

缺点

   1 交易平台的脆弱性。比特币网络很健壮,但比特币交易平台很脆弱。交易平台通常是一个网站,而网站会遭到黑客攻击,或者遭到主管部门的关闭。
   2 交易确认时间长。比特币钱包初次安装时,会消耗大量时间下载历史交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。
  3  价格波动极大。由于大量炒家介入,导致比特币兑换现金的价格如过山车一般起伏。使得比特币更适合投机,而不是匿名交易。
   4 大众对原理不理解,以及传统金融从业人员的抵制。活跃网民了解p2p网络的原理,知道比特币无法人为操纵和控制。但大众并不理解,很多人甚至无法分清比特币和Q币的区别。“没有发行者”是比特币的优点,但在传统金融从业人员看来,“没有发行者”的货币毫无价值。[10]



多重签名:

在数字签名应用中,有时需要多个用户对同一个文件进行签名和认证。比如,一个公司发布的声明中涉及财务部、开发部、销售部、售后服务部等部门,需要的到这些部门签名认可,那么,就需要这些部门对这个声明文件进行签名。能够实现多个用户对同一文件进行签名的数字签名方案称作多重数字签名方案。
多重签名就是多个用户对同一个消息进行数字签名。

一般来说一个比特币地址对应一个私钥,动用这个地址中的资金需要私钥的掌握者发起签名才行。而多重签名技术,简单来说,就是动用一笔资金时需要多个私钥签名才有效。比如说,某笔资金对应有3个私钥,而必须至少有其中任意2个私钥参与签名才能动用,只有1个私钥参与签名则是无效的。而这个2/3可以推广到任意的m/n,比如3/3、1/5、6/11等,当然m要小于等于n。


1.中介担保

这正是币须网正在试探的模式,简单来说就是支付宝的模式。顾客先进行支付,商家才发货,但支付后商家并非直接收到钱,而是要等待交易完成后才能确认。而在顾客支付之后,这笔钱既脱离了顾客的控制,也尚未由商家控制,如果交易发生争议,中介者可以进行仲裁,把资金退还给顾客。

以上所说的和我们熟悉的支付宝模式是一样的,但比特币多重签名额外的意义在哪里呢?也就是在,这笔钱在脱离顾客控制并尚未由商家控制的期间,它也同样不能由中介平台所控制,也就是说,中介平台不能随意动用这笔钱,更不能卷款跑路。

相比支付宝,比特币的中介担保交易限制了中介者作恶的能力。例如,在交易期间,中介者拿着暂时“冻结”的资金去赌博(或者说投资),然后血本无归,那么商家就收不到钱了。或者,中介者耍赖或者根据某些“法规”,没收了这笔资金,那么商家就得费心去找中介者讨债了,比如说淘宝网完全可能借口比特币是非法的,把交易双方已经达成的交易没收掉,卖家声诉无门,买家也爱莫能助(这种情况好像已经发生过了)。

简单来说,在传统的支付宝模式中,中介的引入一方面增加了一些让交易更可靠地元素,但另一方面又增加了新的不稳定因素,也就是说,一方面你对交易对象的信任不需要那么高了,但另一方面却额外地需要无条件信任中介平台的公正性和可靠性。

而在多重签名的支持下,例如,顾客、商家、中介这三者形成“2/3”,那就意味着,中介者的加入对于可靠性的提升完全只有正面意义而丝毫没有新增任何不确定性。也就是说,如果2人交易原本就能够成功,那么在新加入中介者的情况下必定也还是能成功。只要顾客和商家这2个私钥确认了交易,那么整个交易就完成了,中介者是否守信没有任何影响。而只有在顾客和商家出现分歧时,中介者才有了权力。

改变m/n的数字和私钥分配的权重,还可能设计出各种更复杂的中介模式,例如,同时引入3个担保人,当交易双方不一致时需要3个担保人中的2个才能裁决之类。

2.在线钱包

多重签名的在线钱包现在也已经有多家实例了。比如说,本地掌握一个私钥,而网站掌握另一个私钥,只有这两把私钥同时签名才能够动用余额。这种在线钱包当然比一般钱包更麻烦一些,但相对更加安全,它除了保证网站不能任意挪用客户资金之外,也保证了无论是网站被黑还是客户的电脑被黑,资金都无法被窃取,除非两边同时被同一个黑客攻破。

这类在线钱包的意义主要是双重的安全保障,但也可以扩展延伸出更多的服务,例如多用户共享的在线钱包。

3.共同财产/合伙经营

多人共享钱包当然也有各种m/n的模式,应用场景有很多。我们先来说1/2模式。也就是说,1个钱包对应2个私钥,其中任意一把都能动用其中的资金。

你也许要问了:这不是多此一举吗?让两个人掌握同一个私钥不就行了?1/n的模式有何意义呢?1/2与1/1的最基本的区别就在于:账目清晰。也就是说,虽然两个人都有相同的权限动用同一笔资金,但每一笔开支具体是谁签发的,却无法伪造。也就是说,你我都有权动用这笔资金,但我无权冒充你来动用。

简单的应用案例比如夫妻共同财产以及合伙经营。在正常情况下,夫妻或哥们两个不分彼此,共同管理资金,其中一方如果有些事故或意外情况,总资产仍能被及时动用。而一旦出现分歧和争议,要回过头来清算一番时,账目又是清楚分明的,哪笔钱是谁滥用的将是无法抵赖的。

4.监督管理/股份权重

对合伙经营的1/n模式进一步扩展到n/m,就可以实现更复杂的资金管理制度。例如在公司内部,动用资金时先由财务发起支付,而由总监审阅签署,总监想要动用资金时也需要财务来确认。这样一来,任何人想要卷款私逃都是不可能的了。

另外,根据私钥的分配,多重签名可以支持一些简单的权重分配机制。例如四个人合伙创业,老大占40%,三个小弟各占20%,那么可以设计3/5模式,其中老大掌握2个私钥,小弟们各1个,如此的话老大的决策只要争取到1个小弟附议就能启动,但3个小弟联合起来也可能推翻老大。类似的机制当然难以支持完善的股票形式,但对于初创企业或者特定的小项目来说,是一个简便而可靠的实现方式。

5.数字遗产

最后再提一下数字遗产的应用。老人在世的时候当然希望全权掌控自己的财产,一旦过早把密码交给后代,也许被不肖子拿去赌博一夜输光了呢。然而,如果在去世前未能及时移交密码的话,这笔数字财产可能就被带到棺材里了。许多数字资产都有类似的问题,但比特币提供了一种解决方案。

最简单的场景比如是2/2模式,老人掌握全部2个私钥,而把其中1个私钥交给儿子,另一个则交给公证机构或公证人,等老人去世后如果没能亲自移交私钥,那么就可以申请公证者移交遗产。而在此之前,除非儿子和公证人串通,他们任何一方都无法动用这笔钱。

总结

以上勾勒的场景都是比较粗糙简单的,具体实践中当然会有更灵活、更丰富的样式。在所有场景中,多重签名的意义无非也是比特币本身的意义:自由、透明、去中心化。通过对权力滥用施加限制,多重签名技术让权责更加分明,让每个人掌控且恰好掌控他所应当掌控的权力


比特币交易过程




交易过程

第1步:所有者A利用他的私钥对前一次交易(比特货来源)和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单

要点:B以公钥作为接收方地址

第2步:A将交易单广播至全网,比特币就发送给了B,每个节点都将收到的交易信息纳入一个区块中

要点:对B而言,该枚比特币会即时显示在比特币钱包中,但直到区块确认成功后才可用。目前一笔比特币从支付到最终确认成功,得到6个区块确认之后才能真正确认到帐。

第3步:每个节点通过解一道数学难题,从而去获得创建新区块权利,并争取得到比特币的奖励(新比特币会在此过程中产生)


要点:节点反复尝试寻找一个数值,使得将该数值、区块链中最后一个区块的Hash值以及交易单三部分送入SHA256算法后能计算出散列值X(256位)满足一定条件(比如前20位均为0),即找到数学难题的解。由此可见,答案并不唯一


第4步:当一个节点找到解时,它就向全网广播该区块记录的所有盖时间戳交易,并由全网其他节点核对


要点:时间戳用来证实特定区块必然于某特定时间是的确存在的。比特币网络采取从5个以上节点获取时间,然后取中间值的方式作为时间戳。


第5步:全网其他节点核对该区块记账的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块链

要点:每个区块的创建时间大约在10分钟。随着全网算力的不断变化,每个区块的产生时间会随算力增强而缩短、随算力减弱而延长。其原理是根据最近产生的2016年区块的时间差(约两周时间),自动调整每个区块的生成难度(比如减少或增加目标值中0的个数),使得每个区块的生成时间是10分钟。






比特币和区块链技术作为新型的计算机技术是非常有意义的,但是金融学上的通货紧缩问题无法解决,交易的便利性也不够。

0 0