译者注:对于英文水平不错的开发者,推荐阅读原文。
教程
如下的教程是以太坊平台上开发去中心化应用(Dapp)的简介。
该教程教授用户如何用Solidity语言–一种我们定制化的合约编程语言–编程合约。
如果你在研习教程过程中有任何问题,请留下评注或联系ken@ethdev.com。
以太坊开发入门
以太坊——一个去中心化的共识网络
对多数开发者来说,在职业生涯中花时间学习使用一个新平台,一门新语言,或一种新框架是再平常不过的事情了。更加新颖的事情是学习完全不同的范式。去中心化的共识网络,区块链和其最知名的实例——“比特币”,这些新事物即使在技术社区内也没有被完全理解,对于这些新技术如何从本质上区别于我们现在使用的技术,大多数普通人现在还不能理解。
基于这样的想法,在我们进行开发我们首个去中心化的app之前,我会对一些建造一个去中心化共识网络所必需的关键技术作出概述,也会介绍博弈论。博弈论会利用这些技术以创建一个网络。
核心技术
公钥密码学
公私钥密码系统是一类加密方法,它需要创建两个分开的秘钥;“私钥”只有所有者知道,公钥被(系统内)所有人知道。它具有一些有用的属性,首先是任何人都可以用公钥加密数据,而且只有对应的私钥才能解密。第二个属性,私钥的持有者利用私钥对一段信息进行签名,任何知道其公钥的人都可以对签名进行验证,不需要泄露任何与私钥相关的信息。这一属性被用于数据通信网络的账号系统,构成了发送交易的基础。
加密散列函数
散列函数是这样一个函数:它将一段任意大小的信息作为输入,输出一段具有固定长度的数据。例如,一个1MB或者500KB的文件经过散列函数计算后,将生成两个长度为128比特的“散列”。加密散列函数不仅具有以上功能,还能满足三项重要要求:进行散列计算时,不需要泄露生成散列的输入信息(不可逆),输入的微小变化将导致输出散列的巨大变化;散列不可被计算,除非使用散列函数(没有捷径);两个不同输入生成相同散列的概率极低。
点对点网络
不同于客户端-服务器模型,点对点网络是多台相互直接联接的计算机组成的网络,不需要向任何服务器发送请求。所有参与网络的计算机被认为是“节点”, 所有的节点具有平等的地位。点对点网络通常依赖于无私心的节点,分享的资源至少与从网络中获取的资源一样多。
加密经济学技术
区块链
一个区块链整体来说是一种为数据通信网络特别设计的数据库类型。它可以保存任意数据,也能设定更新信息的规则,其首要特性是它可以在被称为“区块”的离散块内得到更新,这些“区块”通过前一区块内容的哈希散列“链接”在一起。一个区块链不仅包含当前存储在数据库的信息,也包括每一次对数据库的历史记录变更。通过状态和交易,区块链构造了一个不改变每个随后块就不进行完整更改历史的数据库。一个私钥总是对“交易”或者改变数据库状态的请求进行签名,并且签名也存储在区块链中。
工作量证明
最早设想是作为一种垃圾邮件预防系统出现的,工作量证明是提供一种检验你“可能”已执行大量数学运算的简单方法。在多数应用中,它使用一个加密散列函数实现;给出一片任意数据(如一个交易列表和一个块头部),你必须要找到第二个数据片,当其与第一个数据片合并时可生成一个具有特定字符的散列(例如一个以多个零结尾的散列)。因为预测第二片数据生成的哈希是不可能的,所以你必须对所有可能的数据进行随机迭代,直到找到能够生成你所要求散列的数据。
以太坊技术
以太坊虚拟机
以太坊虚拟机是以太坊项目中一项主要的创新。这是设计运行在点对点网络中所有参与者节点上的一个虚拟机,它可以读写一个区块链中可执行的代码和数据,校验数据签名,并且能够以半图灵完备的方式来运行代码。它仅在接收到经数据签名校验的消息时才执行代码,并且区块链上存储的信息会区分所做的适当行为。
去中心化共识网络和通用的区块链
以太坊协议是一个点对点网络,其中每个点都存储有同一个区块链数据库的备份和运行以太坊虚拟机以维护和变更其状态。通过使得创建一个新的区块需要所有的网络参与者进行工作量证明计算,工作量证明被整合进区块链技术。共识是通过激励节点总是接受最长的区块链实现的,激励手段就是“以太币”。
这给我们带来一项新技术,它既不是客户端-服务器模式,也不是传统的点对点网络,因其存在激励就意味着人们可以信任它可以提供持续确定性的服务。
因其自身分布式的天然属性和内建加密安全,它可以作为第三方,具有无需信任进行仲裁的能力,并且不受外部第三方的干扰。通过使用密码学货币,由软件做出的决定对人、组织或者其它软件具有金融影响。
这为开发者在互联网上实现交互提供了一种新的方式。在介绍开发去中心化应的精妙之处时,我会再给出一些用例,尽我所能去解释其中每一个的重要性。
深度阅读:
黄皮书: 英文
以太坊博客 (本网站翻译了许多官方博客)
原文: https://dappsforbeginners.wordpress.com/tutorials/introduction-to-development-on-ethereum/
译者:Danny@Ravesky
校对:少平