1,理论
区块链是新的热门技术。如果你没听说过它,你可能听说过比特币。区块链是比特币的底层技术。专家说区块链将会和英特网一样掀起一场革命。那么怎么用区块链开发应用呢?这个Blog一个分三个系列,这个是第一篇,向Web开发者介绍区块链。我们将会基于真实项目讨论理论,展现代码,分享我们的学习的收获。
什么是区块链
尽管区块链被创建来支持比特币,但区块链的概念定义可以与比特币系统无关,文献中区块链的定义如下:
区块链是一个真实的账本,在p2p网络中多个节点之间复制。Facts可以是任何东西(货币交易,内容签名)。网络中的成员都匿名的,他们被称为Nodes,网络中的所有通信采用密码学安全地标识发送者和接受者。当一个节点想增加一个Fact到账本中,网络中形成一个共识来决定这个fact应该出现在账本中的位置,这个共识称为block。
我通过读完这些定义,我仍然对区块链是什么有困惑。下面让我们再深入了解一下。
Ordering Facts
去中心化p2p网络并不是一个新的事物。Napster和BitTorrent 都是p2p网络。不同的是区块链中的节点交换facts,而不是movies。那么区块链究竟是什么呢?
P2p网络和其他分布式系统一样,要解决一个非常困难的计算机科学难题:解决冲突。关系型数据库提供参考完整性,但是在分布式系统中并没有这个东西。如果两个不相容的facts在同一实践到达,系统必须要有一个规则判断哪一个Fact是合法的。
例如双花问题:Alice有$10,她同时给Bob,Charlie $10,最后谁会获得$10?要回答这个问题,最好的方法是对Facts排序。如果两个不相容的Facts出现在网络中,第一个到达的会被认为是有效的
在p2p网络中,两个facts几乎同时发送可能在不同的节点到达顺序不一样。那么整个网络怎么对哪一个是第一个Fact达成一致呢?为了保证整个p2p网络诚实,你需要一个方法使每个人对fact的顺序达成一致。你需要共识系统。
在分布式系统中共识算法是一个非常活跃的研究领域。你可能听说过Paxos,raft算法。区块链实现了另外一个算法,Proof-of-work 共识,使用blocks.
Blocks
Blocks是一个巧妙的方法实现在不信任网络中对Facts排序,它的实现非常简单:facts在blocks中分组,只有一个chain of blocks 在整个网络中复制,每一个block指向前一个block。如果Fact F在block 21中,Fact E 在block 22 中,那么Fact E 会被整个网络认为是 Fact F 的后继节点。Fact 在被加入block 前,Facts是处于pending,unconfirmed 状态。
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,前一个block的identifier,随机数 组成的字符串 进行两次SHA-256 hash。如果生成的hash前n个为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,仅当今天是2月29号。
其他blockchains 允许更复杂的合约。例如在以太坊中,每个合约携带一个mini-database,暴露一个方法来修改数据。和合约一样,合约的数据库也会在nodes之间复制。每次用户调用合约上的方法,也更新了底层的数据,这个命令会被整个网络复制和重演。这在执行合约时允许分布式共识。
预编程条件,真实世界交互,广播给每个人的概念被称作 智能合约。一个合约就是一个承诺,合约双方对合法执行达成一致。智能合约也一样。智能合约移除了第三方信任。
假设你想出租你的房子一个星期,租金$1000,预付50%租金。你和租客签了一个合约,可能由律师起草的合约。你需要银行接收租金。星期开始你要收取$5000的押金,租客开了一张支票付押金。星期的最后,组合拒绝付剩下的50%租金,你感觉到他毁约了,同时那个支票是一张空头支票。你将需要律师帮助你强制执行租借合约。
区块链智能合约允许你摆脱银行,律师,法院。只要写一个程序定义好当特定条件发生时多少钱应该转移到你的账户上。
租借开始前两个星期:租客转$500到房东账户
房东取消合约:转$500到租客账户
租借合约到期:租客转$500到房东账户
租借合约结束:房东转$5000到租客账户
上传这个智能合约到blockchain,在合约中定义的时间期间,转账会自动发生。
在智能合约上的应用被称作去中心化应用或DApps.
智能合约天然是智能资产和很多智能事物的扩展。记住:智能就是没有“第三方”或“技术上强制执行(technically-enforced)”。BlockChain是取消商务中介的新方式,就像互联网取消音乐发布的中介。
What is BlockChain
在我看来,理解blcokchain最好的方法是从各个不同的角度来看它。
What it does。BlockChain 允许通过网络在不信任的节点之间安全分享,处理数据。可以是任何数据,但最有意思的用途是关注当前需要借助信任的第三方来交换的信息。例如: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中存储数据不会很快速,因为他需要分布式共识。
许多互联网上成功的商业都是第三方,想一想Google,Google 设法变成你和整个互联网之间的第三方。想想Amazon:它变成买家和卖家之间的第三方。这就是为什么一个允许去除第三方的技术可以潜在地打破整个互联网。
You Won’t 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”
相关推荐
微信web开发者工具 ,大家直接下载吧!
为了帮助开发者简单和高效地开发和调试微信小程序,我们在原有的公众号网页调试工具的基础上,推出了全新的 微信开发者工具,集成了公众号网页调试和小程序调试两种开发模式。版本号:1.02.1808080
微信web开发者工具.rar
为了帮助开发者简单和高效地开发和调试微信小程序,我们在原有的公众号网页调试工具的基础上,推出了全新的 微信开发者工具,集成了公众号网页调试和小程序调试两种开发模式。版本号:1.02.1808080
其中,Web Part作为SharePoint的关键组件之一,允许开发者创建可复用的模块,从而在SharePoint页面上实现动态内容的展示和交互。以下是从给定文件中提炼的关于在SharePoint中开发Web Part的详细知识点: ### 1. Web...
微信web开发者工具
InfoQ出品的《Web应用开发者1-3期》教程正是为那些希望在百度开放平台上一展身手的开发者们量身打造的。本教程分为三个阶段,从基础到进阶,再到性能优化与安全性提升,全面覆盖了Web应用开发的各个方面。 在第一期...
C#.NET Web 开发者指南教程是一份专为学习C#.NET进行Web开发的宝贵资源。这份教程结合了理论知识与实践案例,旨在帮助初学者和有经验的开发者提升技能,掌握C#.NET在Web应用中的核心概念和技术。以下是本教程可能...
微信web开发者工具是微信公众平台发布的一款桌面应用,你可以把它当做一个微信模拟器,有了它,开发者们可以从PC和MAC上更加安全的开发和调试基于微信的网页各小程序。
如何成为一个好的web开发者?.docx
鉴于最近很多人向我索要这本书的电子版,我决定将其上传到CSDN,以方便大家自行下载。全部免费,无需积分。不过如果大家觉得这本书对自己很有用处,还是建议去购买纸质版。这本电子书,我是购自淘宝网,其实我有纸质...
研一软件测试大作业高德开发者web接口测试源码.zip研一软件测试大作业高德开发者web接口测试源码.zip研一软件测试大作业高德开发者web接口测试源码.zip研一软件测试大作业高德开发者web接口测试源码.zip研一软件测试...
- **区块链特性**:详细介绍了去中心化、不可篡改等区块链特有的属性,帮助读者理解这些特性如何支撑起整个技术框架。 - **区块链类型**:区分了公有链、联盟链和私有链等不同类型的区块链,探讨了它们各自的适用...
开发者突击struts2.part2
《开发者突击:Java Web主流框架整合开发》是一个深入学习Java Web开发的重要教程,涵盖了多个关键技术和框架的综合应用。在Part11和Part12中,我们预计会探索以下几个核心知识点: 1. **Servlet与JSP**:作为Java ...
本文将详细介绍如何使用Web3.js与用Solidity编写的智能合约进行交互,包括智能合约的部署、调用合约函数、事件监听等关键步骤。 使用Web3.js与Solidity编写的智能合约交互是开发以太坊DApps的关键环节。本文详细介绍...
微信小程序_使用微信web开发者工具开发的微票电影购票小程序_优质项目_附项目源码