以太坊开发入门

相信很多同学都跟我一样,是跟着深入浅出区块链学习的。
今天的学习内容:以太坊。

以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。在这个应用中,使用 Solidity 来编写和区块链交互的智能合约,合约编写好后之后,我们需要用以太坊客户端用一个有余额的账户去部署及运行合约。

为了开发方便,可以用 Geth 或 Ganache 来搭建一个测试网络。

智能合约

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

编程语言:Solidity

智能合约现在的主要编程语言是 Solidity 和 Vyper ,Solidity 更为成熟一些,Solidity 合约文件扩展名是 .sol 。
Solidity 是一门编译型语言,代码被编译为以太坊虚拟机字节码之后,再部署到以太坊网络。以太坊为我们提供了很好的工具来完成这项工作,比如:Remix 就是用来开发、编译、部署智能合约的 IDE,它还是一个基于浏览器的 Web IDE。
附:从简单的智能合约例子开始学习solidity
  Solidity 手册

运行环境:EVM

EVM(Ethereum Virtual Machine)以太坊虚拟机 用来执行以太坊上的交易,提供智能合约的运行环境。
附:深入浅出虚拟机

合约的编译

以太坊虚拟机上运行的是合约的字节码形式,需要我们在部署之前先对合约进行编译,可以选择 Remix 或 solc 编译器。
附:搭建智能合约开发环境 Remix IDE 及使用

合约的部署

在以太坊上开发应用时,常常要使用到以太坊客户端(钱包)。平时我们在开发中,一般不接触到客户端或钱包的概念,它是什么呢?

以太坊客户端(钱包)
以太坊客户端,其实我们可以把它理解为一个开发者工具,它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能。
Geth 是典型的开发以太坊时使用的客户端,基于 Go 语言开发。 Geth 提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。
附:Geth 控制台使用及 Web3.js 使用实战

如何部署
智能合约的部署是指把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址称为合约账户。合约部署就是将编译好的合约字节码通过外部账号发送交易的形式部署到以太坊区块链上(由实际矿工出块之后,才真正部署成功)。
附:用 Loom SDK 搭建的以太坊侧链并部署智能合约
  Truffle 教程:教你开发、部署第一个去中心化应用 (Dapp) - 宠物商店

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

Gas
以太坊上用 Gas 机制来计费,Gas 也可以认为是一个工作量单位,智能合约越复杂(计算步骤的数量和类型,占用的内存等),用来完成运行就需要越多 Gas。
附:以太坊中的 gas (汽油) 是什么意思?

以太坊网络

没有以太币进行智能合约的开发:

选择以太坊官网测试网络 Testnet
测试网络中,可以很容易获得免费的以太币,缺点是需要发很长时间初始化节点。

使用私有链
创建自己的以太币私有测试网络,通常也称为私有链,用它来作为一个测试环境来开发、调试和测试智能合约。

使用开发者网络 (模式)
相比私有链,开发者网络 (模式) 下,会自动分配一个有大量余额的开发者账户给我们使用。

使用模拟环境
另一个创建测试网络的方法是使用 Ganache,Ganache 是普通的应用程序,它在本地使用内存模拟的一个以太坊区块链环境,对于开发调试来说,更方便快捷。 Ganache 会在启动时帮我们创建 10 个存有资金的测试账户。
进行合约开发时,可以在 Ganache 中测试通过后,再部署到 Geth 节点中去。

DApp:去中心化的应用程序

基于智能合约的应用称为去中心化的应用程序 (Decentralized App)。如果我们把区块链理解为一个不可篡改的数据库,智能合约理解为和数据库打交道的程序,那就很容易理解 DApp 了,一个 DApp 不单单有智能合约(相当于应用的后台),比如还需要有一个友好的用户界面。

Truffle
Truffle 是一个非常流行 DApp 开发框架,他可以帮我们处理掉大量无关紧要的小事情,让我们可以迅速开始写代码 - 编译 - 部署 - 测试 - 打包 DApp 这个流程。

附:智能合约开发环境搭建及 Hello World 合约

获益良多,感谢深入浅出区块链

原文地址:https://www.cnblogs.com/blockchainnote/p/11589104.html