向Web开发者介绍区块链Part 1

1,理论

区块链是新的热门技术。如果你没听说过它,你可能听说过比特币。区块链是比特币的底层技术。专家说区块链将会和英特网一样掀起一场革命。那么怎么用区块链开发应用呢?这个Blog一个分三个系列,这个是第一篇,向Web开发者介绍区块链。我们将会基于真实项目讨论理论,展现代码,分享我们的学习的收获。

 

什么是区块链

尽管区块链被创建来支持比特币,但区块链的概念定义可以与比特币系统无关,文献中区块链的定义如下:

区块链是一个真实的账本,在p2p网络中多个节点之间复制。Facts可以是任何东西(货币交易,内容签名)。网络中的成员都匿名的,他们被称为Nodes,网络中的所有通信采用密码学安全地标识发送者和接受者。当一个节点想增加一个Fact到账本中,网络中形成一个共识来决定这个fact应该出现在账本中的位置,这个共识称为block

 

我通过读完这些定义,我仍然对区块链是什么有困惑。下面让我们再深入了解一下。

 

Ordering Facts

去中心化p2p网络并不是一个新的事物。NapsterBitTorrent 都是p2p网络。不同的是区块链中的节点交换facts,而不是movies。那么区块链究竟是什么呢?

 

P2p网络和其他分布式系统一样,要解决一个非常困难的计算机科学难题:解决冲突。关系型数据库提供参考完整性,但是在分布式系统中并没有这个东西。如果两个不相容的facts在同一实践到达,系统必须要有一个规则判断哪一个Fact是合法的。

 

例如双花问题:Alice$10,她同时给BobCharlie $10,最后谁会获得$10?要回答这个问题,最好的方法是对Facts排序。如果两个不相容的Facts出现在网络中,第一个到达的会被认为是有效的

 

 

 

p2p网络中,两个facts几乎同时发送可能在不同的节点到达顺序不一样。那么整个网络怎么对哪一个是第一个Fact达成一致呢?为了保证整个p2p网络诚实,你需要一个方法使每个人对fact的顺序达成一致。你需要共识系统。

 

在分布式系统中共识算法是一个非常活跃的研究领域。你可能听说过Paxos,raft算法。区块链实现了另外一个算法,Proof-of-work 共识,使用blocks.

 

Blocks

Blocks是一个巧妙的方法实现在不信任网络中对Facts排序,它的实现非常简单:factsblocks中分组,只有一个chain of blocks 在整个网络中复制,每一个block指向前一个block。如果Fact Fblock 21中,Fact E block 22 中,那么Fact E 会被整个网络认为是 Fact F 的后继节点。Fact 在被加入block 前,Facts是处于pendingunconfirmed 状态。

 

 

 

Mining

