主页 > imtoken官网下载教程 > 一、以太坊节点介绍

一、以太坊节点介绍

imtoken官网下载教程 2023-07-29 05:17:27

译者:布加迪

存档节点是以太坊网络上存储历史区块链数据的特定节点。 因为它们提供了这些历史信息,所以当您需要审核过去的交易历史或收集数据时,它们非常有用。 Etherscan 和 Dune Analytics 等服务使用存档节点,但任何人都可以自己运行存档节点。

以太坊怎么下载和注册_手机以太坊怎么下载和注册_怎么注册以太坊地址

在本文中,我们将介绍不同类型的以太坊节点,深入了解存档节点,并介绍 Infura 的新存档节点功能。 然后,我们将使用一个真实的项目作为示例来展示如何将 Infura API 和 web3.js 连接到预构建的 React 前端。 完成后,用户可以查询存档节点以获取特定以太坊钱包地址的一些统计信息。

一、以太坊节点介绍

简单来说,节点是网络中的连接点。 就以太坊而言,不同类型的节点对网络有不同的责任。

以太坊区块链在所谓的以太坊虚拟机 (EVM) 上运行,这是一种去中心化的全球计算机。 节点为计算机提供处理能力。 他们可以提供请求的数据、创建和验证区块、存储交易数据或智能合约代码等等。 任何拥有所需硬件的人都可以下载以太坊客户端软件,启动自己的节点并参与网络。 这也防止了任何单一实体控制整个网络,促进了以太坊的去中心化。

有四种主要类型的以太坊节点,每种类型对网络的贡献不同。 它们一起将信息中继到其他节点,验证交易和 EVM 状态,并提供保持以太坊网络高效运行所需的基础设施。 他们相互通信以确保他们都能就网络状态达成一致。 因此,拥有更多的节点会使网络更强大,更能抵抗攻击。

2. 以太坊节点类型

全节点

全节点验证交易和 EVM 状态,验证区块,启动和执行智能合约代码,并在请求时提供网络数据。 他们还将以太坊区块链的状态存储到最后 128 个区块,并可以根据需要建立历史状态档案。

挖矿节点(也叫Miner)

挖矿节点是运行挖矿客户端软件的全节点。 在目前的状态下,以太坊通过工作量证明算法提供共识。 这意味着挖矿节点与其他挖矿节点竞争计算能力以创建下一个区块。 一旦创建,新块将被广播到网络,由其他节点验证,并附加到区块链的末尾。

轻节点

轻节点是全节点的“轻”版本,它只包含区块头数据,例如前一个区块的哈希值和时间戳,而不是整个区块数据。 他们向全节点发出按需请求,仅在用户需要时验证部分状态。 典型用途是检查余额、验证交易是否已确认、检查事件日志以及执行其他轻任务。 轻节点很容易由低容量设备运行,如手机或树莓派。

归档节点

存档节点是在“存档模式”下运行的完整节点。 它们包含与全节点相同的所有数据,但还包含一个创世块(第一个块)来记录整个区块链的所有历史状态数据。 下面将重点介绍归档节点。

3.存档节点详情

虽然全节点可以重建历史区块链状态数据,但这个过程缓慢且低效。 根据用例,您可能需要快速提供此数据。 这时候,存档节点就派上用场了。 由于存档节点包含自第一个区块以来的历史数据,因此它们可以随时轻松跟踪任何交易。

为什么要访问存档节点?

如果您需要从以太坊区块链中获取最近 128 个区块之前的信息,最有效的获取方式是通过存档节点。 其中一些信息可能包括账户余额、智能合约代码、交易数量或特定存储位置的价值。 它们还允许在不在区块链上创建交易的情况下测试智能合约代码。

运行存档节点的硬件规格

运行自己的节点意味着可以更好地控制您与区块链共享的信息。 您可以创建更安全和私密的 dApp(去中心化应用程序),确保您的地址和余额不会泄露到网络上的随机节点。 运行存档节点还意味着无需注册任何第三方服务即可快速访问历史区块链数据。

这些是您运行自己的以太坊存档节点所需的硬件规格:

要求启动一个存档节点,以便它可以顺利访问。 不完全便宜,但个人负担得起。 不过,它确实需要一些技术知识和持续维护。 如果您没有时间、精力或设备来自己运行节点提供商,那它就很棒。

4.存档节点提供者

节点提供商使任何人都可以通过易于使用的 API 轻松访问以太坊区块链并与之交互。 您所要做的就是创建一个新项目,然后使用您的节点提供商提供的 URL 轻松调用 JSON RPC 方法。

