译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队。假如您想要获取更多及时信息,能够访问ConsenSys主页点击左下角Newsletter订阅邮件。本文的翻译取得了ConsenSys创始人Lubin先生的授权。

有些人说以太坊太难对付,于是咱们(译注:指Consensys, 下同)写了这篇文章来帮助大家学习怎样利用以太坊编写智能合约和运用。这儿所用到的东西,钱包,运用程序以及整个生态体系仍处于开发状态,它们将来会更好用!
榜首部分概述,评论了要害概念,几大以太坊客户端以及写智能合约用到的编程言语。
第二部分评论了总体的作业流程,以及现在盛行的一些DApp框架和东西。
第三部分首要关于编程,咱们将学习怎样运用Truffle来为智能合约编写测验和构建DApp。
榜首部分. 概述
假如你对比如比特币以及其作业原理等密码学钱银的概念完全生疏,咱们主张你先看看Andreas Antonopoulos所著的Bitcoin Book的头几章,然后读一下以太坊白皮书。(译注:以太坊白皮书中文版请看 http://ethfans.org/posts/ethereum-whitepaper)
假如你觉得白皮书中的章节太不流畅,也能够直接着手来熟悉以太坊。在以太坊上做开发并不要求你了解一切那些“密码经济计算机科学”(crypto economic computer science),而白皮书的大部分是关于以太坊想关于比特币架构上的改进。
新手教程
ethereum.org供给了官方的新手入门教程,以及一个代币合约和众筹合约的教程。合约言语Solidity也有官方文档。学习智能合约的另一份不错的资料(也是我的入门资料)是dappsForBeginners,不过现在可能有些过时了。
这篇文章的目的是成为上述资料的弥补,一起介绍一些根本的开发者东西,使入门以太坊,智能合约以及构建DApps(decentralized apps, 分布式运用)更加容易。我会试图依照我自己(依然是新手)的了解来解释作业流程中的每一步是在做什么,我也得到了ConsenSys酷酷的开发者们的许多帮助。
根本概念
了解这些名词是一个不错的开始:
公钥加密体系。 Alice有一把公钥和一把私钥。她能够用她的私钥创立数字签名,而Bob能够用她的公钥来验证这个签名确实是用Alice的私钥创立的,也就是说,确实是Alice的签名。当你创立一个以太坊或许比特币钱包的时候,那长长的0xdf...5f地址实质上是个公钥,对应的私钥保存某处。相似于Coinbase的在线钱包能够帮你保管私钥,你也能够自己保管。假如你弄丢了存有资金的钱包的私钥,你就等于永久失去了那笔资金,因而你最好对私钥做好备份。过来人表明:经过踩坑学习到这一点是十分苦楚的...
点对点网络。 就像BitTorrent, 以太坊分布式网络中的一切节点都位置相等,没有中心服务器。(未来会有半中心化的混合型服务出现为用户和开发者供给方便,这咱们后边会讲到。)
区块链。 区块链就像是一个全球唯一的帐簿,或许说是数据库,记录了网络中一切买卖前史。
以太坊虚拟机(EVM)。 它让你能在以太坊上写出更强大的程序(比特币上也能够写脚本程序)。它有时也用来指以太坊区块链,担任履行智能合约以及一切。
节点。 你能够运转节点,经过它读写以太坊区块链,也即运用以太坊虚拟机。完全节点需求下载整个区块链。轻节点仍在开发中。
矿工。 挖矿,也就是处理区块链上的区块的节点。这个网页能够看到当时活跃的一部分以太坊矿工:stats.ethdev.com。
作业量证明。 矿工们总是在竞赛解决一些数学问题。榜首个解出答案的(算出下一个区块)将取得以太币作为奖赏。然后一切节点都更新自己的区块链。一切想要算出下一个区块的矿工都有与其他节点保持同步,而且保护同一个区块链的动力,因而整个网络总是能达成共识。(留意:以太坊正方案转向没有矿工的权益证明体系(POS),不过那不在本文评论范围之内。)
以太币。 缩写ETH。一种你能够购买和运用的真正的数字钱银。这儿是能够买卖以太币的其间一家买卖所的走势图。在写这篇文章的时候,1个以太币价值65美分。
Gas. (汽油) 在以太坊上履行程序以及保存数据都要耗费一定量的以太币,Gas是以太币转换而成。这个机制用来确保功率。
DApp. 以太坊社区把根据智能合约的运用称为去中心化的运用程序(Decentralized App)。DApp的方针是(或许应该是)让你的智能合约有一个友好的界面,外加一些额定的东西,例如IPFS(能够存储和读取数据的去中心化网络,不是出自以太坊团队但有相似的精神)。DApp能够跑在一台能与以太坊节点交互的中心化服务器上,也能够跑在任意一个以太坊相等节点上。(花一分钟考虑一下:与一般的网站不同,DApp不能跑在普通的服务器上。他们需求提交买卖到区块链而且从区块链而不是中心化数据库读取重要数据。相关于典型的用户登录体系,用户有可能被表明成一个钱包地址而其它用户数据保存在本地。许多事情都会与现在的web运用有不同架构。)
假如想看看从另一个新手视角怎样了解这些概念,请读Just Enough Bitcoin for Ethereum。
以太坊客户端,智能合约言语
编写和部署智能合约并不要求你运转一个以太坊节点。下面有列出根据浏览器的IDE和API。但假如是为了学习的话,仍是应该运转一个以太坊节点,以便了解其间的根本组件,何况运转节点也不难。
运转以太坊节点可用的客户端
以太坊有许多不同言语的客户端完成(即多种与以太坊网络交互的办法),包含C++, Go, Python, Java, Haskell等等。为什么需求这么多完成?不同的完成能满足不同的需求(例如Haskell完成的方针是能够被数学验证),能使以太坊更加安全,能丰厚整个生态体系。
在写作本文时,我运用的是Go言语完成的客户端geth (go-ethereum),其他时候还会运用一个叫testrpc的东西, 它运用了Python客户端pyethereum。后边的例子会用到这些东西。
注: 我从前运用过C++的客户端,现在仍然在用其间的ethminer组件和geth配合挖矿,因而这些不同的组件是能够一起作业的。
关于挖矿:挖矿很有趣,有点像精心照料你的室内盆栽,一起又是一种了解整个体系的办法。虽然以太币现在的价格可能连电费都补不齐,但以后谁知道呢。人们正在发明许多酷酷的DApp, 可能会让以太坊越来越盛行。
交互式控制台。 客户端运转起来后,你就能够同步区块链,建立钱包,收发以太币了。运用geth的一种方式是经过Javascript控制台(JavaScript console, 相似你在chrome浏览器里边按F12出来的那个,只不过是跑在终端里)。此外还能够运用相似cURL的指令经过JSON RPC来与客户端交互。本文的方针是带大家过一边DApp开发的流程,因而这块就不多说了。可是咱们应该记住这些指令行东西是调试,装备节点,以及运用钱包的利器。
在测验网络运转节点。 假如你在正式网络运转geth客户端,下载整个区块链与网络同步会需求适当时刻。(你能够经过比较节点日志中打印的最终一个块号和stats.ethdev.com上列出的最新块来确认是否已经同步。) 另一个问题是在正式网络上跑智能合约需求实实在在的以太币。在测验网络上运转节点的话就没有这个问题。此时也不需求同步整个区块链,创立一个自己的私有链就勾了,关于开发来说更省时刻。
testrpc. 用geth能够创立一个测验网络,另一种更快的创立测验网络的办法是运用testrpc. Testrpc能够在启动时帮你创立一堆存有资金的测验账户。它的运转速度也更快因而更适合开发和测验。你能够从testrpc起步,然后随着合约慢慢成型,转移到geth创立的测验网络上 - 启动办法很简单,只需求指定一个networkid:geth --networkid "12345"。这儿是testrpc的代码库房,下文咱们还会再讲到它。
接下来咱们来谈谈可用的编程言语,之后就能够开始真正的编程了。
写智能合约用的编程言语
用Solidity就好。 要写智能合约有好几种言语可选:有点相似Javascript的Solidity, 文件扩展名是.sol. 和Python接近的Serpent, 文件名以.se结尾。还有相似Lisp的LLL。Serpent从前盛行过一段时刻,但现在最盛行而且最安稳的要算是Solidity了,因而用Solidity就好。传闻你喜欢Python? 用Solidity。
solc编译器。 用Solidity写好智能合约之后,需求用solc来编译。它是一个来自C++客户端完成的组件(又一次,不同的完成产生互补),这儿是装置办法。假如你不想装置solc也能够直接运用根据浏览器的编译器,例如Solidity real-time compiler或许Cosmo。后文有关编程的部分会假定你装置了solc。
留意:以太坊正处于积极的开发中,有时候新的版别之间会有不同步。确认你运用的是最新的dev版别,或许安稳版别。假如遇到问题能够去以太坊项目对应的Gitter聊天室或许forums.ethereum.org上问问其他人在用什么版别。
web3.js API. 当Solidity合约编译好而且发送到网络上之后,你能够运用以太坊的web3.js JavaScript API来调用它,构建能与之交互的web运用。
以上就是在以太坊上编写智能合约和构建与之交互的DApp所需的根本东西。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注