登录
首页 > 文章列表 > 以太坊入门:零基础DApp开发指南

更新时间:2025-08-29 08:20:58 编辑:丁丁小编
来源:点击查看

简介

什么是以太坊?

以太坊,你可以把它想象成一个基于区块链技术的“安卓系统”。它是一个去中心化的应用平台,允许任何人在上面创建和使用各种应用。

简单来说,有了以太坊,你就能像在安卓系统上开发App一样,基于区块链技术编写各种应用。

在以太坊出现之前,开发区块链应用可不是件容易事:你需要复制一份比特币的代码,然后修改底层的加密算法、共识机制、网络协议等等。

而以太坊把这些底层技术都封装好了,开发者可以直接在以太坊平台上进行开发,专注于应用本身的逻辑,大大降低了难度。

现在,以太坊已经形成了一个完善的开发生态圈,有社区支持,还有各种开发框架和工具可供选择。

智能合约:区块链上的“自动售货机”

什么是智能合约?

以太坊上的程序叫做智能合约,它就像一个自动售货机:你投入硬币(发送交易),它就会自动执行预设的规则,给你相应的商品(结果)。

智能合约可以理解为一段在区块链上自动执行的代码,它由特定的事件触发,并按照预先设定的规则运行。

比特币的交易也可以编程,但功能非常有限。而以太坊则更加强大(计算机科学里称之为“图灵完备”),你可以像使用任何高级语言一样,编写几乎可以做任何事情的程序(智能合约)。

智能合约非常适合对信任、安全和持久性要求较高的场景,比如:数字资产、投票、保险、金融应用、预测市场、产权管理、物联网、点对点交易等等。

虽然现在真正落地的应用还不多,但就像移动互联网刚起步时一样,相信未来几年内,各种杀手级应用会慢慢涌现。

Solidity:智能合约的编程语言

Solidity 是智能合约的默认编程语言,它的语法和 JavaScript 很像。你可以用它来编写合约,然后编译成以太坊虚拟机可以执行的字节码。

还有一种叫做 Serpent 的智能合约开发语言,语法和 Python 类似。不过,我建议大家还是使用 Solidity,毕竟用的人多,资料也多。

Browser-Solidity 是一个在线的 Solidity IDE,你可以去看看,我们以后也会有更多文章介绍 Solidity。

EVM:智能合约的运行环境

EVM(Ethereum Virtual Machine),也就是以太坊虚拟机,是智能合约的运行环境。

Solidity 之于 EVM,就像 Java 之于 JVM 一样。

以太坊虚拟机是一个隔离的环境,在 EVM 内部运行的代码不能和外部世界产生联系。

EVM 运行在以太坊节点上。当你把合约部署到以太坊网络上之后,合约就可以在整个网络中运行了。

合约的编译:把代码变成“机器语言”

以太坊虚拟机运行的是合约的字节码,所以在部署之前,你需要先对合约进行编译。你可以使用 Browser-Solidity Web IDE,也可以使用 solc 编译器。

合约的部署:把合约“上传”到区块链

在以太坊上开发应用时,你经常会用到以太坊客户端(wallet)。它是什么呢?

以太坊客户端(wallet):你的开发工具箱

以太坊客户端,你可以把它理解为一个开发者工具,它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能。

EVM 就是由以太坊客户端提供的。

Geth 是典型的开发以太坊时使用的客户端,它基于 Go 语言开发。Geth 提供了一个交互式命令控制台,通过这个控制台,你可以使用以太坊的各种功能(API)。

Geth 控制台和 Chrome 浏览器开发者工具里面的控制台类似,只不过 Geth 控制台是跑在终端里的。

相对于 Geth,Mist 则是一个图形化界面的以太坊客户端。

如何部署合约?

智能合约的部署,就是把合约的字节码发布到区块链上,并用一个特定的地址来标识这个合约,这个地址叫做合约账户。

以太坊中有两类账户:

和比特币使用 UTXO 的设计不同,以太坊使用更为简单的账户概念。

对于 EVM 来说,这两类账户都是一样的。

外部账户和合约账户的区别和关系是这样的:一个外部账户可以通过创建交易并用自己的私钥签名,来发送消息给另一个外部账户或合约账户。