英富拉

Infura 可以说是该领域最受欢迎的节点提供商。 它是由 ConsenSys 创建的,ConsenSys 是 MetaMask 和 Truffle 区块链开发框架背后的团队。 它已经存在了一段时间,它的服务非常适合初学者和希望扩大规模的组织。

例子

根据您正在构建的项目类型,您可以将多种不同的技术连接到您的节点提供者。

如果您正在编写与历史数据交互的智能合约,那么像 Truffle 或 Hardhat 这样的开发工具包将符合要求。 它们都有各种各样的内置工具,使 dApp 的整个开发生命周期变得极其简单。 在这种情况下,连接到存档节点就像将提供的 API URL 端点设置为要在前端代码中使用的变量一样简单。

如果您需要快速访问存档节点以进行本地开发或测试,Truffle 提供了一个非常适合的个人区块链。 这个区块链叫做 Ganache。 从 Ganache 7.0 版开始,启动具有存档访问权限的以太坊区块链本地实例只需要一个命令:

复制

ganache --fork1.

然后,您可以使用 URL::8545 或用于设置端口的任何 URL,以与上述类似的方式进行交互。

如果您不需要一套区块链工具,您可以直接在前端代码中使用节点提供者 URL,并使用 ethers.js 或 web3.js 等 JavaScript 库连接到它。 这是我们将在下面的项目中探索的选项。

5.项目

正如本文开头所述,我们将制作一个简单的“年度回顾”类型的应用程序来显示 2021 年的一些钱包统计数据。我们将克隆一个预构建的前端,这样我们只关心查询存档节点,并很好地显示数据。

我们将学习:

完成项目需要什么:

Infura API 网址

我们项目的第一步是设置 Infura 帐户并获取 API 端点 URL。 前往 Infuria 网站,创建一个新帐户或登录。

创建一个新项目以获取我们稍后在项目中需要的 API 端点 URL。

怎么注册以太坊地址_以太坊怎么下载和注册_手机以太坊怎么下载和注册

由于所有用户都可以免费访问存档,因此我们不需要使用 Infura 帐户完成任何其他步骤。

让我们开始在前端工作吧!

前端

我们将为这个项目的其余部分构建一个预构建的 React 前端。 如果您以前从未使用过 React 也没关系。 我们将一起完成剩余的步骤。

为了正确安装项目,我们将使用 Git 和节点包管理器 (npm)。 要查看它们是否已安装,我们可以在命令行上检查版本号:

复制

npm –version  git --version1.2.3.

如果它们仍需要安装在您的机器上,您可以通过“项目”部分提供的链接获取它们。

安装后,我们可以开始处理项目的其余部分:

第1步

通过导航到您要处理的文件夹,在命令行中克隆我们项目的存储库:

复制

git clone https://github.com/paul-mcaviney/archive-node-project-frontend.git1.

第2步

将目录更改为新项目文件夹,安装所需的依赖项:

复制

cd archive-node-project-frontendnpm i1.2.3.

第 3 步

安装依赖项后,最好运行该项目以确保它到目前为止正常工作:

复制

npm start1.

如果一切安装正确,现在有一个前端在 :3000 上运行手机以太坊怎么下载和注册,如下所示:

以太坊怎么下载和注册_手机以太坊怎么下载和注册_怎么注册以太坊地址

有一个文本字段可以输入钱包地址。 点击“提交”按钮进入结果页面。 从这里我们还可以通过按“输入新地址”按钮返回输入页面。

第四步

在开始编码之前,我们需要再安装一个依赖项。 我们将使用 web3.js 通过 Infura URL 访问存档节点。 要安装 web3.js手机以太坊怎么下载和注册,请在我们的项目目录中键入以下命令:

复制

npm install web31.

步骤 5

我们将在 src 文件夹下的 App.js 文件中完成所有编码。 需要编写的第一段代码是将 web3 导入我们的项目并将其连接到 Infura URL。 在 import 语句下,在 App 函数之前,添加以下代码:

复制

JavaScriptconst Web3 = require('web3'); const infuraURL = 'YOUR_INFURA_URL_HERE'; const web3 = new Web3(new Web3.providers.HttpProvider(infuraURL));1.2.3.4.

注意:不要在没有先隐藏您的实际 Infura URL 的情况下将此项目上传到公共存储库。 您可以为此使用环境变量。

步骤 6

我们将使用 useState React 挂钩来更新 UI。 您会注意到它已经导入到我们文件的顶部。 接下来,让我们添加一些 React 状态变量,以便更轻松地显示我们从存档节点收集的数据。 在结果状态变量下,添加以下内容:

