欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
全部教程·
区块链·
ETH
[目录]
·
以太坊 地址算法
以太坊 教程
以太坊 智能合约
以太坊 ETH GAS
以太坊 虚拟机
以太坊 分布式应用
以太坊 账号
以太坊 虚拟机架构
以太坊 网络节点
以太坊 以太币单位
以太坊 挖矿
以太坊 Ethash共识算法
以太坊 Gas
以太坊 epoch
以太坊 区块结构
以太坊 LSM树
以太坊源码分析
以太坊 启动流程 以太坊 命令行库 以太坊 RPC 以太坊 账户管理 以太坊 交易 以太坊 共识引擎 以太坊 stateObject 以太坊 挖矿 以太坊 MPT 以太坊 数据存储 以太坊 Ethash算法 以太坊 控制台 以太坊 EVM 以太坊 地址算法 以太坊 keystore 以太坊 go-bindata 以太坊 RLP编码 以太坊 Transaction 以太坊 区块存储 以太坊 清除交易 以太坊 txpool 以太坊 交易、存储 以太坊 难度计算 以太坊 每年产量 以太坊 共识算法 以太坊 新区块流程 以太坊 blockchain以太坊资料
以太坊 面试题 以太坊 撤销交易 以太坊 加速交易 以太坊 节点 以太坊 state 以太坊 搭建私链 以太坊 genesis 以太坊 genesis处理 以太坊 ChainId NetworkId 以太坊 区块存储和查找 以太坊 RLP编码 以太坊 区块大小 以太坊 空块 以太坊 挖矿奖励 以太坊 Basefee 以太坊 EIP-1559协议 以太坊 MEV 以太坊 gas 以太坊 指标测量与监控 以太坊 ABI是什么
以太坊 教程
以太坊 智能合约
以太坊 ETH GAS
以太坊 虚拟机
以太坊 分布式应用
以太坊 账号
以太坊 虚拟机架构
以太坊 网络节点
以太坊 以太币单位
以太坊 挖矿
以太坊 Ethash共识算法
以太坊 Gas
以太坊 epoch
以太坊 区块结构
以太坊 LSM树
以太坊源码分析
以太坊 启动流程 以太坊 命令行库 以太坊 RPC 以太坊 账户管理 以太坊 交易 以太坊 共识引擎 以太坊 stateObject 以太坊 挖矿 以太坊 MPT 以太坊 数据存储 以太坊 Ethash算法 以太坊 控制台 以太坊 EVM 以太坊 地址算法 以太坊 keystore 以太坊 go-bindata 以太坊 RLP编码 以太坊 Transaction 以太坊 区块存储 以太坊 清除交易 以太坊 txpool 以太坊 交易、存储 以太坊 难度计算 以太坊 每年产量 以太坊 共识算法 以太坊 新区块流程 以太坊 blockchain以太坊资料
以太坊 面试题 以太坊 撤销交易 以太坊 加速交易 以太坊 节点 以太坊 state 以太坊 搭建私链 以太坊 genesis 以太坊 genesis处理 以太坊 ChainId NetworkId 以太坊 区块存储和查找 以太坊 RLP编码 以太坊 区块大小 以太坊 空块 以太坊 挖矿奖励 以太坊 Basefee 以太坊 EIP-1559协议 以太坊 MEV 以太坊 gas 以太坊 指标测量与监控 以太坊 ABI是什么以太坊 地址生成算法
以太坊地址类似银行账号,通过该地址可以进行发送、接收以太坊,查询交易或者余额信息等。以太坊地址的表现形式是一串十六进制的数字,它从公钥的 Keccak256 哈希值的最后20个字节导出的标识符。
1. 以太坊地址生成过程
- 生成 256 位随机数作为私钥。
- 将私钥转化为 secp256k1 非压缩格式的公钥,即 512 位的公钥。
- 使用散列算法 Keccak256 计算公钥的哈希值,转化为十六进制字符串。
- 取十六进制字符串的后 40 个字母,开头加上 0x 作为地址。
2. 以太坊地址生成示例
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"fmt"
"crypto/rand"
"golang.org/x/crypto/sha3"
"github.com/ethereum/go-ethereum/crypto/secp256k1"
)
type KeccakState interface {
Write(p []byte) (n int, err error)
Read([]byte) (int, error)
}
func Keccak256(data ...[]byte) []byte {
b := make([]byte, 32)
d := sha3.NewLegacyKeccak256().(KeccakState)
for _, b := range data {
d.Write(b)
}
d.Read(b)
return b
}
func PubkeyToAddress(p ecdsa.PublicKey) string {
pubBytes := elliptic.Marshal(secp256k1.S256(), p.X, p.Y)
return fmt.Sprintf("0x%x", Keccak256(pubBytes[1:])[12:])
}
func main() {
privateKeyECDSA, _ := ecdsa.GenerateKey(secp256k1.S256(), rand.Reader)
fmt.Println(PubkeyToAddress(privateKeyECDSA.PublicKey))
}
输出结果:
0x310ea38c411754583a87417be91ca235f3cb005c
下一章:以太坊 钱包keystore
Geth 在创建账号时会生成一个对应 keystore JSON 文件,Keystore 文件存储加密后的私钥信息,因此我们需要做的就是导入这个 Keystore 文件,这个文件通常在同步区块数据的目录下的 k ...
AI 中文社