凯鹏华盈之以太坊“初探”
时间:2015-12-01 来源:巴比特 作者:gsj
几个月前开发人员预览版本发布,作为专注区块链技术的投资者,我们发现已有一些公司在以太坊生态系统上创建一些东西。对于入门者而言,以太坊是“运行智能合约的去中心化平台”。你可以在以太坊官网上了解到更多介绍,在维基百科上有个很好的概览,它概述了以太坊最重要的特征。我们想按照自己最熟悉的方法熟悉以太坊-做一些展示然后看看平台会有什么可能。这里,我们分享一些启用以太坊的简单命令,以及一些让我们激情澎湃的想法。我们也开立了更多的复杂合约,这些将在未来的两周陆续发文讨论。 虽然以太坊诞生时间不长,但是我们很兴奋地发现它已经催生了不少应用,并且更让人激动的是,我们直接观察到最近的几个月技术开发人员使用量很强劲。我们相信,以太坊是区块链开发工具链的强有力补充,它让用户方便地使用分布式计算和共享存储,并且是抗审查和防破坏的。项目也敦促我们在其它区块链上实现以太坊虚拟机(EVM),比如Rootstock、Counterparty。我们认为,这是EVM字节码作为通用低级合约语言走向融合的先兆,但只有时间才能说明EVM字节码是否能成为主流合约语言,以太坊能否保持成为EVM最常用的实现。我们看来,类似这些项目的存在能够减少创业者在以太坊上开发产品时面临的平台风险。 让我们最兴奋的是,很多公司把区块链作为精妙的架构放在库房里供选用,并且对终端用户来说不可见。从用户视角来看,我们相信这些服务将会比之前更加便宜、快捷、安全(在区块链技术投资主题的博客里与有更多介绍)。我们想,以太坊作为一个软件平台明显增加了区块链技术在应用技术中使用的方法。 如果你是使用区块链技术的创始人员,我们欢迎聊聊! 安装以太坊 注:这些演示是在OS X机器上编写和执行的,但是同样的命令不需要修改就能在Linux机器上运行,在Windows机器上也仅需微调。这些命令假设读者对以太坊、区块链工作原理有初步的了解,对软件工程有较熟悉的掌握。 开始时,按照以下指示安装以太坊客户端。安装好后,你需要在shell上使用`geth`命令同步以太坊区块链到你的机器上,不需要参数(表示以后台进程运行,但是作为本地测试我发现以交互式shell运行更好)。同步区块链需要点时间,你可以在后台进程日志消息末尾显示的区块数量查看进度,并且可以跟以太坊仪表盘的总量进行对比。演示的其它部分假设你的后台进程正在运行,所以请这个shell窗口在后台打开。 在你的区块链同步期间,你可以开立一个本地以太坊账户。你需要拥有一些以太坊的基础货币以太,它们存在本地钱包里面以订立合约。以太是以太坊的计算货币,以“燃料”为单位用以合约订立和交互,在网上动态定价。货币燃料价格可以在上面的以太坊仪表盘查看。 在第二个shell窗口,运行命令`geth account new`,设置账户密码,确认回复的地址。在以太坊的文档里面有更多账户开立和管理的介绍。 现在你需要在一个交易市场上购买一些以太,比如Poloniex或者Cryptsy(如果你已经有一些比特币,你可以在交易所里兑换成以太),或者也可以按照以太坊官网上提供的方法获得以太,然后传送到你本地账户地址。很少量的以太就可以开始-运行下面的演示只需要0.1以太,在撰写本文的时候,大概相当于0.1美元。 你可以查看你的区块个数是否与上文链接的以太坊仪表盘相同, 一旦你的区块链同步完毕,并且在你的账户里存储有一点以太,你就可以订立第一个合约了。你可以打开以太坊控制台查看余额,在一个新的shell窗口输入“geth attach”命令,运行`geth attach`是你以太坊javascript控制台的入口,它提供了基本的javascript执行环境,添加了一些以太坊扩展,完整的命令手册在以太坊维基百科上有。 部署你的第一个合约 为了让你更熟悉合约的部署流程,我建议部署一个简单的Hello World合约,它是我从浩瀚的以太坊合约教程中找来的: 这个合约是Solidity语言编写的,它是一种类Javascript语言,被变成成字节码后可以运行在以太坊的虚拟机上。这个关于接待员的合约会返回我们提供的字符串,在这里例子里就是“Hello,world!”之类的东西。当我们结束合约时,“mortal”类可以直接停止合约,并且发送合约中标明的资金到创建它的地址里。永恒合约可以用作任何你想订立的合约的基类-Solidity支持合约的完全继承模式。 如果部署这个合约,你需要将它编译成EVM的字节码。安全的做法是你在本地安装一个编译器,因为在线编译器可能产生意外的代码。仅用作示例,我们还是用网页版的Solidity编译器。 假设你使用网页版的编译器,你需要作的就是粘贴关于接待员的代码到编辑器中,然后从右边获得编译后的字节码。很方便的是,在右边的面板中包含有一个Javascript小工具,它可以运行在以太坊JS控制台上,标题是“Web3 deploy”。注意你需要在这个小工具的上方填写欢迎词,然后在以太坊控制台中运行。在后面你也仍然需要这个小工具交互界面。 现在,在一个新的shell中运行命令`geth attach`打开一个新的以太坊JS控制台,粘贴Web3部署工具。在几分钟后,你将看到一条消息,显示“Contract mined”(合约挖到了),并且附有合约保存的地址。这样你就完成部署了第一个以太坊合约-恭喜! 你也可以在公告区块浏览工具中查看你的合约,比如可以在这里查看,在其中搜索交易的哈希值即可,还可以看到部署的字节码。把这个地址记下来,你在跟合约交互的时间就需要用到它。 在跟合约交互时,在同样的控制台,运行命令`greeter.greet();`,你就可以得到事前输入的字符串。因为这不需要在区块链上运行任何代码,所以操作耗费的能源为0.当你粘贴到Web3部署代码工具时,`greeter`对象就被实例化,但它也可以被单独建立起来,所以任何人都可以运行它而不需要本地源代码副本。 为了展示一个朋友如何在他们本地的以太坊代码中运行同样的合约,我们在一个新的控制台环境上运行同样的合约。使用`exit`命令退出以太坊控制台,重新运行`geth attach`命令打开它。为了证实你在一个新的控制台环境中,可以运行`greeter.greet()`命令,你将得到一个引用错误提示,表示提到的招待员没有被定义。现在运行`var greeter = eth.contract(ABI).at(“Address”);`实例化一个新的招待员,其中ABI是Solidity编译器先前创建的交互工具,Address是先前合约被挖到的地址。然后你就可以运行“greeter.greet()” ,得到与先前一样的信息。 在这里有一个重要的提示,你写下的字符串现在可以被存储在区块链了,任何人都可以访问。你甚至可以创建一个函数,仅允许作为合约所有者的你有权更改。 我在地址“0xb55f89461a273f8dbde74a92cdc752d86427476b”上有另外一个招待员,它使用同样的交互工具,就是Solidity网页编译器为你的欢迎合约而提供的那个。作为奖励,你运行合约里面的函数,就可以看到我写在合约里的信息。 从一个技术开发人员看来,这些很浅显渺小,你是在运行一个简单的hello world程序,它输出你期望的东西。有意思的是,这些代码已经植入到以太坊区块链中了,可以访问到高度分布式、防审查、防破坏的存储和计算,而且不需要你去创建自己的分布式基础环境。 如果需要注销你的合约,可以运行 `greeter.kill.sendTransaction({from:”ACCOUNT_ADDRESS”})`,其中ACCOUNT_ADDRESS是你创建账户时得到的地址。注销后,你的招待员将不会再运行。 我这里啰嗦了一些细节,希望能引起你的兴趣去学习更多的东西。不可能一篇文章里面把我们创建的项目都阐述完整,所以在未来的几周我们将继续发布一些介绍。 |