复制

JavaScriptconst [address, setAddress] = useState(''); const [currentBalance, setCurrentBalance] = useState(0); const [startOfYearBalance, setStartOfYearBalance] = useState(0); const [endOfYearBalance, setEndOfYearBalance] = useState(0); const [balanceDifference, setBalanceDifference] = useState(0); const [transactionCount, setTransactionCount] = useState(0);1.2.3.4.5.6.7.

第 7 步

现在我们需要更新 handleInput 函数以将用户输入分配给我们的地址状态变量而不是记录评论:

复制

JavaScriptconst handleInput = event => {      setAddress(event.target.value); };1.2.3.4.

注意:您会注意到我们没有在此处进行任何检查以确保用户输入的内容实际上是以太坊钱包地址。 这是为了使本教程简单。 如果公开部署,则需要以不同方式处理。

步骤 8

最后一段 JavaScript 是一个异步函数,它将从存档节点收集数据,将其转换为更易读的值,并设置我们的状态变量。 在说明 your JavaScript code will go here (your JavaScript code will go here) 的注释下方,键入以下代码:

复制

JavaScript// Access and process data from Ethereum blockchainconst accessEthereum = async () => {    // 2021 Start and End Block variables     const START_2021_BLOCK = 11565019;    const END_2021_BLOCK = 13916165;    // Get current balance of address     const balance = await web3.eth.getBalance(address);    // Convert balance from wei to ETH and set state variable    setCurrentBalance(await web3.utils.fromWei(balance.toString(), 'ether'));    // Get wallet balance at the start of 2021 (Block #11565019)    const startBalance = await web3.eth.getBalance(address, START_2021_BLOCK);    // Get wallet balance at the end of 2021 (Block #13916165)    const endBalance = await web3.eth.getBalance(address, END_2021_BLOCK);    // Convert startBalance to ETH and set state variable    const startBalanceAsETH = await web3.utils.fromWei(startBalance.toString(), 'ether');    setStartOfYearBalance(startBalanceAsETH);    // Convert endBalance to ETH and set state variable    const endBalanceAsETH = await web3.utils.fromWei(endBalance.toString(), 'ether');    setEndOfYearBalance(endBalanceAsETH);    // Set balanceDifference from start to end of 2021    setBalanceDifference(endBalanceAsETH - startBalanceAsETH);    // Get transaction count at start of 2021 (Block #11565019)    let startTransactions = await web3.eth.getTransactionCount(address, START_2021_BLOCK);    // Get transaction count at end of 2021 (Block #13916165)    let endTransactions = await web3.eth.getTransactionCount(address, END_2021_BLOCK);    // Set total transaction count in 2021    setTransactionCount(endTransactions - startTransactions);    // Received results, condition met to show them on screen    setResults(true);    };1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.

步骤 9

转到 HTML,我们做的第一件事是用我们刚刚编写的新函数替换按钮函数。 在change this button function comment下,更改按钮的函数调用:

复制

第 10 步

我们需要的最后一段代码是 HTML,它将显示我们从存档节点收集的数据。 在 return 语句中,向下滚动到说明 your HTML code will go here (your HTML code will go here) 的注释并添加以下内容:

复制

HTML

{address}

Current Balance

{currentBalance} ETH

Start of 2021 Balance

{startOfYearBalance} ETH

End of 2021 Balance

{endOfYearBalance} ETH

Difference from Start of 2021

{balanceDifference} ETH

Number of transactions in 2021

{transactionCount}


1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.

步骤 11

试试我们的应用程序,看看它是否有效! 首先启动应用程序:

复制

npm start1.

在文本字段中输入以太坊钱包地址,然后单击“提交”。 如果您在 2021 年没有有效的钱包地址,您可以使用 Vitalik 的钱包地址。

怎么注册以太坊地址_手机以太坊怎么下载和注册_以太坊怎么下载和注册

惊人的! 我们的结果显示正确,可以看到 2021 年钱包地址的所有活动!

六,结论

如果您遵循本教程,您可以使用 Infura API 端点 URL 访问存档节点上的数据,然后在简单的 ETH 年度回顾应用程序中很好地显示它。

存档节点可以访问以太坊区块链中最近 128 个区块的数据。 它们存储来自第一个块的所有历史状态数据,并且可以比全节点更快、更有效地提供这些数据。 鉴于 Infura 允许所有用户免费访问存档节点,收集历史区块链数据从未如此简单!