Chapter 1 桥接区块链知识的缺口
适应快速变化的区块链世界已经成为一种挑战,本书将指导你应对这种挑战。在开始之前我们需要先明确一些后面会遇到的一些术语的定义。
blockchain 区块链是一个完全分布式的,点对点的软件网络,它使用加密学算法来保护主机应用程序,存储数据,并且易于传输数字化设备的价值。
这种价值就是现实世界里的钱。
Cryptography密码学是通过编码后的信息进行交流的艺术。在比特币和以太坊的世界里,密码学常用于从成百上千的类似机器中营造一个安全的计算环境。
运行在一个没有中心授权和单一主人的计算。正是因为具备这种潜能,很明显这是为什么这种技术受到了前所未有投机,炒作,混乱和预言。
Ethereum 以太坊这个术语可以用来指三个不同的东西:以太坊协议,计算机依照该协议创建的以太坊网络,以及有关这个协议和以太坊计算机网络开发的基金项目。
紧随比特币的步伐,以太坊也创建了自己的世界,吸引了众多的来自各个行业的爱好者和工程师。
许多文明中被吐槽最多的缺陷成为了区块链杀手级应用的需求,以太坊协议(它是基于比特币的扩展延伸)被广泛的人为是这些分布式应用涌现的基础网络。
对开发者,设计者,产品经理来说没有更好的时间来开始以太坊网络的应用原型。
区块链名单(Roll Call)
在区块链系统中有两个大的思考者阵营,以太坊更加特别一些:应用开发者对创建产品和服务感兴趣,而非编程人员关心以太坊的潜在用途,也许是因为工作或者兴趣在
金融服务,咨询,保险,法律,游戏创作,政务,物流,产品设计或者IT等。本书有点类似于交叉学科研究。(cross-disciplinary)
它为编程人员和非编程人员提供了一个关于创建什么,如何创建等一致的上下文环境上的指导。它填平了计算机科学,经济学和金融服务,以及哪里需要,银行历史等缺口。
对于编程人员来说,关于以太坊比较有挑战的事情是它不是像大多数开源项目那样的常见的代码,它也没有对于有其它环境中编程经验的人提供通道。
更要命的是,你的大脑被“cryptoeconomics"这样的概念围绕着,激励体系和非激励体系哪个保护网络。
对于非编程人员来说,挑战是探讨生态系统如何发展,我们如何适应它。声称区块链将现代化提升银行系统,革新保险业,造假将无处容身--还有呢?
以太坊是什么?
概括来讲,像以太坊和比特币这样的开源区块链网络是一种工具,我们可以用它来制造一个软件中的经济系统,包括账户管理和一个在账户之间传递的原生交易单位。
有几分像大富翁(Monopoly)游戏。人们将这种原生的交易单位称之为硬币(coins),代币(tokens)或者加密货币(cryptocurrencies),但是它们跟其它任何系统中的代币没什么不同。
它们是一种只能用于该系统的特定钱币(或者凭证scrip)。
区块链工作原理类似于网状网络或者本地网络(LANs),它们只连接其它运行同样软件的对等计算机。当我们想制造一个通过浏览器能够访问的点到点(P2P)网络时,就需要特定的软件包比如
web3.js来连接应用程序的前端(我们在浏览器中看到的用户界面),通过JavaScript APIs来连接后端的区块链。
在以太坊里,我们可以更进一步的用这个概念来很容易的编写跟本系统内其他用户之间的金融合约,你将看到,这些金融合约被称为智能合约(smart contracts)。
核心组件是一个图灵完备(Turing-complete)区块链想法,作为一个数据结构,它跟比特币的工作方式完全一样,只是在以太坊中,它有自己的内建编程语言。--- Vitalik Buterin,以太坊发明人。
在以太坊中,智能合约是用Solidity编程语言编写的,我们将在第四章学习该语言。图灵完备性的优势是开发者可以快速掌握,但是更重要的是以太坊能够保持状态。
在计算中,一个简单的有状态系统定义可以判断信息变化并随着时间推移记录它们。
想象一下一个没有硬盘的计算机,你很难用它做些什么。它更像一个计算器,内存内容瞬间即逝。未来工程师和用户之间的交流能力,在特定条件下,是对区块链一种强有力的补充。
它允许开发者引入控制流到加密货币交易编程。这是以太坊和比特币之间的最大不同,但它们之间的不同不止这些,后续我们会看到。
注意:Control flow是指计算指令被执行或者评估的顺序。比如条件语句(if this,then that)和loops(重复执行直到某个条件满足)。
在比特币中,所有的交易都是在最短时间内完成的。因为比特币的无状态性,要求它的交易必须一次性完成。
区块链被比特币发明者期望成一个分布式交易账本,该账本持续记录网络中每个人的比特币余额。(一个为就近读者的格式笔记:比特币网络用大写记录,比特币记号用小写)。
在以太坊中,创建了一个类似的系统,具备标准的可扩展方式。
其次,通用的脚本语言让共享以太坊协议共享数据的区块链更加直观,可以让使用单独的区块链的组织之间共享信息和价值。
什么是协议?
Information Technolody(IT)可以被定义为研究计算机系统来存储,编辑,获取,并发送信息。随着时间的变化如何表述信息,来反应内部和外部变化,要依靠哪个技术系统呢。
协议是一个系统规则,它描述了计算机如何连接,参与,以及如何在一个系统或者网络上传输信息。这些指令定义代码语法和语义。
协议可以包含硬件,软件和普通的语言指令。以太坊不需要特殊的硬件,所有的软件都是完全免费的。
在以太坊中,协议是设计用来创建分布式应用,强调快速开发,安全和交互性的。
区块链的三个组成部分:
区块链可以被看成是一个分布式或者跨多台计算机复制冗余的数据库。
有区块链这个词体现出的创新在于这个网络数据库具备特定的能力是能够调解交易顺序,即使在几个节点的网络上以各种顺序接收交易时也能很好的调整。
这种现象通常出现在因为物理距离造成网络延迟问题。比如,一个东京的用户创建一个购买热狗的交易,将会被首先派遣到位于日本的节点上处理。而位于纽约的节点
获取该交易信息则是在几毫秒之后,而就近的布鲁克林的交易则会窜到东京交易的前面。这种不一致取决于分布式系统中不同的主体视角,这对规模化造成了挑战。
区块链系统的强大之处在于他呈现一个技术组合能够让我们用来解决这个问题。
区块链其实是三种技术组合的统称,一个由比特币匿名创造者捏合起来的配方。这三种原料是:
点对点网络(peer-to-peer networking):比如BitTorrent网络他们能够不依靠单一中心授权而相互之间能够进行交流的一群计算机,因此单个点出问题不会受到影响。
非对称加密(Asymmetric cryptography):让那些计算机能够为特定的收件人发送加密消息,网络中所有的人都可以验证发送者的身份,但是只有被指定的目标收件人才能读取消息内容。
在比特币和以太坊中,非对称加密用于为我们的账户创建一个证书集,以确保只有你本人能够过户你自己的代币。
密码散列表(Cryptographic hashing):为任意数据生成一个小而唯一的指纹的方式,能够用它快速的比较大型数据集,同时也是一种检查目标数据没有被替换的安全方式。
在比特币和以太坊中,Merkle树数据结构常用于记录交易标准的顺序,然后被哈希到一个指纹中,该指纹充当网络计算机进行校对的基础。
并且基于该指纹能够快速的同步信息。
正是这三个元素的组合在上世纪90年代到本世纪初孕育出了电子货币实验。 Adam Back在2002年发行了Hashcash,它率先使用挖矿方式发送交易。
在2009年匿名为Satoshi Nakamoto 的组织在Hashcash的基础上增加了分布式一致性功能后,创造了比特币。
总之,这三个元素以前可以模拟一个简单的去中心化的存储在网络节点上的数据库。
用同样的方式一群蚂蚁组建成一个功能种群,我们可以把比特币看做是一个机器。在计算领域,它是一个虚拟机,其特别支持我们将在后面介绍。
从计算机科学方面来讲,以太坊在比特币虚拟机创建的范式结构中添加了一个可信任全局对象框架消息系统(Trustful Global Object Framework Messaging System)。
以太坊首见于发表在2014年的以太坊白皮书上。
以太坊假定有很多链:
我们今天熟知的比特币不仅仅是比特币软件的大规模部署。比如Litecoin,它使用了比特币软件,并对其进行了大量的修改。
以太坊的创建是假设模仿者是必然出现的,并且会造出许多区块链,那么就需要一个协议来用于它们之间的交互。
注意:以太坊协议的制定得益于经济和编程另个方面的概念。所以本书在需要的地方都包含了这两个方面的内容。
跟比特币创建者的目的完全不同的观点是,以太坊的创建者隐喻了如果将来出现加密货币,将不会是一个去中心化系统。
而是一个去中心化系统的分布式网络,能够让许多不同的加密代币的价值,各种目的和解释能够简单快速的定义然后带入人们生活中。
这是一个骗局,就像比特币!
如果你工作于金融服务领域或者你研究经济,在谷歌中搜索更进一步的信息,你可能被提供一个结论比特币本质上是一个全球旁氏骗局。让先我们休息一下。
你说对了一半:比特币的价值是有其交易市场决定的。当然,某个比特币持有实体已经获取了国内货币兑换许可,它们可以赎回比特币换成美元,欧元,黄金或者其它法定货币。
但是这些实体是都私有商业,它们收费并且随时可能倒闭。
所以,比特币和其网络在一定程度上容易受到攻击,并且没有最终的救世主,在未来没有可信任的实体(政府或者企业)能够兑付你的比特币或者ether成美元。
不去支付私人兑换商的费用,唯一的选择就是将比特币转换成一些具有实际价值的东西,来跟法定货币建立在线交换或者交易的联系,这样找到其它买家。
就像比特币网络发展成比特币代币,以太坊网络发展出了ether代币。 Ether运行不同于比特币,你将看到,它更适合被称为加密商品而非货币。
让我们来看一下以太坊经济如何关联底层技术。
Ether作为一种货币和商品:
一般来说,比特币背后没有任何支撑,这没错。当然,现代法定货币也没有任何支撑。但是它们不同在于:法币是由政府做背书的,默认是任何人交的税购买政府债券。
一些国际商品销售是以美元计价的,(比如石油),这给了人们另外的原因来持有美元。
对于加密货币来说,挑战依然适用。今天,这些数字代币保持快速,安全,在现有的法币系统之上建立公开支付层,一个实验性的部署可能会在将来某一天替代想Visa和MasterCard正在使用的
集中支付网络技术。
然而,在政府和私人投资机构层面开始使用加密货币为金融产品和服务创建一个更大的市场是有无限可能的。
央行可能也会采用该技术。在我们写这书的时候,至少已经有一个国家已经使用比特币软件发行数字美元了。
Barbados。 其它国家正在积极研究这一前景。
Gresham 法则:(劣币驱逐良币)
如果金融产品,合约,保险政策等等都被做成加密货币为什么很重要呢?这样必须用以太坊做什么?
货币可以购买一些有价值的有价证券和支持是货币的存储价值。以太坊网络语序任何人写入一个可信任的,自动执行的金融合约(智能合约),它会在将来某个时候转移ether。
它将允许金融合约嵌入未来,给合约中的持有者一个持有它并使用ether作为一个价值储蓄的原因。
原本适用于黄金和白银货币,Gresham‘s Law描述了在经济中,坏的钱驱逐好的钱,换句话说,人们保存和囤积它们期待增值的货币,而花掉那些认为会贬值的货币。
尽管这个法则是由16世纪的英国金融家提出的,并且出现在中世纪的著作里,实际上回溯到古老的文字中比如古希腊诗人阿里斯托芬的诗《青蛙》,大约在公元前405年。
硬币不涉及合金,金或者银,每个刚铸造好时,测试每个都响声清脆,然而我们从来没有用过它们,都在别人手里传递。。。
千百年来,人们用一种能够保持稳定,增值,或者价格不断提高的金融工具来存储它们劳动产品的价值,而不是那些被证明价值崩溃的东西。
今天,加密货币价格的不稳定性,以及全世界范围内只被少数国家和公司接受。今天若有的话也是极少的去中心化智能合约应用在商业中。
但是通过相同的代币,央行发行的法币有着极坏的历史记录,明确的证明泡沫(bubbles),萧条(depression)和篡改(manipulation)。
加密货币能成为真正的货币吗?它能够比我们习惯的货币表现更好吗?
更好的钱路!
今天,比特币以BTC符号表示,被个人,政府和组织用来交换价值并购买产品或者服务。每次他们发出比特币都要为网络支付很小的一部分费用,这些费用也是以比特币计价(denominated in .. 以..计价)。
Ether,以ETH符号表示,具有跟比特币类似的功能。要理解它们未来如何,我们需要知道一些事情:
首先,ether有另外的用途,它能够为在以太坊网络上运行程序支付费用。这些程序可以现在或者将来或者在某种条件满足的情况下转移ether。
因为它能够支付未来执行交易的费用,ether也被看成一种商品,像是运行应用程序和服务的燃料。所以相比比特币它有另外维度上的固有价值。
而不仅仅是存储价值。
今天,被滥用的法币可能暗示着加密货币是更糟的钱,更是证明终究毫无价值。
可是,比特币和ether被持有者存储,现在甚至被至少一个公司信任。Grayscale,数字货币集团下的一个子公司。
同时,西方央行接近零利率实验,量化宽松(也就是印钱)越来越危险,不顾一切的视图控制通胀和抑制紧缩。
随着比特币奖赏每四年减半,全球财务政策陷入困境,一般经济不确定性,造成对法币信心的减弱,巨量的后来者储存加密货币拉高定价,使其严重高于真正需求。
这反应在大部分加密代币持续增长的价格上,但盘中价格波动剧烈。这种囤积者,投机者和消费者的平衡行为共同创造了一个繁荣的加密货币市场,也暗示了加密代币作为一个资产类
早已服务于金钱了。
加密经济和安全:
在讨论智能合约时提到货币和商品是打算训练我们自己思考在纯软件中创建经济体系。这是以太坊的诺言。
使用游戏规则设计软件系统构筑了一个新生领域:cryptoeconomics ,加密经济学。我们将在技术课程中穿插讨论。
首先看起来似乎很简单--一种公平的货币,比如以代码表示创建复杂的世界。事实上,是什么让以太坊和比特币系统如此安全,是因为它们没有依赖任何的防黑客技术而是依靠强力的金融激励和约束来让作恶者陷入困境。
有吸引力的价值主张让每个工程师和软件设计者为之激动。但是引导货币(scrip临时凭证)币是完全独立的,增加了令人兴奋的关于最终用户应用程序的挑战。
本身阐述了这个挑战的两部分。
尽管这个软件最显眼的应用可能在金融服务,未来应用程序可能还应用于同等水平--信任,交易,钱和脚本--完全其它目的。
就像命令行最终演变为一个用户界面和现在的虚拟现实应用程序,这完全取决于你那以太坊来创建什么。我们后面讲讨论一些实例。
回到美好的就日子里:
的确比特币和以太坊为软件编程增加了一点复杂性--经济。
但是它们也在某些方面进行了简化,使用去中心化洗衣类似于使用70年代的电脑。
它们庞大并且共享资源昂贵,个人能从拥有这些机器的大学或者公司来租用时间。
以太坊网络的功能想一个大型计算机执行紧密的程序步骤,它是一台被网络其它机器虚拟化的机器。
因为有许多私人计算机包括在内,以太坊虚拟机EVM本身可以被看做是一个无主的共享计算机。
EVM的变化可以通过hard forking获取:说服整个节点操作者社区更新新的以太坊软件版本。 网络的变化不能简单的通过核心开发团队的推广。
它包含一个展示和说服的政治进程。无主的配置意味着最大化的运行时间和安全,尽量减少不好的激励。
混沌加密(Cryptochoas)
关于这一点,你的头可能有些晕眩,不用担心--当你深入后面的章节获得更多的信息后你就会有深切的体会。
不用害怕:每个第一次看区块链开发的人都会感觉受到打击。它是一项新技术,而且变化很快,去中心化系统的专家也稀少。
没有人会知道接下来会出现什么,但是有一点是肯定的技术在工作,到目前为止在与加密货币相关的领域大致有260亿美元的市场。
大小零售商,在线的线下的都开始接受数字货币支付(这里显示的金额单位除非特殊情况,否则一切都是美元)
所以,即使你从来没有编过程序,不要停在这里,以太坊项目已经深入新开发者人心,给你工具去创建闻所未闻的方案来解决长久以来的问题吧。
这完全取决于你想用这个全新的强力工具箱去做什么。如果去创建,为什么你应该学习区块链开发将是接下来本书要探讨的主题。
能量来自协议:
在今天的技术工业中,应用程序层规则:也是所有用户数据生存的地方。数十亿美元规模的公司比如Google,Facebook,Twitter已经建立了无数的基础架构来
支持国际化的用户群体。它们都是基于Transmission Control Protocol/Internet Protocol(TCP/IP),Hypertext Transfer Protocol(HTTP),Simple Mail Transfer Protocol(SMTP)等协议基础建立的。
在以太坊里,跟比特币一样,应用程序层是比较瘦的,至少到目前为止是这样,因为协议已经提供了够多。
事实上,许多基于比特币的公司迄今为止都是基于已有的非常高效的支付网络上创建的极少应用层。
注意:市场资本是一个组织或者生态的价值标尺。它是通过每股乘上权益价格来计算的。比如一个ether乘以流通中的股票数量。
市场资本是加密货币采用的比较广泛的引用指标。然而使用monetary base货币基数可能更合适。
货币基数是指公共流通的货币总数,或者被使用货币的机构储备起来的总数。
总之,比特币的爆发是很多风险投资家期望它不会在5-6年前出现的。但是,比特币工业迅速的崛起。
比特币作为一个市场化的资本已经在不到10年内迅速膨胀到了接近190亿美元的规模。
以太坊的市场资本也有10亿美金了。这是人们没有预料到的,快速启动新网络协议的新途径。
传统web应用很大程度上时成本昂贵的,因为他们必须设计存储和交换用户数据,这样就必须有一个系统来隔离不好的行为者来保证信任。
许多私人数据中心运行在防爆防弹的区域并由铁丝网隔离。当这些私人安全措施提供的安全保证被一个安全的区中心化网络超过时,在线业务运营人员的成本就会大大降低。
它们可以在客户中传递来破坏传统的玩家。基于区块链的应用和服务具有破坏性不仅仅是因为它们自然安全,还因为它们在规模化上很经济。
你可以创建不可靠的系统(Trustless Systems)
一旦你学习了Solidity语言,你会很快想知道你可以编写什么样的程序,这就是真正的学习曲线所在。
本身的项目目标就是展示真切的如何,在哪里,区块链可以提高或者自治终端用户所有系列的商业体验。
能够创建新种类的产品和服务。我们将看到我们今天知道的银行产品和服务,它们经过了上千年的反复试错,可以通过无信任分布式或者半分布系统被改变,收益,以及带来规模化。
Trustless在这里是指“不需要信仰交易双方将诚实操作而没有失败,不受欺诈和其它对手的影响。”
网上已经有很多关于以太坊和Solidity的信息软件开发者用来开始学习,然而,如果你读过这些文档,你可能产生很多疑问需要解答。
接下来我们澄清一下术语。
到底智能合约能干什么?
即使刚刚看了这开始的几页,我们就遇到了很多全新的概念。但是这里有一个术语将持续在以太坊中被提及,这个概念就是智能合约。
运行在网络上的一些商业逻辑,半自治的转移价值并在参与者之间执行付款协议。
智能合约常等同于软件应用程序,但这只是个简单的类比。它们更像传统面向对象编程中的类class的概念。
当开发人员说编写智能合约时,它们通常是指用Solidity语言编写代码并在以太坊网络上执行。当代码执行时,单位的价值可能会跟数据一样很容易的转移。
像我们在本章提到的那样,数字货币的前景是巨大的。但是它到底是怎么工作的?在去中心化系统中数字如何充当钱呢?
这个问题的答案在于你多有技术。所以让我们来看一个有深度的例子。
价值的对象和方法(Objects and Methods from Value)
在计算领域,一个object通常是指一小块数据--信息--封装成特定结构或者格式。通常这些属于有关联的指令被称为方法methods,
它指定该对象如何被使用和访问。现在让我们来想象一个信息保存在一个对象中,对某些人有价值,这个人将希望支付一定报酬来触发方法显示这些信息。
在下面的例子中,让我们想象一个用户想支付很少的费用来使用一个他再线上发现蛋糕配方。这个配方就是数据对象。
从最高的层面上,蛋糕对象的特征,叫做attributes,跟方法一起呗存储在计算机内存的特定地址里。
下面对象显示了蛋糕的属性,包含一个方法借此计算机能够显示指令如何组合这些原料做成一个蛋糕。
以这种方式存储信息让程序和编程人员在属性之间切换而不需要改变显示指令的代码。换句话说,对象是信息的模块化。
信息可以根据需要被组合和重组。我们在讨论组成区块链的块的原子性时明白这一点很重要。
在JavaScript中,你可以写一个蛋糕对象:
var cake={
firstIngredient:"milk",
secondIngredient:"eggs",
thirdIngredient: "cakemix",
bakeTime: 22
bakeTemp: 420
mixingInstructions: function() {
return "Add " this.firstIngredient + " to " + this.secondIngredient +
" and stir with " + this.thirdIngredient + " and bake at " + bakeTemp +
" for " + bakeTime + " minutes." ;
}
};
这个例子说明计算机如何抽取数据并显示有用结果给人类用户。在以太坊中,你可以写函数来到处发送钱,就像这个小对象方法调用mixingInstruction,
当它被执行后,可以显示蛋糕的搅拌指示。
仅仅添加商业:
你将在第四章中看到,Solidity代码可以被用于后端程序来添加微支付,用户账户,和功能到单个即使单个计算机程序,不需要第三方类库或者高级的编程语言的专门技巧(know-how)。
想象一下,mixingInstruction函数花费几分ether来执行。在蛋糕配方价格被从用户的以太坊钱包余额中扣除后--这个过程可能需要几秒,平均情况--你的智能合约将调用mixingInstructions方法并显示给用户如何制作蛋糕。
所有这些动作完成不需要身份验证,支付接口,账户,信用卡,大量的web表单,以及所有的建立一个电子商务应用的传统工作。
事实上,我们所有的JavaScript应用跟全局公用的以太坊链交互只需要前面提到的Web3.js 即可。
内容创建:
在这一章里到目前为止,我们已经关注了ether作为钱的使用,但是蛋糕配方的例子呈现了另外一个以太坊巨大的潜在区域:
知识产权(Intellectual property),许可(licensing),内容版税(royalty)。今天在网络上销售内容或者通过app方式面对强大的经销商
比如Apple,Google和Amazon,它们为售卖数字化内容制定了惩罚性规则并征收大量的税费。
以太坊让促进微交易成为可能,用户借用它只需要为每个配方支付$0.25--支付的使用信用卡网络负载的总费用。
对于今天的内容创建者使用这种方式做商业面临一些挑战,包括erther代币的价格不稳定,但是像你将在后面章节里看到的,
随着以太坊网络的成熟,这些问题将会得到解决。
数据在哪里?
接着说:如果网络协议提供了这么多可以拿来就用的功能,这是一个分布式系统,那么用户的数据保存在哪里呢?
以太坊网络真正是如何运作的是下一章的主题,但是本着解决棘手问题的精神,这里我们快速的总结一下交易是如何被记录到以太坊中的:
它们都存储在网络的每个节点上。
以太坊所有的交易都存储在区块链上,状态变化的权威历史保存在单个以太坊节点上。
当你为以太坊网络的计算时间付款时,这个费用包含了运行交易的花费和存储数据到你的智能合约的成本。
(如果你的合约在执行后变小,你将会得到以减少交易费的形式给予的部分退款)。
一旦你的合约被执行,费用也会从你的ether余额中支付出去,数据会包含到下一个块中。因为以太坊网络需要多有节点都保持所有智能合约的
全状态数据库,任何节点可以查询本地数据库。如果觉得这听起来很难实现,你正在投入很好的注意力。
以太坊1.5和2.0制定了一个路线图来解决可扩展问题。
我们将在下一章深入探讨以太坊区块链如何工作问题。
什么是挖矿?(Mining)
因为分布式系统没有唯一的主人,机器根据自己的意愿自由加入以太坊网络开始校验交易。这个过程被称为Mining,挖矿。
那么目的是什么呢?
挖矿节点通过协商就跨系统交易顺序达成一致,它需要快速的在许多交易穿行网络时将每个人的账户余额做成表格。
这个过程需要消耗电能,电是要钱的,所以矿工会因为他们挖到的每个块获得大约5 ether的回报。
Ether和电价
矿工因为挖矿或者在网络上运行脚本获得一定的ether支付(以gas的形式,后面将具体解释)。
运行在以太坊网络上的服务预支出电费成本是给出ether的因素之一。ether作为一种加密商品,它的内在价值--人们支付真正的钱给他们的电力公司来运行它们的矿机。
尤其是挖矿平台,它需要一组图形运算卡来增加完成一个块的几率获取报酬,这会增加电费账单每台机器大约每个月要增加$100-$300美元,这取决于你所在的确的电价。
挖矿是比特币和以太坊的根基,工作原理是类似的,有一些需要注意的。以太坊修订了范式,由其是关于ether的发行。具体的内容将在第五章说明。
深入EVM内部:
本书的目的是教开发人员和产品负责人EVM如何编程以及目的是什么?
它的编写方式能够让财务和技术思考者都能理解,所以开发人员和领域专家可以很容易的达成理解共识,他们应该一起做什么,那些工具适合他们的项目。
但是首先我们需要花费一点时间在ether的使用和持有的基础知识上。
注意:如果你不确定虚拟机是什么,不用担心,后面你就会清楚了。现在,你可以把它看成一个包含其它计算机的计算机。
Mist浏览器:
在这个阶段,不是应用程序仍然存在困难,但是我们有方法能只使用Solidity脚本来设计一个原型化的简单的智能合约。
要做这些,我们需要一个原生的以太坊浏览器,绰号 Mist。该浏览器还持有你的ether。第二章讲述更多关于钱包,浏览器,命令行工具,区块链探索者,但是第一个先看技术。
浏览器 钱包或者键链(Keychain)
Mist有时被称为wallet钱包,从比特币用语(parlance)中借用而来。为什么比特币应用程序叫做钱包呢?不是因为他们持有你的钱,尽管钱包引用让你发送和接收支付。
这些应用程序,当它们安装到你的手机上时,会发出一个加密键,你可以用它来对去中心化数据库进行读取和写入操作。
所以尽管keychain是一个比较好的隐喻,wallet是我们熟知的用语。
如果你想提前看看Mist,你可以从以太坊的Github项目地址处下载它:https://github.com/Ethereum/mist/releases
使用Mist和以太坊命令行工具,使用伪造的ether可以测试简单的合约,这样可以保证我们在调试过程中不损失任何真正的钱财。
如果你习惯了使用现代开发工具,用这种方式会感觉有点原始,但是它对于没有技术背景的初学者来说是一个很好的起点,因为它强迫他们只是做一个简单的demo应用来学习网络和底层计算机系统。
Solidity有点像JavaScript但是。。。
对于大多数熟悉了JavaScript,Java或者C语言的人来说,大部分Solidity内容都是非常直观好理解的。尽管以太坊应用程序没有宿主任何单一的服务器,
以太坊应用程序的核心是一系列相对简单的智能合约文件,它们看上去很像JavaScript.在你本地编写它们,并将它们部署它们传播到整个网络成为以一种分散方式宿主在整个网络上。
从这一点看,以太坊开发包综合网络和应用程序宿主和数据库于一体。
跟其它很多新技术一样,部署这些系统是一个挑战。我们将介绍一下方法来简化部署。你只要创建了一个具备最低功能的应用后,你就会很快发现有趣的部分:想象一下什么新应用和系统可能会用到你的新技能。
以太坊擅长做什么?
以太坊适合用纯软件建立经济系统。换句话说,它是业务逻辑软件,在其中人们可以以我们获取数据的速度和规模来转移钱(数据代表价值)。
不会是你用商业银行系统那样的三天到七天的周期。还有就是没有想Visa,MasterCard,Paypal等供应商那样的收费。
使用一个简单的以太坊程序,比如,在上百个国家,小账户每隔几分钟,来支付成百上千人的薪水这种事应该很轻松。
但是对于过去的银行系统来说,你需要整个工资部门加班快速的再平衡你的账本以及处理跨境问题。
一个关键的采用
如果你已经看到了以太坊的市场,关于这个软件能干啥你可能会有一个更加激动人心的愿景。这里选择了一些以太坊和整个区块链关于此比较乐观的声明,
也存在明显的争议和反驳。
“没有任何的宕机可能,不需要任何的审查机构,或者第三方接口”。
首先,如果你对开源开发世界不了解,那么对代码库管理就更模糊了。尽管以太坊洗衣只是由一个小团队的核心开发人员开发的,许多类型的利益相关者必须合作来改变网络功能,现在已经启动并运行了。
随着网络的增长,这些所谓的hard forks将变得越来越不可行和没有必要,因此越不频繁了。
记住,以太坊网络还不完整,它现在已经运行了,但是预计直到2019年某些时候才会完整。
继续开发的基金由瑞士非盈利以太坊基金提供。
“一个安全,免费,开放的物联网平台”
机器也许成为许多智能合约的执行者,所以沿着这个思路,假设你步入一个你以前没去过的街区,你的手机没了信号。你的手机可能自动“rent”从附近的其它网络的家庭基站中租用一些时间,为此支付很少的路由器费用。
所有的这一切都不需要请求你的允许。在智能合约中被路由器授权的价格和速度可能是变化的,类似一个服务层的协议(SLA)在你统一后可以转账。
“让社区和商业治理透明化”
是的,这是一个棘手的问题,透明化公司是一个可能的结果。但是去中心化自治公司(或者称为DAOs or DACs)可能有很长的路要走。
本书里使用这个术语是似乎一个行业正在解决这个问题:decentalized organization 或者 DO。这个领域的进展是很棘手的事情。
通过加密工具方式受制于所有相同的操作来治理已经困扰民主国家很久了。要一票一个钱包地址吗?好吧,谁会获得钱包地址?
如果一币一票,那不成了富有人士的规则吗?这些谈话都超出了本书的范围,但是任何人向你出售完全自治组织,公司或者政府概念,可能还有一个你可能感兴趣的桥梁才可以。
“处理用户身份验证和保护你的支付,以及信息和事件的分散存储”
随着以太坊在它的路线图上的发展,这个完全可以实现。当你连接以太坊区块链时,用户身份验证和保护支付的确已经可用了,
但是点对点交流和分散存储(它是一个新兴的区块链软件业务)目前需要集成第三方类库就可用了。
然而,以太坊路线图里包含了这些元素作为Swarm和Whisper计划。这两个目前仅在部分实验版本中找得到。
“不需要注册或者为应用程序主机支付费用,世界上首个零基础设施平台”
技术上没问题,但是时间就是金钱,在我们讨论主机和部署时,免费和直观可能在新软件世界里是相互排斥的(mutually exclusive)的。
智能合约开发的现状:
有一些Solidity开发的示例项目现状可以参考。如果你想部署一个完整的最终用户应用程序,你将还不会遇到太多的竞争。
然而,区块链大部分的功能是创建应用程序来让用户产生交易:购买,出售,许可,交易,流媒体等等。
这就意味着人们需要持有一些ether,或者属于你的项目的原生币。这种原生币的循环和可用性被称为它的流动性liquidity.
高流动性带来更稳定的货币价格和网络效应。
通常,有创业想法的开发者会试着引导他们的币进入循环来获取流动性利润。事实上,EVM和ether就是走的这条路。
以太坊基金在2014年众筹了1800万美元,出资人支付比特币,收到ether,这样这个社区就诞生了。
山寨币(Copycat coins)
Alt-coins是比特币的山寨币,它使用比特币的代码基础。可以合法的启动一个alt-coin, 它们不总是试图强力攻击一个用户到现实中。
以太坊从比特币中获取了很多底层概念,但是可以被认为是一个全新的网络,因为它们的关键组件不同了。
你项目的资金:
Crowdfunding众筹是一个创业企业通过销售早期访问产品或者服务给期望它的用户来对抗痛苦和进行beta测试以及募集资金的一种方式。
在加密货币中,这叫token launch,代币发行。 有些公司采用initial coin offering(ICO),因为它听起来像华尔街用语initial public offering(IPO).
然后这个词容易把人带入误解,因为代币不能代币股东权益。这对ether和比特币都适用,它们都不能表现任何的股东权益。
如果你想筹集资金创建你自己的以太坊项目,你不需要夜间飞行。资产管理者和执行者会很快被这项技术警醒,不管你是寻找雇员,投资还是商业开发,
不久将来它们都会在那里。 可以在Meetup上寻找本地有关比特币或者以太坊的活动参加,找到其它加密爱好者组队。
找到你的位置:
除了涉及以太坊技术内容外,本书还展示了一个更加广泛的上下文信息组,可以帮你找到Solidity编程和分布式应用程序应该怎么进入你的职业生涯。
本书还打算为软件创新思维指定方向。
一个例子是长寿。在遗留的web服务中,该服务正常运行依赖于开发者是否支付了主机账单和维护它的服务器。
结果是,很少有人打算创建软件应用程序运行30年。
以太坊网络同时也是一个冗余的分布式数据库,在每个节点上都有拷贝。这意味着你可以信任你的应用程序在满足某个条件时发出一个调用,即使这个条件发生在未来几十年,即使所有的节点都变了。
移除软件和银行旧的约束,引入新的,是我们每章开头的固定主题。
对新编程人员的忠告:
了解现有的财政,银行,保险系统工作将为你设计以太坊应用程序带来巨大的优势。如果你能组合这些技术和知识,那再好不过了。
注意:你不必去记忆本书引用的链接,本书所有重要的引用链接都会按照章节索引在http://eth.guide 上找到。
所以,即使你不是一个编程人员,你也不打算成为他们中一员,跟随章节中讨论的代码有助于掌握可能的限制。
如果你从没编过程序但决定从头开始学习Solidity编程语言,本书的课程也是适合的。
从某种程度上说,学习以太坊开发可能比从头学习web开发更容易更直观。
以太坊是免费开源的:
以太坊可以被发展分支并拷贝到其它系统中保持兼容。在未来,它更是让链与链之间交换币成为可能。尽管这不是一个简单的过程,但是如何实现它的学术论文早就出现了。
值得注意的是对对非编程人员阅读免费和开源不是同一个意思的。开源是创建软件的方法论,自由是社会构建。
根据GUN基金会,当你调用一个免费软件时,我们认为他遵循用户的基本自由:自由运行它,研究以及修改它,可以在修改或者没有修改的情况下重新发布拷贝。
EVM就待在这里:
你将会看到以太坊有一个野心勃勃的路线图和一个更野心勃勃的目标。它是否发展为核心开发团队计划,它持久的贡献区块链开发的可能是EVM。
Solidity语言可能会成为众多可以编译成EVM字节码语言中的一种。
Solidity本身将毫无疑问的成长和变化,它今天远没有达到完美或者完备。但是它现在能让我们进行编译和测试加密货币。
关于这个的争论在比特币社区里也发展缓慢。
总之,以太坊寻求创建一个系统,在这个系统中经济模型可以被测试和证明。眼下,Solidity看起来准备成为该模型的实际语言,只要它能像EVM一样运行在全球的虚拟机上。
今天你能做什么?
潜力已经说的够多了,今天的什么是可能的?非常多,让我们做一下分类,主要可以分为两大类:私有和公有。
到目前为止,以太坊被描述成唯一的公共区块链,一个可以创建很多区块链的协议。
理解在不同领域中应用的潜力主要是一个理解公共链如何区别于私有以太坊链的问题,这些私有链一般由企业或者其它垂直社区部署。
私有链和公有链:
因为任何人都可以在以太坊项目上做分支开发,所以做自己的以太坊替代创建公有链是可能的。它被称为私有区块链。
比如比特币的alt-coin, 这被现在的以太坊开发社区认为是重复的劳动。
在本书最后你会发现,私有链对于一个创业产品或者服务来说是一个非常糟糕的方式,但是这一直没有阻止一些公司对它的尝试。
对于创业来说更好的方式是在公有的以太坊链基础上创建而非自己重复造轮子。
你会看到公有链拥有大量的计算能力决定了它的安全性,对于小公司要启动大规模的安全网络服务来说有成套的项目支持。
然而,公有以太坊区块链在今天是完全公开的,一些公司可能选择让他们的一些敏感交易放到私有的链上,该私有链会跟公有链有一些桥接。
在企业软件领域,相关的利益相关者会得到特定的权利和优先级来读写企业的公司链,部署为permissioned blockchain, 授权区块链。
对于授权区块链来说,钱包地址通常由一个可信任的第三方发行,它们会检查你进入该系统的许可证,就像办公楼的安全通行通过一样,允许你在这座大楼内部交易。
同样的隐喻中,公有链会被看成是城市公园或者公共场所。
区块链规模和它的可信任度之间的正相关关系将在后面的章节中说明。我们也将在第九章中介绍如何搭建私有链来对区块链和数据库之间的相似性做更好的理解。
无论是在公有以太坊链还是私有以太坊链中,我们能够做如下内容:
发送和接收ether,写智能合约,创建可查验的公平应用,启动自己的以ether为基础的代币。
这些后面我们会一一呈现。
发送和接收ether:
我们可以发送和接收ether,哪怕是在一个私有的链上,只不过我们使用的私有ether只是一种无价值的凭证而已。
任何人都能够通过下载Mist钱包来获取以太坊的钱包地址,这些后面我们会介绍。还可从iOS应用商店或者Google Play获取移动钱包应用。
为了将美元换成ether,我们需要加入一个加密货币交易所或者从一个商业自己提供者比如Coinbase那里购买。大部分人值购买比特币(因为比特币更广的在ATM机上使用,以及通过
localbitcoins.com现金经销商网络)然后通过交易所或者一个加密货币交易服务商(比如Shapeshift.io)那里换成ether。
编写智能合约:
我们可以控制账户之间的支付和交易(甚至跟其它合约之间的),尽管他们会有很多意外,或者跨越未来时间以及国界。
真正的潜力在于公有链的不可阻挡性,这依赖于谁参与以及多少不好的行动者进入了该系统。另一方面,私有链可能私下里允许组建具有相同功能的资源。
创建可查证的公平应用程序:
对于游戏和赌博来说创建可查证的公平应用尤为重要。
期待视频游戏和虚拟现实游戏的点数都代表了现实中的钱数是可以在现实世界里消费的。
启动我们自己的代币(Token):
实践中,rolling为我们自己的代币有点像spinging up 一个系统用户的账户。
使用一个以太坊代币合约,我们可以创建一个subcurrency用于私有交易账本,该账本只有我们自己和我们私有的群组可以访问,但其它的方面都使用公有链。
放弃开发自己的分支版本以及维护自己的挖矿网络。 这非常方便,对大部分开发者和组织来说是非常好的途径。
我们将在第五和九章里介绍代币和链的动力学。
去中心化数据库的约定:
跟其它数据库一样,区块链数据库也有一定的模式定义:规则定义,约束,实体间的强关系。
在各个行业中都能找到要打破或者替代这些关系的动机,导致贿赂和腐败,造成了区块链的不可信任的品质比前一代
软件和网络更具吸引力。
在所有的数据库中,共享读写访问造成了巨大的复杂性。遍布全世界的机器可能体验了各种延迟,由于数据库的物理位置的不同,导致一些写操作不能按照应有的顺序到达执行。
如果由多个公司组成的工业交易集团这样的有多个部分共享一个数据库那就变的更加困难了。这造成了大型组织要跟其他组织共享读写状态代价变的极为昂贵。
并且客户信息泄露问题也变的普遍起来。
现在公司的IT部门已经找到了可以让这些系统按照预想的运行的方法。但是当它们规模化时,对于一些恶意的人来说它们干坏事的机会变得大到无法忽视。
接下来:新的工作方式
2016年9月,美国富国银行解雇了上千名雇员,因为他们操纵账户数据库伪造销售数量来触发销售人员开设新账户的奖金激励计划。
判断错误的成本是非常巨大的,赶上构建可以预防管理员进行错误操作的软件成本了。以太坊代表了一种新的机会,
它为让商业和客户提供了一个比今天建立在HTTP web上的应用数据层更加可信的交流环境。
摘要:
在这一章里,我们学习了以太坊提供的创建软件的另外一种途径,这种途径基于协议层提供安全,可信。
这可能带来全球化的实质性影响。随着世界数字化,大规模系统越来越成为各种组织的关键任务-- 不只是银行和保险,还有城市服务,零售,物流,内容分发,新闻业journalism,服装制造,
以及其它有原产地和支付需要的行业。
接下来,我们将着手通过客户端程序创建键值来访问以太坊区块链。下一章涉及在Windows,macOS,Linux,iOS以及Android上使用以太坊客户端应用。