在两个外部账户之间传送消息,就是价值转移的过程。而从外部账户到合约账户的消息,会激活合约账户的代码,允许它执行各种动作(比如转移代币、写入内部存储、挖出一个新代币、执行一些运算、创建一个新的合约等等)。

只有当外部账户发出指令时,合约账户才会执行相应的操作。

合约部署,就是将编译好的合约字节码通过外部账户发送交易的形式部署到以太坊区块链上(由矿工打包到区块之后,才真正部署成功)。

合约的运行:执行合约中的代码

合约部署之后,当需要调用这个智能合约的方法时,只需要向这个合约账户发送消息(交易)即可。通过消息触发后,智能合约的代码就会在 EVM 中执行。

Gas:运行合约的“燃料”

和云计算类似,占用区块链的资源(不管是简单的转账交易,还是合约的部署和执行)同样需要付出相应的费用。

以太坊使用 Gas 机制来计费。Gas 可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量和类型、占用的内存等),运行它就需要越多的 Gas。

任何特定的合约所需的 Gas 数量是固定的,由合约的复杂度决定。

而 Gas 价格由运行合约的人在提交运行合约请求的时候规定,以确定他愿意为这次交易付出的费用:Gas 价格(用以太币计价) * Gas 数量。

Gas 的目的是限制执行交易所需的工作量,同时为执行支付费用。当 EVM 执行交易时,Gas 将按照特定规则被逐渐消耗。无论执行到什么位置,一旦 Gas 被耗尽,将会触发异常。当前调用帧所做的所有状态修改都将被回滚。如果执行结束还有 Gas 剩余,这些 Gas 将被返还给发送账户。

如果没有这个限制,就会有人写出无法停止(比如死循环)的合约来阻塞网络。

因此,我们需要一个有以太币余额的外部账户,来发起一个交易(普通交易或部署、运行一个合约)。运行时,矿工收取相应的工作量费用。智能合约的部署,就是把合约字节码发布到区块链上,并用一个特定的地址来标识这个合约,这个地址叫做合约账户。

测试网络:你的“私人游乐场”

有些同学可能会问:我没有以太币,要怎么进行智能合约的开发?

答案是创建自己的以太币私有测试网络,也叫做私有链。你可以把它当做一个测试环境,用来开发、调试和测试智能合约。

通过上面提到的 Geth,你可以很容易地创建一个属于自己的测试网络,随便挖以太币,而且还免去了同步正式网络的整个区块链数据。

另一个创建测试网络的方法是使用 testrpc。testrpc 是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更方便快捷。而且 testrpc 可以在启动时帮你创建一堆存有资金的测试账户。

你可以先在 testrpc 中测试通过合约,然后再部署到 Geth 中去。

DApp:去中心化的应用程序

以太坊社区把基于智能合约的应用称为去中心化的应用程序 (Decentralized App)。如果你把区块链理解为一个不可篡改的数据库,把智能合约理解为和数据库打交道的程序,那就很容易理解 DApp 了。一个 DApp 不仅仅有智能合约,还需要一个友好的用户界面和其他的东西。

Truffle:DApp 开发的“脚手架”

Truffle 是一个 DApp 开发框架,它可以帮你处理掉大量琐碎的事情,让你能够迅速开始写代码、编译、部署、测试、打包 DApp。

总结:以太坊开发全景图

现在我们来总结一下:以太坊是一个平台,它让你方便地使用区块链技术开发去中心化的应用。在这些应用中,你可以使用 Solidity 编写和区块链交互的智能合约。合约编写好之后,你需要使用以太坊客户端,用一个有余额的账户去部署和运行合约(使用 Truffle 框架可以更好地帮助你完成这些事情)。为了开发方便,你可以用 Geth 或 testrpc 来搭建一个测试网络。

注:为了方便大家理解,我对一些概念做了类比,有些严格来说并不准确。不过我认为对于初学者来说,没有必要把每一个概念都掌握得非常细致和准确。学习是一个逐步深入的过程,很多时候我们会发现,过一段时间后,我们会对同一个东西有不一样的理解。

热门文章