一些nodes创建一个新的本地block(附带一些 pending facts,他们通过掷骰子竞争来看他们local block 是否在整个网络中成为chain 中的下一个block。如果一个node掷出两个六,那么它的local block 获得确认,local block中所有的pending Fact也被确认。这个block会发送到网络中所有的节点。所有nodes校验这个block是否正确,然后加入到他们的chain中,然后在它的基础上创建新的local block(附带 pending facts

 

但节点不会只掷两个骰子,blockchain 挑战会掷大量的骰子。通过设计寻找一个随机数去使一个block生效是非常困难的。这阻止欺骗,使网络安全(除非恶意用户拥有超过网络中的一半节点),因此,新的blocks以一个固定的时间间隔发送到chain中,在比特币中,blocks平均每个10分钟发送到chain中。

 

在比特币中,会对pending Facts,前一个blockidentifier,随机数 组成的字符串 进行两次SHA-256 hash。如果生成的hashn个为0那么它赢得这次挑战。

// a losing hash for Bitcoin

787308540121f4afd2ff5179898934291105772495275df35f00cc5e44db42dd

// a winning hash for Bitcoin if n=10

00000000009f766c17c736169f79cb0c65dd6e07244e9468bc60cde9538b551e

 

数字N每次都会调整,无论Nodes数量怎么变化,保证block生成间隔不变。这个数字称为难度。其他BlockChain使用特别的hash 技术阻止使用GPU(例如:通过需要大量的内存转移)

 

寻找block的过程称为挖矿(Mining),因为这就像挖金矿一样,block mining 也会带来经济上的奖励。这就是在BlockChain运行节点的人被称为矿工。

 

Note:默认情况下,一个node并不会挖矿,它只会接受由其他节点生成的blocks,变成一个miner node 是一个自愿的过程。

 

Money and Cryptocurrencies

每一秒,每一个miner node 尝试上千个随机数来生成一个新的block。所以运行一个miner需要大量的计算资源(CPU 和 存储)。这就是你必要为存储在blockchain 中的Facts付费的原因。读取Facts是免费的:你只需要运行你自己的node,你就可以恢复由其他nodes发行的历史facts。总结一下:

读取数据是免费的

添加facts需要一些费用

挖矿会获得所有在这个block中所有Facts给的费用

 

我们现在说的货币并不是真实世界的货币,实际上每个BlockChain都有它自己的密码货币。在比特币网络中的货币是BTC,以太坊网络的货币是ETH,要在比特币网络中付款,你需要付一些比特币,就像你会付一些费用给银行一样。那么,第一个比特币是从哪儿来的呢?

 

 

Miner获取报酬来维持网络运行和安全,每次他们成功生成一个block,他们就会收到固定数量的密码货币。在比特币中这个报酬是每个block 25 BTC,在以太坊中是每个区块 5 ETH。通过这个方式,BlockChain 生成自己的money

 

最后,密码货币可以快速的转换为真实世界的money。他们的票面价值仅仅取决于共给与需求,所有这是一个投机的方向。在写这篇博客的时候,通过卖出挖出的比特币赚的钱比挖矿过程中消耗的资源多的多。这就是为什么每天都会有新的旷工加入,他们希望把电力转换为money。但是比特币价格的波动使他们的利润越来越少。

 

 

 

 

Contracts

到目前位置我们提到最多的是Facts 存储,但BlockChain也可以执行程序。一些BlockChain允许每一个Fact包含一个mini 程序。这个程序和Facts一起复制,每个node接受Facts同时执行程序。在比特币中,这个程序可以被当成交易条件:Bob将从Alice那收到100 BTC,仅当今天是229号。

 

其他blockchains 允许更复杂的合约。例如在以太坊中,每个合约携带一个mini-database,暴露一个方法来修改数据。和合约一样,合约的数据库也会在nodes之间复制。每次用户调用合约上的方法,也更新了底层的数据,这个命令会被整个网络复制和重演。这在执行合约时允许分布式共识。

 

预编程条件,真实世界交互,广播给每个人的概念被称作 智能合约。一个合约就是一个承诺,合约双方对合法执行达成一致。智能合约也一样。智能合约移除了第三方信任。

 

假设你想出租你的房子一个星期,租金$1000,预付50%租金。你和租客签了一个合约,可能由律师起草的合约。你需要银行接收租金。星期开始你要收取$5000的押金,租客开了一张支票付押金。星期的最后,组合拒绝付剩下的50%租金,你感觉到他毁约了,同时那个支票是一张空头支票。你将需要律师帮助你强制执行租借合约。

 

区块链智能合约允许你摆脱银行,律师,法院。只要写一个程序定义好当特定条件发生时多少钱应该转移到你的账户上。

 

租借开始前两个星期:租客转$500到房东账户

房东取消合约:转$500到租客账户

租借合约到期:租客转$500到房东账户

租借合约结束:房东转$5000到租客账户

 

上传这个智能合约到blockchain,在合约中定义的时间期间,转账会自动发生。

 

在智能合约上的应用被称作去中心化应用或DApps.

 

智能合约天然是智能资产和很多智能事物的扩展。记住:智能就是没有“第三方”或“技术上强制执行(technically-enforced)”。BlockChain是取消商务中介的新方式,就像互联网取消音乐发布的中介。

 

 

 

 

What is BlockChain

在我看来,理解blcokchain最好的方法是从各个不同的角度来看它。

 

What it doesBlockChain 允许通过网络在不信任的节点之间安全分享,处理数据。可以是任何数据,但最有意思的用途是关注当前需要借助信任的第三方来交换的信息。例如:money(需要银行),财产证明(需要律师)等等。Blockchain 移除了第三方信任。

 

How it works 从技术角度看来,BlockChain是依赖于三个概念的革新:p2p网络,公钥,私钥密码学,分布式共识。这三个概念都不是新的。如果你不明白这些概念,不要担心,很少有人完全知道开发区块链解决他们的问题。但是不理解区块链不影响你使用它,就像你开发web app 也不需要理解TCP/IP 一样。

 

What it compares to .blockchain看成一个数据区,在节点之间复制多次,同步。或看成一个超级计算机由所有节点的CPU/GPU组成。你可以用这个超级计算机存储,处理数据。

 

Pratical Implications

存储在BlockChain中的Facts不会丢失,他们是永恒的,只要有节点数据就会被不断的复制。Blockchain 不会简单的存储最终状态,它会存储所有过去状态的历史记录,所有每个人都可以从开始重演facts来检查最终状态的正确性。

 

BlockChain中的Facts是可以被信任的,由于他们被技术性强制共识校验过。尽管网络中有害群之马,你也可以相信它的结果。

 

BlockChain中存储数据不会很快速,因为他需要分布式共识。

 

许多互联网上成功的商业都是第三方,想一想GoogleGoogle 设法变成你和整个互联网之间的第三方。想想Amazon:它变成买家和卖家之间的第三方。这就是为什么一个允许去除第三方的技术可以潜在地打破整个互联网。

 

You Wont Build your Own BlockChain

BlockChain身后的技术有:密码学,自定义网络协议,性能优化。这个每个需要BlockChain的项目 每次都要重新开发来说太复杂了。幸运的是,除了比特币,有许多开源的BlockChain 实现。

 

Ethereum: an open-source blockchain platform by the Ethereum Foundation

 

Hyperledger: another open-source implementation, this time by the Linux Foundation. The first proposal was published very recently.

 

Eris Industries: Tools helping to manipulate Ethereum, Bitcoin or totally independent blockchains, mostly to build private networks. Their tutorials and explainers are a great starting point for an overview of the blockchain technology.

 

Numbers

How big are blockchains today? Let’s see some numbers.

Bitcoin:

Block time: 10 minutes

Number of bitcoins earned for each mined block: 25

Number of blocks mined: over 400,000

Number of transactions per block: over 1,200

Number of nodes in the network: ~7000

Bitcoin value: $420

Most of the computing power is said to be concentrated in China

Ethereum:

Block time: 10 seconds

Number of Ether earned for each mined block: 5

Number of blocks mined: more than 1,400,000

Number of transactions per day: over 30,000

Number of nodes in the network: over 6,000

Ether value: around $10, but it varies a lot.

Most of the computing power is said to be concentrated by a miner pool called “Dwarfpool”

猜你喜欢

转载自gcc2ge.iteye.com/blog/2325636