主页 > imtoken钱包安装下载 > 教程 | 以太坊编程简单介绍(一)

教程 | 以太坊编程简单介绍(一)

imtoken钱包安装下载 2023-01-28 07:37:44

以太坊经典和以太坊_以太坊教程_以太坊cpu挖矿教程

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

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

享受过程! 同时,如果您有任何问题、建议或反馈,请毫不犹豫地告诉我。

本文目录

1.迈出第一步

1.1 简介

1.2 WEB3

一、迈出第一步 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组件。

网页3

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

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 使用本地主机提供程序。 让我们打开一个节点控制台并输入以下命令:

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 使用 Large Number 对象来处理数值,而 JavaScript 无法正确处理 Large Number 类型。 您可以通过此链接了解更多信息。

你还要知道,这些余额并不是以 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,使其更美观。 你可以在我的仓库中查看它。 这就是我们所说的 DApp,即分布式应用程序。 即,其部分后端代码运行在分布式对等网络上的应用程序; 在这种情况下,以太坊网络。

以太坊经典和以太坊_以太坊cpu挖矿教程_以太坊教程

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

您会找到用于 UI 的 inde.html 文件和用于与 Ethereum Street Store 交互的 app.js 文件以太坊教程,这基本上就是我们之前描述的用一些 jQuery 回调填充 UI 的内容。 你可以复制我的 repo 并运行它来尝试一下。

感谢阅读此博客,如果您有任何问题、意见或建议,请告诉我! 如果您喜欢这个博客,请继续关注本指南的第二部分,我将在其中重点介绍智能合约!