主页 > imtoken > 以太坊编程简介

以太坊编程简介

imtoken 2023-07-01 06:11:21

以太坊编程的简单介绍

两个月前,我被要求构建一个以太坊网络应用程序作为加入 Zeppelin 的工作测试,但我对区块链技术一无所知。我几乎没有听说过比特币,所以我别无选择,只能学习。

这将是一系列面向有抱负的以太坊软件开发人员的帖子。但请记住,我不认为自己是该领域的专家,我只是希望能够将我所学的东西教给大家,以便为像我这样处于学习阶段的人节省时间。在本系列博客结束时,您应该能够构建一个完整的支持智能合约的 Web 应用程序(也称为 DApp)。

享受这个过程!同时,如果您有任何问题、建议或反馈,请随时告诉我。

本文目录

1.第一步

1.1 简介

1.2 WEB3

1. 第一步

区块链 以太坊 区别

1.1 简介

我假设你有一些计算机编程基础知识并且知道区块链数据结构是怎样的。如果您不具备以上知识,请先了解此链接的内容,然后再返回本文。

以太坊编程的简单介绍

以太坊

首先让我们定义以太坊,或者我在研究后对它的理解。以太坊是一个基于区块链技术的开源、分布式、公共平台,使应用程序能够在不受审查和第三方干预的情况下运行。

智能合约

智能合约只是计算机程序。我们基于智能合约创建以太坊应用程序。请记住,虽然这个概念现在随着以太坊而出现,但它实际上是由 Nick Szabo 在 1996 年提出的。

以太坊虚拟机

区块链 以太坊 区别

EVM 是一个沙盒运行时和完全独立的以太坊智能合约环境。这意味着在 EVM 中运行的每个智能合约都无法连接到网络、文件系统或其他进程。

煤气

由于以太坊是一个分布式平台,因此必须有办法限制给定智能合约的可用资源,否则可能会瘫痪整个网络的计算能力。 Gas 通过确定在 EVM 中执行的每条指令的执行成本来解决这个问题。重要的是,发送到网络的每笔交易都有“gas 预算”。如果预算的gas用完,交易会失败,但交易仍会被挖掘到区块链中。

以太 (ETH)

这是以太坊的加密数字货币。 Gas/Ether 的动态交易价格用于衡量操作将花费多少 ETH。执行交易所需的费用是通过将 gas 使用量乘以 gas 价格来计算的(计算的费用将以 ETH 支付)。您可以将交易的 gas 价格设置为任何值。但是,如果您将 gas 价格设置得太低,则没有人会执行您的代码。

帐户

每个帐户都由一个地址标识。两个帐户共享相同的地址空间。一种是由公私钥对控制的外部账户,通常由人拥有,用于存储 ETH。另一个是由其存储的代码控制的合约账户。这两个账户有一些区别,其中一个很重要,只有外部账户才能发起交易。

交易

区块链 以太坊 区别

交易是从一个帐户发送到另一个帐户的消息。您可以将交易发送到另一个帐户以转移 ETH。如果目标账户是合约账户,它的代码也会被执行。请注意,每个涉及代码执行的事务都将在网络中的所有节点上执行。此外,所有代码运行和交易执行都将记录在以太坊区块链上。

坚固

Solidity 是一种面向契约的高级语言,其语法类似于 JavaScript。 Solidity 是静态类型的,支持继承、库和复杂的用户定义类型。编译后就是节点运行的EVM程序集。

WEB3

我决定通过简单地将 ETH 从一个账户发送到另一个账户来开始与以太坊区块链交互。我不想用真正的 ETH 做这个实验区块链 以太坊 区别,因为我可能会弄得一团糟,所以我开始寻找一些测试/虚拟环境。在阅读了 Manu 令人震惊的帖子后,我发现了 testrpc,一个用于测试和开发的 node.js 以太坊客户端。让我们安装这个客户端并开始使用它:

npm install -g ethereumjs-testrpc
testrpc

您会注意到 testrpc 已经生成了 10 个地址,所有这些地址都有可用的虚拟 ETH 供人类使用而无需担心。这就是 testrpc 默认的工作方式,您也可以按照文档进行自定义初始化。很重要的一点你要记住,testrpc 的状态是不稳定的,每次关闭它区块链 以太坊 区别,你的节点和账户状态都会被清除。

你需要知道的另一件事是 Web3.js。这是一个实现以太坊 JSON RPC 的 JavaScript 库。也就是说,我们将使用此协议与以太坊节点(在本例中为 testrpc)进行交互。安装只需运行:

区块链 以太坊 区别

npm install -g web3@0.20.1

顺便说一下,在这个例子中,安装 Web3 0.20.x 版本而不是 Beta 1.0.0 版本非常重要。首先,您需要将运行在 testrpc 上的本地测试节点连接到 Web3.为了做到这一点,我们要求 Web3 使用 localhost 提供程序。让我们打开一个节点控制台并输入以下命令:

Web3 = require('web3')
provider = new Web3.providers.HttpProvider("http://localhost:8545")
web3 = new Web3(provider)

请注意,我们使用的是默认的testrpc端口(8545),如果你设置了另一个端口,记得更改提供者的URL。一旦你得到了web3实例,首先运行以下命令得到一个列表您的以太坊节点中的账户数量及其各自的余额:

web3.eth.accounts.forEach(account => {
 balance = web3.eth.getBalance(account);
 console.log(balance);
})

您可能已经注意到,输出的并非都是数字列表,这是因为 Web3 使用大数字对象来处理数值,而 JavaScript 无法正确处理大数字。您可以了解有关此链接的更多信息。

您还必须知道,这些余额不是以 ETH 表示的,实际上它们是以基本单位 wei 表示的。 1 ETH 是 10¹⁸ wei。您可以通过查阅以太坊文献信息了解更多关于 ETH 转换的信息。

回到我们的话题,让我们尝试在两个账户之间发送 ETH。需要输入web3.eth.accounts并选择其中两个,可以使用sendTransaction方法:

区块链 以太坊 区别

from = web3.eth.accounts[0]
to = web3.eth.accounts[1]
transaction = { from: from, to: to, value: 100000 }
transactionHash = web3.eth.sendTransaction(transaction)

命令输出为交易哈希,也可以通过以下命令获取交易信息:

web3.eth.getTransaction(transactionHash)

您可能还想检查您正在使用的帐户的余额是否发生了变化。您可以使用以下命令进行验证:

web3.eth.accounts.forEach(account => {
 balance = web3.eth.getBalance(account);
 console.log(balance);
})

接下来,我使用 HTML 和 jQuery 以及一些 Bootstrap 构建了一个简单的 UI,使其更加美观。你可以在我的 repo 中查看。这就是我们所说的 DApp 或分布式应用程序。比如说,一个应用程序的部分后端代码在分布式对等网络上运行;在这种情况下,分布式点对点网络就是以太坊网络。

以太坊编程的简单介绍

- 我开发的用于测试 ETH 交易的 DApp 的 UI-

您将找到用于 UI 的 inde.html 文件和用于与 Ethereum street store 交互的 app.js 文件,这基本上就是我们之前所做的 用一些 jQuery 回调填充 UI,如前所述。你可以复制我的 repo 试试看。