Ethereum - QuickNode 指南 - Quicknode

  • QuickNode
  • 发布于 2024-04-25 22:53
  • 阅读 7

本文介绍了如何使用 Go 语言创建以太坊地址,详细阐述了以太坊地址的概念及其生成过程,包括所需的包和代码示例。此外,还涵盖了如何检查 Go 语言的安装以及设置项目的依赖性,结构清晰并提供了必备的背景知识,是一个实用的入门指南。

概述

Golang 在后端开发者中非常受欢迎,用于构建基础设施和微服务。Go 是一种程序设计语言。由 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年于谷歌开发,并于 2009 年作为开源编程语言推出,Go 在管理依赖关系方面非常高效。Go 中的程序是通过使用包来组装的。

在过去几年中,Go 获得了大量市场份额,目前被众多大型企业使用。在本指南中,我们将介绍如何使用 Go-Ethereum Client library 在 Go 中创建以太坊地址。

学习 如何使用 Go 连接以太坊网络在这里。

今天我们将使用 go-ethereumcryptocommon 包。

先决条件

  • 安装 Go 版本 1.13 或更高版本。

  • 一个文本编辑器

  • CLI

什么是以太坊地址?

在任何互联网平台上的身份验证都需要用户名和密码。你可以将以太坊地址视为你的用户名,随之而来的私钥则是你的密码(你不需要记住)。以太坊地址是你在区块链上的独特身份,它的格式类似于“0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE”。实际地址是公开的,可以共享,但你的私钥显然必须保密。你自己的以太坊地址在 ETH 网络上至少需要进行以下操作。

  • 收发 ETH 货币

  • 签名/发送交易

  • 连接到应用程序

以下是使用私钥生成以太坊地址的过程。

  • 首先生成一个 64 个 (十六进制) 字符(256 位 / 32 字节)的随机私钥。

例如:

0xf4a2b939592564feb35ab10a8e04f6f2fe0943579fb3c9c33505298978b74893
  • 然后使用椭圆曲线数字签名算法 ( ECDSA) 从生成的私钥导出一个 128 个 (十六进制) 字符(64 字节)的公钥。

例如:

0x04345f1a86ebf24a6dbeff80f6a2a574d46efaa3ad3988de94aa68b695f09db9ddca37439f99548da0a1fe4acf4721a945a599a5d789c18a06b20349e803fdbbe3
  • 然后对公钥(128个字符 / 64字节)应用 Keccak-256 哈希函数,以获得一个 64 个字符(32 字节)哈希字符串。该字符串最后的 40 个字符 / 20 字节以 0x 为前缀,成为最终的以太坊地址。

例如:

0xd5e099c71b797516c10ed0f0d895f429c2781142

什么是 go-ethereum?

go-ethereum 是以太坊的官方 GOlang 实现,用于开发以太坊节点。go-ethereum 包含许多用于在 Go 中与以太坊区块链进行交互和交易的包。

让我们看看如何轻松地在 Go 中生成新的以太坊地址。

在 Go 中生成以太坊地址

这里的第一步是检查 Go 是否已安装在我们的系统上。为此,请在你的终端/命令行中复制粘贴以下内容:

$ go version

如果未安装 Go,请按照你具体操作系统的官方 安装指南 进行安装。

确保你也已安装 GCC 编译器。

对于 Ubuntu - 使用 apt-get install build-essential

对于 Windows - 使用 https://jmeubank.github.io/tdm-gcc/download/

对于 Mac - 使用 homebrew

$ brew install gcc

另一个更快的选项是获取 XCode 命令行工具,使用

$ xcode-select --install

如果你对 Go 不太熟悉,建议你运行他们的互动教程,以了解基本语法、方法以及并发处理。你可以执行一些练习,而不需要离开你的环境。只需在命令行/终端中输入以下命令以本地运行教程:

$ go get golang.org/x/tour

现在输入:

$ tour

首先创建一个名为 address.go 的文件,并将以下代码复制粘贴到其中。这段代码将创建一个私钥、使用该私钥生成一个公钥以及一个以太坊地址。

package main

import (
    "crypto/ecdsa"
    "fmt"
    "log"

    "github.com/ethereum/go-ethereum/common/hexutil"
    "github.com/ethereum/go-ethereum/crypto"
)

func main() {
    privateKey, err := crypto.GenerateKey()
    if err != nil {
        log.Fatal(err)
    }

    privateKeyBytes := crypto.FromECDSA(privateKey)
    fmt.Println("保存但不分享这个 (私钥):", hexutil.Encode(privateKeyBytes))

    publicKey := privateKey.Public()
    publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
    if !ok {
        log.Fatal("无法断言类型: publicKey 不是 *ecdsa.PublicKey 类型")
    }

    publicKeyBytes := crypto.FromECDSAPub(publicKeyECDSA)
    fmt.Println("公钥:", hexutil.Encode(publicKeyBytes))

    address := crypto.PubkeyToAddress(*publicKeyECDSA).Hex()
    fmt.Println("地址:", address)
}

以上代码的解释

第 1-10 行:声明主包并添加生成密钥和地址所需的必要依赖项。

第 12 行:调用主函数。

第 13 行:使用 crypto 包中的 GenerateKey 方法生成随机私钥。

第 14-16 行:检查错误。

第 18 行:使用 crypto/ecdsa 包中的 FromECDSA 方法将私钥转换为字节。

第 19 行:使用 hexutil 包的 Encode 方法将私钥转换为十六进制字符串,并打印出新字符串及警告信息。

第 21 行:使用 crypto 包的 Public 方法从私钥生成公钥。

第 22-28 行:检查公钥的类型,然后按上述与私钥相同的方式将其转换为十六进制字符串,并打印公钥及信息。

第 30 行:使用 crypto 包的 PubkeyToAddress 方法生成以太坊地址,该方法接受 ECDSA 公钥并返回以太坊地址,并将其存储在变量 address 中。

第 31 行:打印地址及信息“地址:”

接下来,让我们创建一个模块来跟踪依赖关系。如果你对 Go 不太熟悉,这是设置项目依赖关系的一个基本步骤。使用 Go 非常简单。

只需输入:

$ go mod init address

这将确保代码中包含的 crypto 和 common 包从 GitHub 下载并在本地安装。它是自动发生的,最新版本应在你的环境中与内置的 Go 模块一起拉取。

现在,让我们运行我们的模块。

$ go run address.go

如果你正确地按照说明进行操作且一切顺利,输出将类似于此。第一行显示私钥,第二行显示公钥,第三行显示你的以太坊地址。

结论

恭喜你使用 Go 创建了一个新的以太坊地址。这个地址可以用来与以太坊区块链网络互动并执行各种操作。请关注 QuikNode 更多易于遵循的指南 - 你实惠且快速的 以太坊节点供应商。学习 如何开始使用 QuikNode 并在几分钟内启动自己的以太坊节点,构建下一个大 dApp!

订阅我们的 新闻通讯 以获取更多关于以太坊的文章和指南。如果你有任何反馈,请随时通过 Twitter 联系我们。你还可以在我们的 Discord 社区服务器中与一些非常酷的开发者交流,你会遇到一些有趣的人 :)

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。